CacheManager的牵线和平运动用

在我们付出的不在少数分布式项目里面(如基于WCF服务、Web
API服务形式),由于数量提供关乎到数据库的连带操作,借使客户端的产出数量当先一定的数据,那么数据库的请求处理则以产生式拉长,如若数据库服务器无法神速处理那么些出现请求,那么将会增多客户端的乞请时间,严重者恐怕造成数据库服务还是应用服务直接瘫痪。缓存方案正是为这么些而诞生,随着缓存的引进,能够把数据库的IO耗费时间操作,转换为内部存款和储蓄器数据的全速响应操作,只怕把1切页面缓存到缓存系统里面。缓存框架在相继平毕尔巴鄂间都有很多的贯彻,基本上多数是利用分布式缓存Redis、Memcached来促成。本连串文章介绍在.NET平杜阿拉,使用开源缓存框架CacheManager来完毕多少的缓存的全部进程,本篇首要介绍CacheManager的行使和连锁的测试。

在我们开发的重重分布式项目里面(如依照WCF服务、Web
API服务方法),由于数量提供关乎到数据库的有关操作,假若客户端的出现数量超过一定的数目,那么数据库的伸手处理则以发生式增进,如果数据库服务器无法快捷处理那个出现请求,那么将会增添客户端的央求时间,严重者大概引致数据库服务只怕应用服务直接瘫痪。缓存方案便是为这些而诞生,随着缓存的引入,能够把数据库的IO耗费时间操作,转换为内部存储器数据的高速响应操作,可能把全副页面缓存到缓存系统之中。缓存框架在逐1平德雷斯顿间都有成都百货上千的实现,基本上多数是运用分布式缓存Redis、Memcached来促成。本体系小说介绍在.NET平斯科普里,使用开源缓存框架CacheManager来达成多少的缓存的总体经过,本篇首要介绍CacheManager的施用和相关的测试。

在我们开发的许多分布式项目里面(如依照WCF服务、Web
API服务措施),由于数量提供关乎到数据库的有关操作,若是客户端的出现数量超过一定的数码,那么数据库的伸手处理则以产生式增加,倘使数据库服务器不可能飞速处理那一个出现请求,那么将会大增客户端的央求时间,严重者也许导致数据库服务恐怕应用服务直接瘫痪。缓存方案正是为那一个而诞生,随着缓存的引进,能够把数据库的IO耗费时间操作,转换为内部存储器数据的立即响应操作,可能把方方面面页面缓存到缓存系统里头。缓存框架在11平台之中都有好多的兑现,基本上多数是行使分布式缓存Redis、Memcached来落到实处。本种类作品介绍在.NET平台中,使用开源缓存框架CacheManager来实现数量的缓存的全体经过,本篇重要介绍CacheManager的应用和有关的测试。

.NET缓存框架CacheManager在混合式开发框架中的应用(1)-CacheManager的介绍和应用,cachemanager

在我们付出的不少分布式项目里面(如基于WCF服务、Web
API服务方法),由于数量提供关乎到数据库的相干操作,借使客户端的出现数量超越一定的数目,那么数据库的伏乞处理则以发生式拉长,借使数据库服务器不可能快捷处理那个出现请求,那么将会增多客户端的伸手时间,严重者恐怕引致数据库服务照旧应用服务直接瘫痪。缓存方案正是为那个而诞生,随着缓存的引进,可以把数据库的IO耗费时间操作,转换为内部存款和储蓄器数据的立刻响应操作,只怕把全副页面缓存到缓存系统里面。缓存框架在逐一平夏洛特间都有诸多的落到实处,基本上多数是接纳分布式缓存Redis、Memcached来贯彻。本体系小说介绍在.NET平博洛尼亚,使用开源缓存框架CacheManager来完成数量的缓存的凡事过程,本篇首要介绍CacheManager的利用和血脉相通的测试。

1、CacheManager的介绍

CacheManager是3个以C#言语开发的开源.Net缓存框架抽象层。它不是切实的缓存完成,但它支持各样缓存提供者(如Redis、Memcached等)并提供不可胜言高级个性。
CacheManager
首要的目标使开发者更易于处理各个复杂的缓存场景,使用CacheManager能够兑现多层的缓存,让进度内缓存在分布式缓存以前,且仅需几行代码来处理。
CacheManager的牵线和平运动用。CacheManager
不仅仅是1个接口去联合分化缓存提供者的编制程序模型,它使大家在二个类型里面改变缓存策略变得格外不难,同时也提供更加多的风味:如缓存同步、并发更新、种类号、事件处理、品质总括等等,开发职员能够在必要的时候接纳那么些特征。

CacheManager的GitHub源码地址为:,假设供给实际的德姆o及表明,能够访问其官网:。

使用Nuget为项目添加CacheManager包引用。CacheManager包括了成百上千的Package.
在那之中CacheManager.Core是必须的,别的的针对性分裂缓存平台上有差别的照应Package,整个Nuget手袋含下边多少个部分的内容。

澳门葡京备用网址 1

CacheManager缓存框架协助Winform和Web等使用开发,以及扶助各个风行的缓存完毕,如MemoryCache、Redis、Memcached、Couchbase、System.Web.Caching等。

纵观整个缓存框架,它的特定很鲜明,在援助八种缓存实现外,自身重如果以内部存款和储蓄器缓存(进度内)为主,别的分布式缓存为辅的多层缓存架构格局,以完结快速命竹秋处理的体制,它们中间有相关的新闻处理,使得固然是分布式缓存,也可以马上兑现产出同步的缓存处理。

在网上充斥着基于某种单独缓存的完结和平运动用的矛头下,那种更抽象壹层,以及提供更加高级个性的缓存框架,在提供了统一编制程序模型的基本功上,也促成了十分有力的包容性,使得本身一接触到这一个框架,就对它喜欢。

在GitHub上,缓存框架的前几名,除了这一个缓存框架外,也还有局地,不过从文书档案的丰裕程度等各方面来看,这些缓存框架还是不行值得全体的。

CacheManager缓存框架在计划方面,援助代码方式的配置、XML配置,以及JSON格式的配备处理,格外有利于。

CacheManager缓存框架私下认可对缓存数据的种类化是采取二进制情势,同时也支撑两种自定义连串化的点子,如基于JOSN.NET的JSON连串化也许自定义系列化方式。

CacheManager缓存框架可以对缓存记录的增多、删除、更新等相关事件进展记录。

CacheManager缓存框架的缓存数据是强类型的,可以支撑各类健康项指标拍卖,如Int、String、List类型等各类基础项目,以及可连串号的各样对象及列表对象。

CacheManager缓存框架支持多层的缓存完成,内部优质的体制得以高速、及时的一道好各层缓存的数码。

CacheManager缓存框架援救对各样操作的日记记录。

