如何将.NET缓存模块设计实践转化为高效且可扩展的长尾缓存策略?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1352个文字,预计阅读时间需要6分钟。
上一篇文章讲述了我对缓存的看法,框架上的理解和看法,本文将承接上文,讲述我自己的缓存模块设计实践。
基本的缓存模块设计
最基本的缓存模块设计一定包含一个统一的CacheHelper类,如下所示:
javapublic class CacheHelper { // ...}
上一篇谈了我对缓存的概念,框架上的理解和看法,这篇承接上篇讲讲我自己的缓存模块设计实践。
基本的缓存模块设计
最基础的缓存模块一定有一个统一的CacheHelper,如下:
public interface ICacheHelper { T Get<T>(string key); void Set<T>(string key, T value); void Remove(string key); }
然后业务层是这样调用的
public User Get(int id) { if (id <= 0) throw new ArgumentNullException("id"); var key = string.Format(USER_CACHE_KEY, id); var user = _cacheHelper.Get<User>(key); if (user != null) return user; return _repository.Get(id); }
上面的代码没什么错误,但是实际运用的时候就产生疑问了,因为我一直强调缓存要保存"热数据",那样"热数据"一定会有过期的时候,我们不可能另外写一个去Set。所以干脆就结合到一起写是比较合适的。
本文共计1352个文字,预计阅读时间需要6分钟。
上一篇文章讲述了我对缓存的看法,框架上的理解和看法,本文将承接上文,讲述我自己的缓存模块设计实践。
基本的缓存模块设计
最基本的缓存模块设计一定包含一个统一的CacheHelper类,如下所示:
javapublic class CacheHelper { // ...}
上一篇谈了我对缓存的概念,框架上的理解和看法,这篇承接上篇讲讲我自己的缓存模块设计实践。
基本的缓存模块设计
最基础的缓存模块一定有一个统一的CacheHelper,如下:
public interface ICacheHelper { T Get<T>(string key); void Set<T>(string key, T value); void Remove(string key); }
然后业务层是这样调用的
public User Get(int id) { if (id <= 0) throw new ArgumentNullException("id"); var key = string.Format(USER_CACHE_KEY, id); var user = _cacheHelper.Get<User>(key); if (user != null) return user; return _repository.Get(id); }
上面的代码没什么错误,但是实际运用的时候就产生疑问了,因为我一直强调缓存要保存"热数据",那样"热数据"一定会有过期的时候,我们不可能另外写一个去Set。所以干脆就结合到一起写是比较合适的。

