135 lines
4.3 KiB
C#
135 lines
4.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel.DataAnnotations;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using System.Threading;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
|
|
namespace Falcon.Cache.Test
|
|
{
|
|
[TestClass]
|
|
public class RedisCacheTest
|
|
{
|
|
[TestMethod]
|
|
public void CacheStringTest1() {
|
|
//地区配置实例化缓存服务器
|
|
using var cache = RedisCacheFactory.Create();
|
|
//开始测试功能
|
|
Console.WriteLine("开始服务器可用性测试!");
|
|
Assert.IsTrue(cache != null,"没有正确实例化服务器");
|
|
Console.WriteLine("开始一次存取测试");
|
|
cache.SetCache("abc","abc",TimeSpan.FromSeconds(2));
|
|
var v = cache.GetCache("abc");
|
|
Assert.IsTrue(v == "abc","读取数值失败");
|
|
Thread.Sleep(3 * 1000);
|
|
v = cache.GetCache("abc");
|
|
Assert.IsTrue(v == null,"超时后释放数据失败");
|
|
Console.WriteLine("重复读取测试");
|
|
cache.SetCache("abc","abc",TimeSpan.FromMinutes(1));
|
|
v = cache.GetCache("abc");
|
|
Thread.Sleep(5 * 1000);
|
|
v = cache.GetCache("abc");
|
|
Assert.IsTrue(v == "abc","重复读取失败");
|
|
Console.WriteLine("多次读取测试");
|
|
cache.SetCache("abc","abc",TimeSpan.FromHours(1));
|
|
Stopwatch watch = new();
|
|
watch.Start();
|
|
for(int i = 0;i < 1 * 1000;i++) {
|
|
v = cache.GetCache("abc");
|
|
}
|
|
watch.Stop();
|
|
Console.WriteLine(watch.Elapsed.TotalSeconds);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void CacheObjectTest() {
|
|
var obj = TestObj.GetOne();
|
|
using var cache = RedisCacheFactory.Create();
|
|
var key = "abc";
|
|
var span = new TimeSpan(0,1,0);
|
|
cache.SetCache(key,obj,span);
|
|
var go1 = cache.GetCache<TestObj>(key);
|
|
Assert.IsTrue(obj.Equals(go1));
|
|
Thread.Sleep(10);
|
|
var go2 = cache.GetCache<TestObj>(key);
|
|
Assert.IsTrue(obj.Equals(go2));
|
|
}
|
|
|
|
[TestMethod]
|
|
public void CacheObjByObjTest() {
|
|
using var cache = RedisCacheFactory.Create();
|
|
var key1 = new KeyObj { Id = 1,Name = "abc1" };
|
|
var key2 = new KeyObj1 { Id = 2,Name = "abc2" };
|
|
var key3 = new KeyObj2 { Id = 3,Name = "abc3" };
|
|
var obj = TestObj.GetOne();
|
|
var span = new TimeSpan(0,1,0);
|
|
cache.SetCache(key1,obj,span);
|
|
cache.SetCache(key2,obj,span);
|
|
cache.SetCache(key3,obj,span);
|
|
|
|
var r1 = cache.GetCache<KeyObj,TestObj>(key1);
|
|
var r2 = cache.GetCache<KeyObj1,TestObj>(key2);
|
|
var r3 = cache.GetCache<KeyObj2,TestObj>(key3);
|
|
|
|
Assert.IsTrue(obj.Equals(r1));
|
|
Assert.IsTrue(obj.Equals(r2));
|
|
Assert.IsTrue(obj.Equals(r3));
|
|
}
|
|
}
|
|
|
|
public class TestObj
|
|
{
|
|
public int Id { get; set; }
|
|
public string Name { get; set; }
|
|
public IEnumerable<TestObj> StrList { get; set; }
|
|
|
|
public static TestObj GetOne() {
|
|
return new TestObj {
|
|
Id = 1,
|
|
Name = "name1",
|
|
StrList = new List<TestObj> {
|
|
new TestObj{ Id=11,Name="name11" },
|
|
new TestObj{ Id=12,Name="name12" },
|
|
new TestObj{ Id=13,Name="name13" },
|
|
},
|
|
};
|
|
}
|
|
|
|
public override bool Equals(object obj) {
|
|
if(obj is TestObj i) {
|
|
return i.Id == this.Id && i.Name == this.Name &&
|
|
i.StrList?.Count() == this.StrList?.Count();
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public override int GetHashCode() {
|
|
return base.GetHashCode();
|
|
}
|
|
}
|
|
|
|
class KeyObj:IGenerateKey
|
|
{
|
|
public int Id { get; set; }
|
|
public string Name { get; set; }
|
|
|
|
public string GetCacheKey() {
|
|
return $"KeyObj:Id:Name:{Id}:{Name}";
|
|
}
|
|
}
|
|
class KeyObj1
|
|
{
|
|
[Key]
|
|
public int Id { get; set; }
|
|
public string Name { get; set; }
|
|
}
|
|
class KeyObj2
|
|
{
|
|
public int Id { get; set; }
|
|
public string Name { get; set; }
|
|
}
|
|
|
|
}
|