CacheManager缓存框架在分布式缓存实现中支持对峙异的锁定和事务处理,让缓存保持更加好的联手处理,内部机制实现版本争论处理。

CacheManager缓存框架扶助两种缓存过期的拍卖,如相对时间的超时处理,以及定位时段的超时处理,是大家处理缓存过期越发便于。

….

有的是风味基本上覆盖了缓存的例行天性,而且提供的接口基本上也是我们所常常用的Add、Put、Update、Remove等接口,使用起来也卓绝便利。

 

1、CacheManager的介绍

CacheManager是二个以C#言语开发的开源.Net缓存框架抽象层。它不是切实的缓存落成,但它扶助种种缓存提供者(如Redis、Memcached等)并提供成千成万尖端性子。
CacheManager
重要的目标使开发者更易于处理各个复杂的缓存场景,使用CacheManager能够兑现多层的缓存,让进程内缓存在分布式缓存在此以前,且仅需几行代码来处理。
CacheManager
不仅仅是七个接口去联合不一样缓存提供者的编制程序模型,它使大家在叁个体系里面改变缓存策略变得卓殊不难,同时也提供更加多的表征:如缓存同步、并发更新、种类号、事件处理、品质总括等等,开发职员能够在须要的时候采取那些特征。

CacheManager的GitHub源码地址为:,如若必要切实的Demo及表达,能够访问其官网:。

动用Nuget为项目添加CacheManager包引用。CacheManager包罗了很多的Package.
在那之中CacheManager.Core是必须的,别的的针对不相同缓存平台上有分歧的应和Package,整个Nuget双肩包含上边多少个部分的剧情。

澳门葡京备用网址 2

CacheManager缓存框架援救Winform和Web等应用开发,以及协理各个风靡的缓存达成,如MemoryCache、Redis、Memcached、Couchbase、System.Web.Caching等。

纵观整个缓存框架,它的特定很肯定,在支撑三种缓存实现外,自己首借使以内部存款和储蓄器缓存(进度内)为主,其余分布式缓存为辅的多层缓存架构形式,以完毕神速命四之日拍卖的编写制定,它们中间有连带的音信处理,使得就算是分布式缓存,也能够立时兑现产出同步的缓存处理。

在网上充斥着基于某种单独缓存的贯彻和利用的倾向下,那种更抽象一层,以及提供更加高级本性的缓存框架,在提供了统一编程模型的基本功上,也兑现了老大有力的包容性,使得本身一接触到那些框架,就对它喜欢。

在GitHub上,缓存框架的前几名,除了这么些缓存框架外,也还有1部分,不过从文书档案的充足程度等各方面来看,这几个缓存框架依然要命值得全数的。

CacheManager缓存框架在安顿方面,援救代码方式的配置、XML配置,以及JSON格式的配置处理,万分有利于。

CacheManager缓存框架默许对缓存数据的体系化是利用二进制格局,同时也协助多种自定义体系化的艺术,如基于JOSN.NET的JSON系列化大概自定义连串化格局。

CacheManager缓存框架能够对缓存记录的加码、删除、更新等连锁事件展开记录。

CacheManager缓存框架的缓存数据是强类型的,能够支撑各个正规项指标处理,如Int、String、List类型等各类基础项目,以及可类别号的各个对象及列表对象。

CacheManager缓存框架扶助多层的缓存完成,内部能够的建制得以飞快、及时的联手好各层缓存的数量。

CacheManager缓存框架援助对各类操作的日记记录。

CacheManager缓存框架在分布式缓存达成中协理对革新的锁定和事务处理,让缓存保持越来越好的一路处理,内部机制落成版本冲突处理。

CacheManager缓存框架帮助二种缓存过期的处理,如相对时间的超时处理,以及稳定时段的过期处理,是我们处理缓存过期特别有益。

….

洋洋特色基本上覆盖了缓存的常规性情,而且提供的接口基本上也是我们所平时用的Add、Put、Update、Remove等接口,使用起来也卓殊有益。

 

1、CacheManager的介绍

CacheManager是四个以C#言语开发的开源.Net缓存框架抽象层。它不是有血有肉的缓存达成,但它援助各类缓存提供者(如Redis、Memcached等)并提供许多高等脾气。CacheManager
主要的指标使开发者更便于处理各个繁复的缓存场景,使用CacheManager能够实现多层的缓存,让进度内缓存在分布式缓存以前,且仅需几行代码来拍卖。CacheManager
不仅仅是一个接口去联合分裂缓存提供者的编制程序模型,它使大家在二个品类里面改变缓存策略变得非凡简单,同时也提供越来越多的性状:如缓存同步、并发更新、类别号、事件处理、质量总计等等,开发职员能够在急需的时候选用这个特征。
CacheManager的GitHub源码地址为:https://github.com/MichaCo/CacheManager,假若须求实际的德姆o及表达,能够访问其官网:http://cachemanager.net/澳门葡京备用网址 ,。
使用Nuget为项目添加CacheManager包引用。CacheManager包涵了许多的Package.
当中CacheManager.Core是必须的,其它的针对性不相同缓存平台上有分歧的对应Package,整个Nuget手袋含下边几个部分的始末。

澳门葡京备用网址 3

CacheManager缓存框架帮衬Winform和Web等接纳开发,以及支持多样流行的缓存达成,如MemoryCache、Redis、Memcached、Couchbase、System.Web.Caching等。
纵观整个缓存框架,它的一定很显著,在支持多样缓存达成外,自己首就算以内部存储器缓存(进度内)为主,其余分布式缓存为辅的多层缓存架构格局,以达到飞速命竹秋拍卖的体制,它们中间有相关的消息处理,使得固然是分布式缓存,也能够登时达成产出同步的缓存处理。
在网上充斥着基于某种单独缓存的兑现和行使的势头下,那种更抽象一层,以及提供更加尖端特性的缓存框架,在提供了合并编程模型的根底上,也实现了极度有力的兼容性,使得我壹接触到那一个框架,就对它喜欢。
在GitHub上,缓存框架的前几名,除了这一个缓存框架外,也还有部分,可是从文书档案的丰裕程度等各地方来看,那一个缓存框架照旧11分值得拥有的。
CacheManager缓存框架在安插方面,协助代码格局的布局、XML配置,以及JSON格式的安顿处理,分外便宜。
CacheManager缓存框架暗许对缓存数据的种类化是应用2进制情势,同时也支撑七种自定义体系化的方法,如基于JOSN.NET的JSON类别化或许自定义种类化方式。
CacheManager缓存框架能够对缓存记录的加码、删除、更新等连锁事件展开记录。
CacheManager缓存框架的缓存数据是强类型的,能够帮助各样健康项指标拍卖,如Int、String、List类型等各样基础项目,以及可体系号的各类对象及列表对象。
CacheManager缓存框架协助多层的缓存达成,内部优质的编写制定能够连忙、及时的一路好各层缓存的数量。
CacheManager缓存框架扶助对各类操作的日志记录。
CacheManager缓存框架在分布式缓存完结中支持对立异的锁定和事务处理,让缓存保持更加好的共同处理,内部机制实现版本争辩处理。
CacheManager缓存框架帮助二种缓存过期的拍卖,如相对时间的逾期处理,以及定位时段的逾期处理,是大家处理缓存过期尤其方便人民群众。
….
洋洋特性基本上覆盖了缓存的常规性情,而且提供的接口基本上也是大家所平时用的Add、Put、Update、Remove等接口,使用起来也丰硕有利。

