这里,用到的RedisClient类是来自nuget包引用的,这里nuget包是:


  然后,来看下重写的InitCache方法,这里面有一些ip,port(端口),password(密码)参数,这里直接写入在cs文件中没有从配置文件读取,大家可以扩展下;这些参数通过RedisClient构造函数传递给底层Socket访问需要的信息,下面简单展示下RedisClient几个的构造函数:
  1         public RedisClient();
  2         public RedisClient(RedisEndpoint config);
  3         public RedisClient(string host);
  4         public RedisClient(Uri uri);
  5         public RedisClient(string host, int port);
  6         public RedisClient(string host, int port, string password = null, long db = 0);
  至于Get,Set方法终都是使用RedisClient对象访问的,个人觉得需要注意的是Set方法里面的过期时间参数,目前还没有试验这种情况的效果:
  通过这几种方法设置过期时间后,快到过期时间的时候如果此时有使用这个缓存key那么过期时间是否会往后自动增加过期时间有效期,这里暂时没有试验(这里是由于前面项目中的.net core框架中的memecache缓存都有这种设置,想来redis应该也有吧)
  这里,需要重写下public override void Dispose(bool isfalse)方法,因为调用完RedisClient后需要释放,我们通过Dispose统一来手动释放,而不是直接在调用的时候使用using()
  >构造出缓存工厂调用方法
  接下来,咋们需要定义一个缓存工厂,因为上面刚才定义了一个RedisCache和MemcachedCache明显这里会有多个不同缓存的方法调用,所用咋们来定义个工厂模式来调用对应的缓存;这里的工厂模式没有使用直接显示创建newRedisCache(),newMemcachedCache()对象的方法,而是使用了反射的原理,创建对应的缓存对象;
  先来,定义个枚举,枚举里面的声明的名字要和咋们缓存类的名称相同,代码如下:
  1 public enum CacheType
  2     {
  3         RedisCache,
  4
  5         MemcachedCache
  6     }
  再来,定义个工厂来CacheRepository(缓存工厂),并且定义方法Current如下代码:
  1 public static BaseCache Current(CacheType cacheType = CacheType.RedisCache)
  2         {
  3             var nspace = typeof(BaseCache);
  4             var fullName = nspace.FullName;
  5             var nowspace = fullName.Substring(0, fullName.LastIndexOf('.') + 1);
  6
  7             return Assembly.GetExecutingAssembly().CreateInstance(nowspace + cacheType.ToString(), true) as BaseCache;
  8         }
  *:通过传递枚举参数,来确定反射CreateInstance()方法需要用到的typeName参数,从而来定义需要访问的那个缓存对象,这里要注意的是加上了一个命名空间nowspace,因为缓存类可能和工厂类不是同一个命名空间,但是通常会和缓存基类是同命名空间所以在方法开始的时候截取获取了缓存类需要的命名空间(这里看自身项目来定吧);
  *:Assembly.GetExecutingAssembly()这个是用来获取当前应用程序集的路径,这里避免了咋们使用Assembly.Load()方法还需要传递程序集的路径地址了
  好了满上上面要求后,咋们可以在测试页面调用代码如:CacheRepository.Current(CacheType.RedisCache).SetCache<MoFlightSearchResponse>(keyData, value);如此简单,咋们使用redis-cli.exe客户端来看下缓存起来的数据: