NopCommerce架构分析-Cache的应用

数据缓存的实现原理

  NopCommerce项目中有三种类型的数据缓存,一是内存缓存MemoryCacheManager;一是Redis缓存;还有一个是页面请求级的数据缓存PerRequestCacheManager,是基于HttpContextBase实现的。

  类图如下:

  前面两种大家都 比较熟悉,也有很多相关文档,不再赘述,这里说一下PerRequestCacheManager缓存。

PerRequestCacheManager

  PerRequestCacheManager是基于HttpContextBase页面请求级数据缓存,HttpContextBase 类为抽象类,该类包含的成员与 HttpContext 类相同。 使用 HttpContextBase 类可以创建一些派生类,这些派生类与HttpContext 类相似,但是可以进行自定义并在 ASP.NET 管道外部使用。 在执行单元测试时,通常使用派生类实现具有自定义行为的成员以实现正在测试的方案,这更容易进行单元测试。HttpContextWrapper 类是从 HttpContextBase 类派生的。HttpContextWrapper 类用作 HttpContext 类的包装。 在运行时,通常使用 HttpContextWrapper 类的实例调用 HttpContext 对象上的成员。

  HttpContext的Items集合是IDictionary键/值对的对象集合,在HttpRequest的生存期中共享。存储成本很高的调用的结果,防止该调用在页面上出现多次。一个HttpRequest中的各个单元需要处理相同或类似的数据。如果数据的生存期只是一个请求,就可以考虑使用HttpContext. Items作为短期的高速缓存。

CacheExtensions

  CacheExtensions主要是对Get方法进行了扩展,可以传递一个方法进来,如果在缓存里面找到结果,则直接返回;否则,执行方法,得到结果,然后加入缓存并返回结果。

在应用中,根据数据的性质和作用,分别选择使用PerRequestCacheManager或者MemoryCacheManager(如果配置了Redis,则使用RedisCacheManager)进行数据的缓存。

NopCommerce项目对缓存应用比较全面,在实际的应用中,可以借鉴其实现方式。

原文地址:https://www.cnblogs.com/tingqianzhu/p/8582911.html