Redise篇-记一次Redise的封装(一)

之前,简单介绍了一下基于StackExchange.Redis下ConnectionMultiplexer对象怎样封装,主要用到单例模式,现在从Redis中跳出来,看看缓存。

缓存的机制很简单,从代码角度来将,所有的缓存都是Dictionary结构的,即一个key对应一个value,无论存储方式如何,无论value的结构如何。我们对缓存的操作无非四种,增;删;改;查。那我们能不能针对所有的缓存操作做一个封装呢?

ok,我们为了以后扩展其他的缓存,先预留接口,在项目中除了Redise缓存之外,我们可能还会用到LocalCache以及HttpCache等等的缓存机制。正如上文中所说,缓存几乎全都是Dictionary结构的,即key=>value;,废话不说了,直接贴代码:

 /// <summary>
 /// 实现锁以及其他业务
 /// </summary>
 public interface IBaseChacheStrategy
 {

 }

先定义一个接口,方便扩展,主要扩展缓存锁等基于缓存的其他操作;

public interface IBaseChacheStrategy<TKey, TValue> : IBaseChacheStrategy
    {
        /// <summary>
        /// 获取缓存中最终的键,如Container建议格式: return String.Format("{0}:{1}", "缓存key的前缀", key);
        /// </summary>
        /// <param name="key"></param>
        /// <param name="isFullKey">是否已经是完整的Key,如果不是,则会调用一次GetFinalKey()方法</param>
        /// <returns></returns>
        string GetFinalKey(string key, bool isFullKey = false);

        /// <summary>
        /// 添加指定ID的对象
        /// </summary>
        /// <param name="key">缓存键</param>
        /// <param name="value">缓存值</param>
        void InsertToCache(TKey key, TValue value);

        /// <summary>
        /// 移除指定缓存键的对象
        /// </summary>
        /// <param name="key">缓存键</param>
        /// <param name="isFullKey">是否已经是完整的Key,如果不是,则会调用一次GetFinalKey()方法</param>
        void RemoveFromCache(TKey key, bool isFullKey = false);

        /// <summary>
        /// 返回指定缓存键的对象
        /// </summary>
        /// <param name="key">缓存键</param>
        /// <param name="isFullKey">是否已经是完整的Key,如果不是,则会调用一次GetFinalKey()方法</param>
        /// <returns></returns>
        TValue Get(TKey key, bool isFullKey = false);

        TValue Get<TValue>(TKey key, bool isFullKey = false);

        /// <summary>
        /// 获取所有缓存信息集合
        /// </summary>
        /// <returns></returns>
        IDictionary<TKey, TValue> GetAll();

        /// <summary>
        /// 检查是否存在Key及对象
        /// </summary>
        /// <param name="key">缓存键</param>
        /// <param name="isFullKey">是否已经是完整的Key,如果不是,则会调用一次GetFinalKey()方法</param>
        /// <returns></returns>
        bool CheckExisted(TKey key, bool isFullKey = false);

        /// <summary>
        /// 获取缓存集合总数(注意:每个缓存框架的计数对象不一定一致!)
        /// </summary>
        /// <returns></returns>
        long GetCount();

        /// <summary>
        /// 更新缓存
        /// </summary>
        /// <param name="key">缓存键</param>
        /// <param name="value">缓存值</param>
        /// <param name="isFullKey">是否已经是完整的Key,如果不是,则会调用一次GetFinalKey()方法</param>
        void Update(TKey key, TValue value, bool isFullKey = false);
    }

对接口中的方法做个简单阐述,

string GetFinalKey:为了方便缓存key的管理,我们往往会对缓存key前加前缀,以便标识,如:User_{key},用于标识用户,Msg_{Key},用于标识短信验证码等等;我们对缓存进行操作时,需要一个完整的key,故增加GetFinalKey方法;

void InsertToCache:插入缓存;

void RemoveFromCache:从缓存中移除;

TValue Get,TValue Get<TValue>,定义两个Get方法,是为了反序列化的需要;

IDictionary<TKey, TValue> GetAll(); 获得缓存中所有的值

bool CheckExisted;根据key校验值是否存在

GetCount;获取总条数

void Update;更新缓存;

好了,总体的接口架构大致如此,以后会对针对接口的实现进行一一阐述;希望大家提供宝贵意见;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值