1、CacheManager的介绍

CacheManager是3个以C#言语开发的开源.Net缓存框架抽象层。它不是实际的缓存完结,但它协助四种缓存提供者(如Redis、Memcached等)并提供见惯司空高级本性。
CacheManager
首要的指标使开发者更易于处理各个复杂的缓存场景,使用CacheManager能够兑现多层的缓存,让过程内缓存在分布式缓存以前,且仅需几行代码来处理。
CacheManager
不仅仅是二个接口去联合不一致缓存提供者的编制程序模型,它使大家在三个类型里面改变缓存策略变得非常不难,同时也提供越多的特色:如缓存同步、并发更新、连串号、事件处理、质量总计等等,开发人士可以在急需的时候选取那些特点。

CacheManager的GitHub源码地址为:

行使Nuget为品种添加CacheManager包引用。CacheManager蕴涵了很多的Package.
当中CacheManager.Core是必须的,其它的指向不一致缓存平台上有不相同的对应Package,整个Nuget双肩包含下边多少个部分的始末。

澳门葡京备用网址 4

CacheManager缓存框架帮助Winform和Web等接纳开发,以及辅助二种盛行的缓存达成,如MemoryCache、Redis、Memcached、Couchbase、System.Web.Caching等。

综观整个缓存框架,它的一定很肯定,在支撑三种缓存完毕外,自己首如若以内部存款和储蓄器缓存(进度内)为主,别的分布式缓存为辅的多层缓存架构格局,以高达赶快命花潮拍卖的体制,它们中间有有关的新闻处理,使得即便是分布式缓存,也能够即时兑现产出同步的缓存处理。

在网上充斥着基于某种单独缓存的兑现和应用的样子下,那种更抽象壹层,以及提供越来越尖端性子的缓存框架,在提供了统一编制程序模型的基础上,也实现了足够有力的包容性,使得我1接触到这么些框架,就对它喜欢。

在GitHub上,缓存框架的前几名,除了这么些缓存框架外,也还有一些,但是从文书档案的增加程度等内地点来看,这些缓存框架依然不行值得拥有的。

CacheManager缓存框架在配置方面,协理代码格局的配备、XML配置,以及JSON格式的配备处理,分外有益。

CacheManager缓存框架默许对缓存数据的体系化是运用贰进制格局,同时也支撑多样自定义类别化的办法,如依据JOSN.NET的JSON系列化只怕自定义系列化方式。

CacheManager缓存框架可以对缓存记录的增多、删除、更新等有关事件进展记录。

CacheManager缓存框架的缓存数据是强类型的,能够支撑各个正规项指标拍卖,如Int、String、List类型等各个基础项目,以及可系列号的各个对象及列表对象。

CacheManager缓存框架帮助多层的缓存完毕,内部优质的体制能够高速、及时的1块好各层缓存的数码。

CacheManager缓存框架支持对种种操作的日志记录。

CacheManager缓存框架在分布式缓存完成中补助对创新的锁定和事务处理,让缓存保持越来越好的一路处理,内部机制落实版本争辩处理。

CacheManager缓存框架协助三种缓存过期的拍卖,如相对时间的晚点处理,以及定位时段的超时处理,是大家处理缓存过期越发有利于。

….

成都百货上千特色基本上覆盖了缓存的寻常化本性,而且提供的接口基本上也是我们所常常用的Add、Put、Update、Remove等接口,使用起来也要命方便。

 

二、CacheManager缓存框架的应用

经过地点对CacheManager缓存框架的简短询问,大家大约通晓了它利用的壹些功力,然而事实上我们什么行使它,我们须要做1些学学和询问,首先大家要求在整整应用框架之中,知道缓存框架所扮演的剧中人物。

诚如的话,对于单机版本的使用场景,基本上是无需引进那种缓存框架的,因为客户端的并发量很少,而且数量请求也是孤零零可数的,品质方便不会有其余难点。

假若对于分布式的应用系统,如本身在诸多小说中牵线到作者的《混合式开发框架》、《Web开发框架》,由于数量请求是并发量随着用户增加而提升的,越发对于一些网络的行使系统,极端景况下有些时刻点一下只怕就会高达了全套应用出现的峰值。那么那种分布式的种类架构,引进数据缓存来下滑IO的并发数,把耗费时间乞请改换为内部存储器的长足请求,能够大幅程度的下挫系统宕机的危机。

我们以基于常规的Web API层来创设利用框架为例,整个数据缓存层,应该是在Web
API层之下、业务达成层以上的1个层,如下所示。

澳门葡京备用网址 5

在这些数据缓存层里面,我们引进了CacheManager缓存框架,实现分布式的缓存处理,使得大家的缓存数据能够在Redis服务器上实现数量的拍卖,同时能够在系统重启的时候,不至于丢失数据,能够高效上升缓存数据。

为了贯彻对这一个CacheManager缓存框架的应用,我们需求先举办七个利用测试,以便领会它的顺序方便景况,然后才能广泛应用在大家的数量中间层上。

咱俩树立3个档次,并在引用的地点打开管理NuGet程序包,然后搜索到CacheManager的相干模块应用,并进入到花色引用里面,此为第三步工作。

澳门葡京备用网址 6

澳门葡京备用网址 7

大家创造一个客户对象类,用来效仿数据的存款和储蓄和显示的,如下代码所示。

/// <summary>
/// 模拟数据存储的客户对象类
/// </summary>
public class Customer
{
    private static Customer m_Customer = null;
    private static ICacheManager<object> manager = null;

    //初始化列表值
    private static List<string> list = new List<string>() { "123", "456", "789" };

