zoukankan      html  css  js  c++  java
  • 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项目对缓存应用比较全面,在实际的应用中,可以借鉴其实现方式。

  • 相关阅读:
    pycharm 安装第三方库报错:AttributeError: 'module' object has no attribute 'main'
    工作冥想
    对于测试工作与测试人员未来出路的思考
    测试计划再谈
    python 反转列表的3种方式
    关于最近练习PYTHON代码的一点心得
    python sum()函数的用法
    python count()函数
    SpringCloud和SpringBoot的详细版本说明
    使用 lntelliJ IDEA 创建 Maven 工程的springboot项目
  • 原文地址:https://www.cnblogs.com/tingqianzhu/p/8582911.html
Copyright © 2011-2022 走看看