? nopCommerce_4.40.3 功能实现详解—-第15章 内存缓存和分布式缓存的定义实现

上一章为了简化实现,删除了关于内存缓存和分布式缓存的相关定义,缓存定义的实现做为当前工程性软件的一项必备功能,是必须被定义实现的,下面通过缓存定义的实现对第14章的示例程序进行重构,通过缓存数据实现同样的功能。

0046 DistributedCacheType、CacheConfig、DistributedCacheConfig

? nopCommerce_4.40.3 功能实现详解----第15章 内存缓存和分布式缓存的定义实现

DistributedCacheType类,该枚举定义了3种分布式缓存方式,该枚举实例选定其中的一种缓存方式,对当前程序中的数据进行缓存数据的交互操作,为减少程序对数据库指定表的直接访问频率,从而提高程序的性能提供支撑。

CacheConfig类,程序通过该类所设置的常量,来限定指定缓存项(键/值对)在内存或指定软件中的保留时间。

DistributedCacheConfig类,程序通过该类所设置的常量,来限定当前程序与那个分布式缓存软件,进行缓存数据的交互操作。

1、重构Nop.Core.Configuration.AppSettings类,通过本次重构在该类中定义相应的缓存配置实例。

0047 CacheKey、NopEntityCacheDefaults

 

? nopCommerce_4.40.3 功能实现详解----第15章 内存缓存和分布式缓存的定义实现

CacheKey类,该类通过相应的参数实例,对该类进行初始化/实例化操作,在该实例化后,为该实例中的缓存键的字符串的拼接操作提供数据实例的支撑。

NopEntityCacheDefaults类,该类通过一个指定实体的类型实例名称、编号和相应的前缀字符串,拼接出该实体实例所有相关的缓存键字符串。

0048 ILocker、IStaticCacheManager、CacheKeyService

? nopCommerce_4.40.3 功能实现详解----第15章 内存缓存和分布式缓存的定义实现

CacheKeyService类,该类通过相应的参数实例,实例化一个新的缓存键实例(该实例可能是其它缓存键实例的参数实例),为该实例中的缓存键的字符串的拼接操作提供数据实例的支撑。

0049 MemoryCacheManager、DistributedCacheManager、DistributedCacheManager.PerRequestCache

? nopCommerce_4.40.3 功能实现详解----第15章 内存缓存和分布式缓存的定义实现

MemoryCacheManager类,继承于CacheKeyService类、ILocker接口和IStaticCacheManager接口,该类通过微软所提供的内存缓存类及其这些类中的成员,实现内存缓存数据,与当前程序实体实例数据的,缓存交互操作。

    DistributedCacheManager类,继承于CacheKeyService类、ILocker接口和IStaticCacheManager接口,该类通过该类中的定义,实现分布式缓存数据库缓存数据,与当前程序实体实例数据的,缓存交互操作。

      注意:

、在该类锁操作定义的中使用Nito.AsyncEx.Coordination(2020年10月5日)锁中件间取代了nopCommerce_4.30及其以前版本中的RedLock.net锁中件间(2018年11月11日),这两个锁中件间,只从发行的最后版本的最后日期来说,这种取代是有益、合理且必须的。

在该类锁操作定义的中使用using Microsoft.Extensions.Caching.Distributed; 引用取代了nopCommerce_4.30及其以前版本中的Microsoft.AspNetCore.DataProtection.StackExchangeRedis引用,该引用的取代增加了nopCommerce_4.40.4中对分布式缓存支撑的范围。前一种引用不但保留以前通过Redis缓存数据库软件来,实现对当前程序进行数据缓存的功能;增加了 MS SQL Server数据库软件指定数据库的一个相应表,来实现对当前程序进行数据缓存的功能。

    PerRequestCache类:

    1、该类通过浏览器指定页面中HttpContext字典实例中相应的共享数据键/值对,实现与存储分布式数据库中的缓存项(键/值对),缓存数据的交互操作。

    2、该类实质不是对分布式缓存数据库中的缓存项(键/值对)进行添加/移除操作,而对HttpContext字典实例中的共享数据键/值对进行添加/移除操作,即由于浏览器对不同的页面显示,所需要HttpContext字典实例中的共享数据键/值对可能也不同,通过该类中的定义实现对HttpContext字典实例中的共享数据键/值对的添加/移除操作,从而达到提升页面显示速度,减少内存消耗的目的。

3、同理该类也不能对分布式缓存数据库中的相应的缓存项(键/值对)的生命周期无任何影响,它只对HttpContext字典实例中相应的共享数据键/值对的生命周期产生直接的影响。

注意:

在21-06-25_Nop4.4(021_通过设置服务实例持久化默认缓存数据,并利用Redis存储缓存数据)示例程序中的注释与PerRequestCache类所实现的功能具有较大的偏差,如果其它开发人员为了能够更好的理解 PerRequestCache类的功能实现,最好仔细查看当前示例中的注释。

2、重构Nop.Data.EntityRepository类,及其Nop.Data.IRepository接口,通过本次重构在该类中及其接口中定义,实现当前程序与内存缓存管理器/分布式缓存软件的指定数据库中,缓存数据的CURD数据交互操作。

3、重构Nop.Services.Configuration.NopConfigurationDefaults类,通过本次重构在该类设置一个指定的设置实体的缓存键字符串,该缓存键对应设置实体的所有实例。

4、重构Nop.Services.Configuration.SettingService类,及其Nop.Services.Configuration.ISettingService接口,通过本次重构在该类中及其接口中定义,实现当前程序与内存缓存管理器/分布式缓存软件的指定数据库中,设置实体实例缓存数据的CURD数据交互操作。

5、重构Nop.Web.Framework.Infrastructure.DependencyRegistrar.Register方法添加语句:

       //通过.NetCore框架依赖注入容器实例的指定API方法,对内存缓存管理器类/分布式缓存管理器类进行依赖注入操作,为程序与指定缓存对象的CURD操作提供支撑。

            if (appSettings.DistributedCacheConfig.Enabled)

            {

                services.AddScoped();

                services.AddScoped();

            }

            else

            {

                services.AddSingleton();

                services.AddSingleton();

            }

6、按F5执行程序,程序正常运行并提交数据库安装页面后。

? nopCommerce_4.40.3 功能实现详解----第15章 内存缓存和分布式缓存的定义实现

? nopCommerce_4.40.3 功能实现详解----第15章 内存缓存和分布式缓存的定义实现 

 

? nopCommerce_4.40.3 功能实现详解----第15章 内存缓存和分布式缓存的定义实现

        对以上功能更为具体实现和注释见:21-08-16_Nop_4.40.3(013_内存缓存和分布式缓存的定义实现)。

文章知识点与官方知识档案匹配,可进一步学习相关知识云原生入门技能树首页概览8577 人正在系统学习中

来源:zhoujian_911

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年7月22日
下一篇 2021年7月22日

相关推荐