    /// <summary>
    /// 客户对象的单件实例
    /// </summary>
    public static Customer Instance
    {
        get
        {
            if(m_Customer == null)
            {
                m_Customer = new Customer();
            }
            if (manager == null)
            {
                manager = CacheFactory.Build("getStartedCache", settings =>
                {
                    settings.WithSystemRuntimeCacheHandle("handleName");
                }); 
            }

            return m_Customer;
        }
    }

以此类先做了一个单例的落到实处,并初步化缓存Customer类对象,以及缓存管理类ICacheManager<object>
manager,那一个是大家后面用来操作缓存数据的显要引用对象。

笔者们编辑多少个函数,用来落到实处对数码的获得,数据扩展、数据删除的相关操作,并在数量扩大、删除的时候,触发缓存的翻新,那样大家下次获取数据的时候,便是流行的数据了。

/// <summary>
/// 获取所有客户信息
/// </summary>
/// <returns></returns>
public List<string> GetAll()
{
    var value = manager.Get("GetAll") as List<string>;
    if(value == null)
    {
        value = list;//初始化并加入缓存
        manager.Add("GetAll", value);

        Debug.WriteLine("初始化并加入列表");
    }
    else
    {
        Debug.WriteLine("访问缓存获取:{0}", DateTime.Now);
    }
    return value;
}

/// <summary>
/// 插入新的记录
/// </summary>
/// <param name="customer"></param>
/// <returns></returns>
public bool Insert(string customer)
{
    //先获取全部记录,然后加入记录
    if (!list.Contains(customer))
    {
        list.Add(customer);
    }

    //重新设置缓存
    manager.Update("GetAll", v => list);
    return true;
}

/// <summary>
/// 删除指定记录
/// </summary>
/// <param name="customer"></param>
/// <returns></returns>
public bool Delete(string customer)
{
    if(list.Contains(customer))
    {
        list.Remove(customer);
    }
    manager.Update("GetAll", v=>list);
    return true;
}

大家编辑2个Winform程序来对那几个缓存测试,以福利明白个中的编写制定。

澳门葡京备用网址 8

大家在测试读取的时候,也正是对GetAll进行拍卖,插入以及去除首要正是为了测试缓存更新的拍卖。代码如下所示。

private void btnTestSimple_Click(object sender, EventArgs e)
{
    var list = Customer.Instance.GetAll();
    Debug.WriteLine("客户端获取记录数:{0}", list != null ? list.Count : 0);
}

private void btnInsert_Click(object sender, EventArgs e)
{
    var name = "abc";
    Customer.Instance.Insert(name);
    Debug.WriteLine(string.Format("插入记录:{0}", name));
}

private void btnDelete_Click(object sender, EventArgs e)
{
    var name = "abc";
    Customer.Instance.Delete(name);
    Debug.WriteLine(string.Format("删除记录:{0}", name));
}

我们跟踪记录,能够看看上面包车型大巴日记音信。

澳门葡京备用网址 9

咱俩得以看出,个中第三次是缓存未有的动静下进展开头化,开始化的笔录数据为一个,然后插入记录后,再次获取数据的时候,缓存更新后的数据就改为陆个了。

作者们眼下介绍了插入记录的后台代码,它同时拓展了缓存数据的更新了。

/// <summary>
/// 插入新的记录
/// </summary>
/// <param name="customer"></param>
/// <returns></returns>
public bool Insert(string customer)
{
    //先获取全部记录,然后加入记录
    if (!list.Contains(customer))
    {
        list.Add(customer);
    }

    //重新设置缓存
    manager.Update("GetAll", v => list);
    return true;
}

咱俩前边介绍的缓存初叶化配置的时候,暗许是应用内部存款和储蓄器缓存的,并不曾运用分布式缓存的布署,它的开首化代码如下:

manager = CacheFactory.Build("getStartedCache", settings =>
{
    settings.WithSystemRuntimeCacheHandle("handleName");
}); 

大家在正规景况下,依然需求动用这一个强大的分布式缓存的,例如大家得以采纳Redis的缓存处理,关于Redis的安装和平运动用,请参见小编的小说《基于C#的MongoDB数据库开发应用(四)–Redis的装置及采用》。

引进分布式的Redis缓存达成,大家的布局代码只供给做肯定的改动即可,如下所示。

manager = CacheFactory.Build("getStartedCache", settings =>
{
    settings.WithSystemRuntimeCacheHandle("handleName")

    .And
    .WithRedisConfiguration("redis", config =>
    {
        config.WithAllowAdmin()
            .WithDatabase(0)
            .WithEndpoint("localhost", 6379);
    })
    .WithMaxRetries(100)
    .WithRetryTimeout(50)
    .WithRedisBackplane("redis")
    .WithRedisCacheHandle("redis", true)
    ;
}); 

别的的采纳未有别的变更,大家还要扩大部分测试数据便宜我们查阅对应的缓存数据。

/// <summary>
/// 测试加入几个不同的数据
/// </summary>
/// <returns></returns>
public void TestCache()
{
    manager.Put("string", "abcdefg");
    manager.Put("int", 2016);
    manager.Put("decimal", 2016.9M);
    manager.Put("date", DateTime.Now);
    manager.Put("object", new UserInfo { ID = "123", Name = "Test", Age = 35 });
}

private void btnTestSimple_Click(object sender, EventArgs e)
{
    var list = Customer.Instance.GetAll();
    Debug.WriteLine("客户端获取记录数:{0}", list != null ? list.Count : 0);

    //测试加入一些值
    Customer.Instance.TestCache();
}

咱俩之中测试,壹切和原来未有何差距,程序的笔录新闻不奇怪。

只是大家布置利用了Redis的缓存处理,因而得以利用“Redis Desktop
Manager”软件来查阅相应的缓存数据的,打开软件大家得以看来相应的缓存记录如下所示。

澳门葡京备用网址 10

从上海图书馆我们能够查阅到,大家添加的富有缓存键值都足以透过这些Redis的客户来实行查看,因为大家缓存里面有基于Redis缓存的落到实处,同理假若大家配备别的的缓存落成,如MemCache等,那么也能够在对应的保管界面上查看到。

作者们做到这么些处理后,能够发现缓存数据是足以兑现多层缓存的,最为迅猛的正是内部存款和储蓄器缓存(也是它的主缓存),它会自行同步好各样分布式缓存的数目版本争执难点。

引进如Redis的分布式缓存有1个好处,就是我们的数量足以在先后重新开动的时候,假如未有在内部存储器缓存里面找到(未有击中目的),那么会招来分布式缓存并开始展览加载,从而尽管程序重启,大家事先的缓存数据依旧保存完好。

 

以上便是本人依据对缓存框架的总体领悟和其剧中人物扮演做的连锁介绍,以及介绍CacheManager的使用和部分情形的证实,通过地点简单案例的钻研,大家能够慢慢引进到更具实际价值的Web
API
框架层面上海展览中心开利用,以期把缓存框架发挥其确实有力的价值,同时也为大家各个不相同的缓存须要展开越来越高层次的探索,希望大家继续援救。

 

2、CacheManager缓存框架的利用

透过上边对CacheManager缓存框架的简便询问,我们大体通晓了它使用的一些成效,可是其实我们如何利用它,大家须要做一些上学和明白,首先大家供给在总体应用框架之中,知道缓存框架所饰演的角色。

诚如的话,对于单机版本的使用场景,基本上是无需引进那种缓存框架的,因为客户端的并发量很少,而且数量请求也是寥寥可数的,质量方便不会有任何难题。

假若对于分布式的利用系统,如小编在无数小说中牵线到作者的《混合式开发框架》、《Web开发框架》,由于数量请求是并发量随着用户增加而增进的,越发对于部分互连网的采用种类,极端情状下有些时间点一下大概就会实现了任何应用出现的峰值。那么那种分布式的系统框架结构,引进数据缓存来下滑IO的并发数,把耗费时间呼吁改换为内部存款和储蓄器的高速请求,能够小幅度程度的下滑系统宕机的高风险。

小编们以基于常规的Web API层来营造利用框架为例,整个数据缓存层,应该是在Web
API层之下、业务实现层以上的三个层,如下所示。

澳门葡京备用网址 11

在那个数目缓存层里面,大家引进了CacheManager缓存框架,完毕分布式的缓存处理,使得大家的缓存数据可以在Redis服务器上落到实处数据的拍卖,同时能够在系统重启的时候,不至于丢失数据,可以连忙还原缓存数据。

为了完毕对那几个CacheManager缓存框架的利用,大家须求先举行一个接纳测试,以便领悟它的相继方便景况,然后才能广泛应用在大家的多少中间层上。

大家建立2个体系,并在引用的地点打开管理NuGet程序包,然后搜索到CacheManager的连锁模块应用,并投入到项目引用里面,此为第壹步工作。

澳门葡京备用网址 12

澳门葡京备用网址 13

咱俩创造多个客户对象类,用来效仿数据的积存和出示的,如下代码所示。

/// <summary>
/// 模拟数据存储的客户对象类
/// </summary>
public class Customer
{
    private static Customer m_Customer = null;
    private static ICacheManager<object> manager = null;

    //初始化列表值
    private static List<string> list = new List<string>() { "123", "456", "789" };

    /// <summary>
    /// 客户对象的单件实例
    /// </summary>
    public static Customer Instance
    {
        get
        {
            if(m_Customer == null)
            {
                m_Customer = new Customer();
            }
            if (manager == null)
            {
                manager = CacheFactory.Build("getStartedCache", settings =>
                {
                    settings.WithSystemRuntimeCacheHandle("handleName");
                }); 
            }

            return m_Customer;
        }
    }

那一个类先做了二个单例的完毕,并初始化缓存Customer类对象,以及缓存管理类ICacheManager<object>
manager,那几个是大家前边用来操作缓存数据的根本引用对象。

咱俩编辑多少个函数,用来贯彻对数码的获取,数据扩展、数据删除的连带操作,并在数据扩张、删除的时候,触发缓存的换代,那样大家下次获取数据的时候,就是前卫的多少了。

/// <summary>
/// 获取所有客户信息
/// </summary>
/// <returns></returns>
public List<string> GetAll()
{
    var value = manager.Get("GetAll") as List<string>;
    if(value == null)
    {
        value = list;//初始化并加入缓存
        manager.Add("GetAll", value);

        Debug.WriteLine("初始化并加入列表");
    }
    else
    {
        Debug.WriteLine("访问缓存获取:{0}", DateTime.Now);
    }
    return value;
}

/// <summary>
/// 插入新的记录
/// </summary>
/// <param name="customer"></param>
/// <returns></returns>
public bool Insert(string customer)
{
    //先获取全部记录,然后加入记录
    if (!list.Contains(customer))
    {
        list.Add(customer);
    }

    //重新设置缓存
    manager.Update("GetAll", v => list);
    return true;
}

/// <summary>
/// 删除指定记录
/// </summary>
/// <param name="customer"></param>
/// <returns></returns>
public bool Delete(string customer)
{
    if(list.Contains(customer))
    {
        list.Remove(customer);
    }
    manager.Update("GetAll", v=>list);
    return true;
}

咱俩编辑一个Winform程序来对这些缓存测试,以有益领会当中的体制。

澳门葡京备用网址 14

咱俩在测试读取的时候,也便是对GetAll举行拍卖,插入以及去除重要就是为了测试缓存更新的拍卖。代码如下所示。

private void btnTestSimple_Click(object sender, EventArgs e)
{
    var list = Customer.Instance.GetAll();
    Debug.WriteLine("客户端获取记录数:{0}", list != null ? list.Count : 0);
}

private void btnInsert_Click(object sender, EventArgs e)
{
    var name = "abc";
    Customer.Instance.Insert(name);
    Debug.WriteLine(string.Format("插入记录:{0}", name));
}

private void btnDelete_Click(object sender, EventArgs e)
{
    var name = "abc";
    Customer.Instance.Delete(name);
    Debug.WriteLine(string.Format("删除记录:{0}", name));
}

我们跟踪记录,能够看到上边包车型大巴日记新闻。

澳门葡京备用网址 15

大家得以观察,其中第二回是缓存未有的情景下开始展览早先化,开端化的记录数据为二个,然后插入记录后,再一次获取数据的时候,缓存更新后的数额就成为5个了。

咱俩前边介绍了插入记录的后台代码,它同时开始展览了缓存数据的翻新了。

/// <summary>
/// 插入新的记录
/// </summary>
/// <param name="customer"></param>
/// <returns></returns>
public bool Insert(string customer)
{
    //先获取全部记录,然后加入记录
    if (!list.Contains(customer))
    {
        list.Add(customer);
    }

    //重新设置缓存
    manager.Update("GetAll", v => list);
    return true;
}

咱们日前介绍的缓存早先化配置的时候,暗许是行使内部存款和储蓄器缓存的,并从未动用分布式缓存的安排,它的起先化代码如下:

manager = CacheFactory.Build("getStartedCache", settings =>
{
    settings.WithSystemRuntimeCacheHandle("handleName");
}); 

小编们在寻常处境下,依然须求采用这些强大的分布式缓存的,例如大家能够运用Redis的缓存处理,关于Redis的装置和动用,请参见小编的随笔《基于C#的MongoDB数据库开发应用(肆)–Redis的安装及运用》。

引进分布式的Redis缓存实现,大家的配置代码只须求做肯定的改观即可,如下所示。

manager = CacheFactory.Build("getStartedCache", settings =>
{
    settings.WithSystemRuntimeCacheHandle("handleName")

    .And
    .WithRedisConfiguration("redis", config =>
    {
        config.WithAllowAdmin()
            .WithDatabase(0)
            .WithEndpoint("localhost", 6379);
    })
    .WithMaxRetries(100)
    .WithRetryTimeout(50)
    .WithRedisBackplane("redis")
    .WithRedisCacheHandle("redis", true)
    ;
}); 

别的的应用未有别的变动,我们同时增添部分测试数据便宜大家查阅对应的缓存数据。

/// <summary>
/// 测试加入几个不同的数据
/// </summary>
/// <returns></returns>
public void TestCache()
{
    manager.Put("string", "abcdefg");
    manager.Put("int", 2016);
    manager.Put("decimal", 2016.9M);
    manager.Put("date", DateTime.Now);
    manager.Put("object", new UserInfo { ID = "123", Name = "Test", Age = 35 });
}

private void btnTestSimple_Click(object sender, EventArgs e)
{
    var list = Customer.Instance.GetAll();
    Debug.WriteLine("客户端获取记录数:{0}", list != null ? list.Count : 0);

    //测试加入一些值
    Customer.Instance.TestCache();
}

我们中间测试,1切和原来未有怎么差别,程序的笔录音信平常。

而是大家布署利用了Redis的缓存处理,由此得以采纳“Redis Desktop
Manager”软件来查阅相应的缓存数据的,打开软件大家得以看出相应的缓存记录如下所示。

澳门葡京备用网址 16

从上海教室我们能够查阅到,大家添加的持有缓存键值都得以因而这么些Redis的客户来拓展查看,因为咱们缓存里面有基于Redis缓存的兑现,同理假诺大家配备别的的缓存完成,如MemCache等,那么也足以在对应的治本界面上查看到。

大家成功这么些处理后,能够窥见缓存数据是足以完结多层缓存的,最为飞快的便是内部存款和储蓄器缓存(也是它的主缓存),它会活动同步好各种分布式缓存的数量版本争执难点。

引进如Redis的分布式缓存有四个好处,便是大家的数据能够在程序重新开动的时候,假设未有在内部存款和储蓄器缓存里面找到(未有击中目的),那么会寻找分布式缓存并开始展览加载,从而尽管程序重启,大家在此之前的缓存数据依然保存完整。

 

以上正是自个儿依据对缓存框架的全部明白和其剧中人物扮演做的连锁介绍,以及介绍CacheManager的利用和部分景观的印证,通过地方不难案例的钻研,大家可以稳步引进到更具实际价值的Web
API
框架层面上开始展览利用,以期把缓存框架发挥其确实有力的价值,同时也为我们各个差异的缓存必要展开更加高层次的研讨,希望我们持续帮忙。

 

2、CacheManager缓存框架的施用

通过上边对CacheManager缓存框架的简练驾驭,大家大概理解了它使用的有的效能,但是实际上我们怎么利用它,大家需求做1些上学和询问,首先大家必要在全方位应用框架之中,知道缓存框架所扮演的剧中人物。
1般的话,对于单机版本的选用场景,基本上是无需引入那种缓存框架的,因为客户端的并发量很少,而且数量请求也是寥寥可数的,质量方便不会有此外难题。
只要对于分布式的运用系列,如本身在不少随笔中介绍到本人的《混合式开发框架》、《Web开发框架》,由于数量请求是并发量随着用户增进而提升的,尤其对于一些网络的利用系统,极端情状下某些时间点一下只怕就会高达了总体应用出现的峰值。那么这种分布式的系统架构,引进数据缓存来下滑IO的并发数,把耗费时间恳请改换为内部存款和储蓄器的便捷请求,能够大幅度程度的回落系统宕机的高危害。
我们以基于常规的Web API层来塑造利用框架为例,整个数据缓存层,应该是在Web
API层之下、业务实现层以上的三个层,如下所示。

澳门葡京备用网址 17

在这些数据缓存层里面,大家引进了CacheManager缓存框架,达成分布式的缓存处理,使得大家的缓存数据能够在Redis服务器上贯彻多少的拍卖,同时能够在系统重启的时候,不至于丢失数据,能够高效上升缓存数据。
为了达成对这一个CacheManager缓存框架的运用,我们须求先实行三个接纳测试,以便理解它的各类方便情状,然后才能广泛应用在大家的数额中间层上。
咱俩建立一个门类,并在引用的地方打开管理NuGet程序包,然后搜索到CacheManager的连锁模块应用,并进入到项目引用里面,此为第3步工作。

澳门葡京备用网址 18

澳门葡京备用网址 19

笔者们成立一个客户对象类,用来模拟数据的贮存和出示的,如下代码所示。

/// <summary>
/// 模拟数据存储的客户对象类
/// </summary>
public class Customer
{
    private static Customer m_Customer = null;
    private static ICacheManager<object> manager = null;

    //初始化列表值
    private static List<string> list = new List<string>() { "123", "456", "789" };

    /// <summary>
    /// 客户对象的单件实例
    /// </summary>
    public static Customer Instance
    {
        get
        {
            if(m_Customer == null)
            {
                m_Customer = new Customer();
            }
            if (manager == null)
            {
                manager = CacheFactory.Build("getStartedCache", settings =>
                {
                    settings.WithSystemRuntimeCacheHandle("handleName");
                }); 
            }

            return m_Customer;
        }
    }

本条类先做了叁个单例的落到实处,并开始化缓存Customer类对象,以及缓存管理类ICacheManager<object>
manager,这一个是咱们后边用来操作缓存数据的要紧引用对象。

作者们编辑多少个函数,用来贯彻对数据的拿走,数据扩张、数据删除的连带操作,并在多少扩充、删除的时候,触发缓存的翻新,那样大家下次获取数据的时候,正是新型的数码了。

/// <summary>
/// 获取所有客户信息
/// </summary>
/// <returns></returns>
public List<string> GetAll()
{
    var value = manager.Get("GetAll") as List<string>;
    if(value == null)
    {
        value = list;//初始化并加入缓存
        manager.Add("GetAll", value);

        Debug.WriteLine("初始化并加入列表");
    }
    else
    {
        Debug.WriteLine("访问缓存获取:{0}", DateTime.Now);
    }
    return value;
}

/// <summary>
/// 插入新的记录
/// </summary>
/// <param name="customer"></param>
/// <returns></returns>
public bool Insert(string customer)
{
    //先获取全部记录,然后加入记录
    if (!list.Contains(customer))
    {
        list.Add(customer);
    }

    //重新设置缓存
    manager.Update("GetAll", v => list);
    return true;
}

/// <summary>
/// 删除指定记录
/// </summary>
/// <param name="customer"></param>
/// <returns></returns>
public bool Delete(string customer)
{
    if(list.Contains(customer))
    {
        list.Remove(customer);
    }
    manager.Update("GetAll", v=>list);
    return true;
}

大家编辑一个Winform程序来对那个缓存测试,以有利于理解个中的机制。

澳门葡京备用网址 20

作者们在测试读取的时候,也正是对GetAll举办处理,插入以及去除首要正是为着测试缓存更新的处理。代码如下所示。

private void btnTestSimple_Click(object sender, EventArgs e)
{
    var list = Customer.Instance.GetAll();
    Debug.WriteLine("客户端获取记录数:{0}", list != null ? list.Count : 0);
}

private void btnInsert_Click(object sender, EventArgs e)
{
    var name = "abc";
    Customer.Instance.Insert(name);
    Debug.WriteLine(string.Format("插入记录:{0}", name));
}

private void btnDelete_Click(object sender, EventArgs e)
{
    var name = "abc";
    Customer.Instance.Delete(name);
    Debug.WriteLine(string.Format("删除记录:{0}", name));
}

大家跟踪记录,能够看到下边包车型客车日记消息。

澳门葡京备用网址 21

咱们得以观察,其中第一遍是缓存未有的情景下开始展览开端化,开始化的记录数据为一个,然后插入记录后,再次获取数据的时候,缓存更新后的数额就成为多少个了。
咱俩前边介绍了插入记录的后台代码,它同时开始展览了缓存数据的翻新了。

/// <summary>
/// 插入新的记录
/// </summary>
/// <param name="customer"></param>
/// <returns></returns>
public bool Insert(string customer)
{
    //先获取全部记录,然后加入记录
    if (!list.Contains(customer))
    {
        list.Add(customer);
    }

    //重新设置缓存
    manager.Update("GetAll", v => list);
    return true;
}

我们日前介绍的缓存开始化配置的时候,暗中认可是行使内存缓存的,并未利用分布式缓存的配备,它的开端化代码如下:

manager = CacheFactory.Build("getStartedCache", settings =>
{
    settings.WithSystemRuntimeCacheHandle("handleName");
}); 

作者们在健康意况下,依旧供给运用那么些强大的分布式缓存的,例如大家能够使用Redis的缓存处理,关于Redis的设置和应用,请参考作者的小说《基于C#的MongoDB数据库开发使用(肆)–Redis的安装及运用》。
引进分布式的Redis缓存达成,大家的安插代码只须求做肯定的变更即可,如下所示。

manager = CacheFactory.Build("getStartedCache", settings =>
{
    settings.WithSystemRuntimeCacheHandle("handleName")

    .And
    .WithRedisConfiguration("redis", config =>
    {
        config.WithAllowAdmin()
            .WithDatabase(0)
            .WithEndpoint("localhost", 6379);
    })
    .WithMaxRetries(100)
    .WithRetryTimeout(50)
    .WithRedisBackplane("redis")
    .WithRedisCacheHandle("redis", true)
    ;
}); 

别的的施用未有其余变动,大家还要扩大一些测试数据便宜大家查阅对应的缓存数据。

/// <summary>
/// 测试加入几个不同的数据
/// </summary>
/// <returns></returns>
public void TestCache()
{
    manager.Put("string", "abcdefg");
    manager.Put("int", 2016);
    manager.Put("decimal", 2016.9M);
    manager.Put("date", DateTime.Now);
    manager.Put("object", new UserInfo { ID = "123", Name = "Test", Age = 35 });
}

private void btnTestSimple_Click(object sender, EventArgs e)
{
    var list = Customer.Instance.GetAll();
    Debug.WriteLine("客户端获取记录数:{0}", list != null ? list.Count : 0);

    //测试加入一些值
    Customer.Instance.TestCache();
}

我们中间测试,壹切和原先未有怎么差距,程序的记录消息符合规律。
唯独我们配备使用了Redis的缓存处理,由此得以选取“Redis Desktop
Manager”软件来查占卜应的缓存数据的,打开软件大家能够见到相应的缓存记录如下所示。

澳门葡京备用网址 22

从上海教室我们得以查阅到,大家抬高的装有缓存键值都足以由此这一个Redis的客户来拓展查看,因为我们缓存里面有基于Redis缓存的达成,同理固然大家布置别的的缓存完毕,如MemCache等,那么也足以在相应的田管界面上查看到。
咱俩成功那一个处理后,能够发现缓存数据是能够完成多层缓存的,最为飞速的就是内部存款和储蓄器缓存(也是它的主缓存),它会活动同步好各类分布式缓存的多寡版本争辨难题。
引进如Redis的分布式缓存有七个好处,正是大家的多少能够在先后重新启航的时候,如果未有在内部存款和储蓄器缓存里面找到(未有击中指标),那么会招来分布式缓存并拓展加载,从而固然程序重启,大家事先的缓存数据依然保存完好。

以上便是自己根据对缓存框架的完好精通和其剧中人物扮演做的连带介绍,以及介绍CacheManager的运用和一些风貌的求证,通过上边简单案例的钻研,大家得以稳步引进到更具实际价值的Web
API
框架层面上开始展览应用,以期把缓存框架发挥其真正有力的股票总值,同时也为我们种种区别的缓存须要展开更加高层次的切磋,希望大家继续援救。

贰、CacheManager缓存框架的选拔

因此地点对CacheManager缓存框架的简便询问,大家大约了然了它选拔的1部分功用,可是实际大家什么利用它,我们要求做1些读书和领悟,首先大家须求在全路应用框架之中,知道缓存框架所扮演的角色。

貌似的话,对于单机版本的运用场景,基本上是无需引进这种缓存框架的,因为客户端的并发量很少,而且数量请求也是寥寥可数的,品质方便不会有其余难题。

倘诺对于分布式的接纳种类,如自个儿在重重小说中介绍到笔者的《混合式开发框架》、《Web开发框架》,由于数量请求是并发量随着用户拉长而滋长的,尤其对于有个别网络的施用系统,极端意况下有些时刻点一下大概就会落得了总体应用出现的峰值。那么那种分布式的连串架构,引进数据缓存来降低IO的并发数,把耗费时间央求改换为内存的快捷请求,能够大幅程度的暴跌系统宕机的风险。

笔者们以基于常规的Web API层来塑造利用框架为例,整个数据缓存层,应该是在Web
API层之下、业务实现层以上的3个层,如下所示。

澳门葡京备用网址 23

在那些数目缓存层里面,我们引进了CacheManager缓存框架,实现分布式的缓存处理,使得大家的缓存数据可以在Redis服务器上贯彻多少的拍卖,同时能够在系统重启的时候,不至于丢失数据,可以极快回复缓存数据。

为了促成对这么些CacheManager缓存框架的选取,大家供给先实行多少个使用测试,以便驾驭它的次第方便情形,然后才能广泛应用在我们的数码中间层上。

大家树立二个品种,并在引用的地点打开管理NuGet程序包,然后搜索到CacheManager的连带模块应用,并参加到花色引用里面,此为第一步工作。

澳门葡京备用网址 24

澳门葡京备用网址 25

大家创制1个客户对象类,用来模拟数据的蕴藏和出示的,如下代码所示。

/// <summary>
/// 模拟数据存储的客户对象类
/// </summary>
public class Customer
{
    private static Customer m_Customer = null;
    private static ICacheManager<object> manager = null;

    //初始化列表值
    private static List<string> list = new List<string>() { "123", "456", "789" };

    /// <summary>
    /// 客户对象的单件实例
    /// </summary>
    public static Customer Instance
    {
        get
        {
            if(m_Customer == null)
            {
                m_Customer = new Customer();
            }
            if (manager == null)
            {
                manager = CacheFactory.Build("getStartedCache", settings =>
                {
                    settings.WithSystemRuntimeCacheHandle("handleName");
                }); 
            }

            return m_Customer;
        }
    }

其一类先做了1个单例的贯彻,并伊始化缓存Customer类对象,以及缓存管理类ICacheManager<object>
manager,这些是大家前边用来操作缓存数据的重大引用对象。

我们编辑多少个函数,用来兑现对数据的得到,数据扩大、数据删除的有关操作,并在多少扩张、删除的时候,触发缓存的更新,那样大家下次获取数据的时候,就是新型的数目了。

/// <summary>
/// 获取所有客户信息
/// </summary>
/// <returns></returns>
public List<string> GetAll()
{
    var value = manager.Get("GetAll") as List<string>;
    if(value == null)
    {
        value = list;//初始化并加入缓存
        manager.Add("GetAll", value);

        Debug.WriteLine("初始化并加入列表");
    }
    else
    {
        Debug.WriteLine("访问缓存获取:{0}", DateTime.Now);
    }
    return value;
}

/// <summary>
/// 插入新的记录
/// </summary>
/// <param name="customer"></param>
/// <returns></returns>
public bool Insert(string customer)
{
    //先获取全部记录,然后加入记录
    if (!list.Contains(customer))
    {
        list.Add(customer);
    }

    //重新设置缓存
    manager.Update("GetAll", v => list);
    return true;
}

/// <summary>
/// 删除指定记录
/// </summary>
/// <param name="customer"></param>
/// <returns></returns>
public bool Delete(string customer)
{
    if(list.Contains(customer))
    {
        list.Remove(customer);
    }
    manager.Update("GetAll", v=>list);
    return true;
}

大家编辑二个Winform程序来对这一个缓存测试,以便于通晓在那之中的建制。

澳门葡京备用网址 26

大家在测试读取的时候,也正是对GetAll进行处理,插入以及去除主要就是为着测试缓存更新的处理。代码如下所示。

private void btnTestSimple_Click(object sender, EventArgs e)
{
    var list = Customer.Instance.GetAll();
    Debug.WriteLine("客户端获取记录数:{0}", list != null ? list.Count : 0);
}

private void btnInsert_Click(object sender, EventArgs e)
{
    var name = "abc";
    Customer.Instance.Insert(name);
    Debug.WriteLine(string.Format("插入记录:{0}", name));
}

private void btnDelete_Click(object sender, EventArgs e)
{
    var name = "abc";
    Customer.Instance.Delete(name);
    Debug.WriteLine(string.Format("删除记录:{0}", name));
}

我们跟踪记录,能够观望上面包车型地铁日志消息。

澳门葡京备用网址 27

笔者们能够看来,个中第3遍是缓存未有的情况下展开初叶化,开头化的记录数据为一个,然后插入记录后,再度获取数据的时候,缓存更新后的数量就变成四个了。

我们前面介绍了插入记录的后台代码,它同时展开了缓存数据的换代了。

/// <summary>
/// 插入新的记录
/// </summary>
/// <param name="customer"></param>
/// <returns></returns>
public bool Insert(string customer)
{
    //先获取全部记录,然后加入记录
    if (!list.Contains(customer))
    {
        list.Add(customer);
    }

    //重新设置缓存
    manager.Update("GetAll", v => list);
    return true;
}

小编们日前介绍的缓存初始化配置的时候,私下认可是接纳内部存储器缓存的,并从未采取分布式缓存的安顿,它的发轫化代码如下:

manager = CacheFactory.Build("getStartedCache", settings =>
{
    settings.WithSystemRuntimeCacheHandle("handleName");
}); 

大家在正常意况下,依旧须要选择那么些强大的分布式缓存的,例如大家能够利用Redis的缓存处理,关于Redis的装置和选取,请参见笔者的小说《基于C#的MongoDB数据库开发应用(4)–Redis的安装及运用》。

引进分布式的Redis缓存完成,我们的配置代码只供给做肯定的改动即可,如下所示。

manager = CacheFactory.Build("getStartedCache", settings =>
{
    settings.WithSystemRuntimeCacheHandle("handleName")

    .And
    .WithRedisConfiguration("redis", config =>
    {
        config.WithAllowAdmin()
            .WithDatabase(0)
            .WithEndpoint("localhost", 6379);
    })
    .WithMaxRetries(100)
    .WithRetryTimeout(50)
    .WithRedisBackplane("redis")
    .WithRedisCacheHandle("redis", true)
    ;
}); 

任何的选拔没有其余变动,大家还要增添部分测试数据便宜大家查阅对应的缓存数据。

/// <summary>
/// 测试加入几个不同的数据
/// </summary>
/// <returns></returns>
public void TestCache()
{
    manager.Put("string", "abcdefg");
    manager.Put("int", 2016);
    manager.Put("decimal", 2016.9M);
    manager.Put("date", DateTime.Now);
    manager.Put("object", new UserInfo { ID = "123", Name = "Test", Age = 35 });
}

private void btnTestSimple_Click(object sender, EventArgs e)
{
    var list = Customer.Instance.GetAll();
    Debug.WriteLine("客户端获取记录数:{0}", list != null ? list.Count : 0);

    //测试加入一些值
    Customer.Instance.TestCache();
}

咱俩之中测试,1切和原来未有怎么差异,程序的笔录新闻经常。

可是大家配备利用了Redis的缓存处理,因而得以利用“Redis Desktop
Manager”软件来查阅相应的缓存数据的,打开软件咱们得以观望相应的缓存记录如下所示。

澳门葡京备用网址 28

从上海体育地方我们能够查阅到,大家抬高的全体缓存键值都能够因此那么些Redis的客户来进展查看,因为大家缓存里面有基于Redis缓存的兑现,同理就算我们安插其余的缓存达成,如MemCache等,那么也可以在相应的治本界面上查看到。

咱俩完结那些处理后,能够发现缓存数据是足以兑现多层缓存的,最为迅猛的正是内部存储器缓存(也是它的主缓存),它会自行同步好各样分布式缓存的数据版本冲突难题。

引进如Redis的分布式缓存有2个利益,正是我们的多寡足以在先后重新起动的时候,要是未有在内部存款和储蓄器缓存里面找到(未有击中目的),那么会招来分布式缓存并拓展加载,从而即便程序重启,大家事先的缓存数据还是保存完好。

 

如上就是作者依据对缓存框架的完好驾驭和其角色扮演做的连锁介绍,以及介绍CacheManager的应用和部分境况的验证,通过上边简单案例的钻研,我们得以稳步引进到更具实际价值的Web
API
框架层面上海展览中心开应用,以期把缓存框架发挥其真正有力的股票总市值,同时也为大家种种分裂的缓存须求展开更加高层次的探索,希望我们持续帮忙。

 

在大家开发的好多分布式项目里面(如遵照WCF服务…

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website