澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

澳门新浦京娱乐场网站:NET缓存框架CacheManager,

澳门新浦京娱乐场网站:NET缓存框架CacheManager,CacheManager的介绍和使用。在我们开采的众多布满式项目里面(如依据WCF服务、Web API服务方法),由于数量提供关乎到数据库的连锁操作,假设客户端的产出数量超过一定的数码,那么数据库的央求管理则以发生式拉长,若是数据库服务器不大概急迅管理那么些现身请求,那么将会增添客户端的呼吁时间,严重者大概引致数据库服务可能应用服务间接瘫痪。缓存方案正是为这几个而诞生,随着缓存的引进,可以把数据库的IO耗费时间操作,调换为内部存款和储蓄器数据的快速响应操作,恐怕把一切页面缓存到缓存系统内部。缓存框架在一1平台之中都有那三个的落到实处,基本上诸多是行使分布式缓存Redis、Memcached来达成。本类别作品介绍在.NET平高雄,使用开源缓存框架CacheManager来达成多少的缓存的壹切进程,本篇首要介绍CacheManager的采纳和血脉相通的测试。

.NET缓存框架CacheManager在混合式开拓框架中的应用(1)-CacheManager的牵线和选取,cachemanager

在大家开采的大多布满式项目里面(如依据WCF服务、Web API服务措施),由于数量提供关乎到数据库的连带操作,若是客户端的产出数量超过一定的数目,那么数据库的请求管理则以产生式增加,假如数据库服务器不能连忙处理这几个出现请求,那么将会大增客户端的恳求时间,严重者只怕产生数据库服务大概应用服务直接瘫痪。缓存方案就是为那一个而诞生,随着缓存的引进,能够把数据库的IO耗费时间操作,调换为内部存款和储蓄器数据的神速响应操作,也许把全体页面缓存到缓存系统里头。缓存框架在逐一平台之中都有多数的兑现,基本上诸多是运用布满式缓存Redis、Memcached来促成。本连串作品介绍在.NET平新北,使用开源缓存框架CacheManager来落成数据的缓存的漫天进程,本篇重要介绍CacheManager的运用和有关的测试。

在大家付出的多数布满式项目里面(如基于WCF服务、Web API服务方法),由于数量提供关乎到数据库的连带操作,假使客户端的产出数量当先一定的数额,那么数据库的伸手管理则以产生式增进,若是数据库服务器无法神速管理这几个出现请求,那么将会增添客户端的乞求时间,严重者只怕形成数据库服务还是应用服务直接瘫痪。缓存方案正是为那么些而诞生,随着缓存的引进,能够把数据库的IO耗费时间操作,转换为内部存款和储蓄器数据的高效响应操作,大概把全数页面缓存到缓存系统里面。缓存框架在每种平台南间都有众多的落到实处,基本上诸多是行使遍布式缓存Redis、Memcached来促成。本连串小说介绍在.NET平新北,使用开源缓存框架CacheManager来达成多少的缓存的成套进程,本篇主要介绍CacheManager的利用和血脉相通的测试。

1、CacheManager的介绍

CacheManager是3个以C#语言开辟的开源.Net缓存框架抽象层。它不是现实性的缓存完成,但它帮忙多样缓存提供者(如Redis、Memcached等)并提供点不清尖端天性。
CacheManager 主要的指标使开辟者更便于管理各个复杂的缓存场景,使用CacheManager能够兑现多层的缓存,让进度内缓存在分布式缓存以前,且仅需几行代码来拍卖。
CacheManager 不止是二个接口去联合分化缓存提供者的编制程序模型,它使大家在3个项目里面改换缓存战术变得特别轻松,同不平日间也提供越多的特点:如缓存同步、并发更新、连串号、事件管理、质量计算等等,开荒职员能够在须要的时候选择那些特征。

CacheManager的GitHub源码地址为:,要是供给切实的Demo及表达,能够访问其官方网址:。

利用Nuget为品种增添CacheManager包引用。CacheManager包蕴了许多的Package. 当中CacheManager.Core是必须的,其余的针对不相同缓存平台上有不一样的应和Package,整个Nuget手提包含下边多少个部分的剧情。

澳门新浦京娱乐场网站 1

CacheManager缓存框架协理Winform和Web等选择开拓,以及援救两种风靡的缓存达成,如MemoryCache、Redis、Memcached、Couchbase、System.Web.Caching等。

纵观整个缓存框架,它的特定很生硬,在支撑八种缓存实现外,本人首假如以内部存款和储蓄器缓存(进度内)为主,其余布满式缓存为辅的多层缓存架构格局,以已毕急速命中和管理的编写制定,它们中间有连带的音讯管理,使得纵然是布满式缓存,也能够立时兑现产出同步的缓存管理。

在英特网充斥着基于某种单独缓存的贯彻和接纳的势头下,这种更抽象一层,以及提供更高档本性的缓存框架,在提供了统一编制程序模型的根底上,也兑现了极其有力的包容性,使得本人1接触到那些框架,就对它喜欢。

在GitHub上,缓存框架的前几名,除了那个缓存框架外,也还会有部分,但是从文书档案的增进程度等各方面来看,那个缓存框架照旧不行值得全数的。

CacheManager缓存框架在安排方面,协理代码格局的配置、XML配置,以及JSON格式的配备管理,特别方便。

CacheManager缓存框架暗中认可对缓存数据的体系化是使用2进制格局,同期也支撑种种自定义体系化的法子,如基于JOSN.NET的JSON体系化大概自定义种类化方式。

CacheManager缓存框架可以对缓存记录的加码、删除、更新等连锁事件伸开记录。

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

CacheManager缓存框架支持多层的缓存完结,内部能够的建制得以长足、及时的联合签字好各层缓存的多寡。

CacheManager缓存框架帮忙对各个操作的日志记录。

CacheManager缓存框架在布满式缓存完结中扶助对革新的锁定和事务管理,让缓存保持更加好的1只管理,内部机制落到实处版本争持管理。

CacheManager缓存框架帮忙二种缓存过期的管理,如相对时间的过期管理,以及稳按时段的逾期管理,是咱们处理缓存过期尤其有利。

....

大多特色基本上覆盖了缓存的不荒谬化性情,而且提供的接口基本上也是咱们所日常用的Add、Put、Update、Remove等接口,使用起来也十一分有利于。

 

1、CacheManager的介绍

CacheManager是1个以C#语言开采的开源.Net缓存框架抽象层。它不是现实性的缓存实现,但它援救二种缓存提供者(如Redis、Memcached等)并提供多数高端性子。
CacheManager 主要的目标使开采者更便于处理各类繁复的缓存场景,使用CacheManager能够达成多层的缓存,让进程内缓存在布满式缓存在此之前,且仅需几行代码来拍卖。
CacheManager 不仅是贰个接口去联合差别缓存提供者的编制程序模型,它使大家在贰个类型里面改变缓存计策变得极其轻易,同时也提供越来越多的特点:如缓存同步、并发更新、种类号、事件管理、品质总括等等,开垦人士能够在需求的时候选择那一个特色。

CacheManager的GitHub源码地址为:

行使Nuget为品种增加CacheManager包引用。CacheManager包涵了广大的Package. 个中CacheManager.Core是必须的,别的的指向不一样缓存平台上有分化的呼应Package,整个Nuget公文包含下边几个部分的剧情。

澳门新浦京娱乐场网站 2

CacheManager缓存框架帮助Winform和Web等利用开荒,以及扶助七种盛行的缓存达成,如MemoryCache、Redis、Memcached、Couchbase、System.Web.Caching等。

综观整个缓存框架,它的一定很明朗,在支持三种缓存完结外,本人主假使以内部存储器缓存(进度内)为主,别的布满式缓存为辅的多层缓存架构格局,以完成急迅命春季拍卖的建制,它们之中有有关的新闻管理,使得纵然是遍布式缓存,也能够立时兑现产出同步的缓存管理。

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

在GitHub上,缓存框架的前几名,除了那几个缓存框架外,也还大概有一点,可是从文书档案的丰硕程度等各方面来看,这一个缓存框架照旧十一分值得全数的。

CacheManager缓存框架在铺排方面,援救代码格局的布局、XML配置,以及JSON格式的布置管理,非常有益。

CacheManager缓存框架默许对缓存数据的类别化是行使2进制形式,同偶然候也帮衬两种自定义类别化的主意,如基于JOSN.NET的JSON连串化恐怕自定义连串化方式。

澳门新浦京娱乐场网站:NET缓存框架CacheManager,CacheManager的介绍和使用。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源码地址为:,如若急需实际的德姆o及表达,能够访问其官方网址:。

选拔Nuget为项目增多CacheManager包引用。CacheManager包涵了非常多的Package. 当中CacheManager.Core是必须的,其它的对准差别缓存平台上有不相同的呼应Package,整个Nuget双肩包含上面多少个部分的剧情。

澳门新浦京娱乐场网站 3

CacheManager缓存框架支持Winform和Web等选取开垦,以及协助三种流行的缓存完毕,如MemoryCache、Redis、Memcached、Couchbase、System.Web.Caching等。

综观整个缓存框架,它的一定很鲜明,在帮忙各种缓存实现外,本人首要是以内部存款和储蓄器缓存(进度内)为主,别的布满式缓存为辅的多层缓存架构方式,以达成快捷命5月管理的机制,它们之中有连锁的新闻管理,使得纵然是布满式缓存,也能够马上兑现产出同步的缓存管理。

在网络充斥着基于某种单独缓存的达成和使用的自由化下,这种更抽象1层,以及提供更加尖端天性的缓存框架,在提供了统一编制程序模型的底蕴上,也促成了十三分有力的包容性,使得自个儿壹接触到那个框架,就对它喜欢。

在GitHub上,缓存框架的前几名,除了那一个缓存框架外,也还可能有一点点,但是从文书档案的丰盛程度等各地点来看,那一个缓存框架照旧10分值得具备的。

CacheManager缓存框架在铺排方面,扶助代码格局的布局、XML配置,以及JSON格式的布局管理,特别有益。

CacheManager缓存框架私下认可对缓存数据的连串化是行使贰进制方式,同一时间也支持多种自定义体系化的不二秘诀,如基于JOSN.NET的JSON体系化可能自定义连串化格局。

CacheManager缓存框架能够对缓存记录的充实、删除、更新等相关事件进行记录。

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

CacheManager缓存框架辅助多层的缓存完成,内部能够的机制得以高速、及时的协同好各层缓存的数码。

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

CacheManager缓存框架在遍及式缓存落成中协助周旋异的锁定和事务管理,让缓存保持越来越好的一块管理,内部机制达成版本争论管理。

CacheManager缓存框架援助三种缓存过期的处理,如相对时间的晚点管理,以及稳固期段的晚点管理,是大家管理缓存过期尤其有益于。

....

数不尽特点基本上覆盖了缓存的正规本性,而且提供的接口基本上也是大家所常常用的Add、Put、Update、Remove等接口,使用起来也要命方便。

 

2、CacheManager缓存框架的应用

经过地点对CacheManager缓存框架的简易明白,大家大概精晓了它选拔的1对功效,可是事实上大家怎么使用它,大家需求做一些读书和询问,首先大家需求在全方位应用框架之中,知道缓存框架所扮演的剧中人物。

一般的话,对于单机版本的采用场景,基本上是无需引入这种缓存框架的,因为客户端的并发量没有多少,而且数量请求也是孤独可数的,质量方便不会有别的难点。

设若对于分布式的应用类别,如本身在无数小说中介绍到自个儿的《混合式开辟框架》、《Web开拓框架》,由于数量请求是并发量随着用户拉长而抓牢的,特别对于一些网络的运用系统,极端意况下有个别时间点一下或者就能够高达了整个应用出现的峰值。那么这种布满式的系统架构,引进数据缓存来下滑IO的并发数,把耗费时间恳请改变为内部存款和储蓄器的非常的慢请求,能够大幅程度的低沉系统宕机的高危机。

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

澳门新浦京娱乐场网站 4

在这几个数据缓存层里面,大家引进了CacheManager缓存框架,完结布满式的缓存管理,使得我们的缓存数据能够在Redis服务器上落到实处数据的拍卖,同期能够在系统重启的时候,不至于丢失数据,可以高效恢复生机缓存数据。

为了促成对那几个CacheManager缓存框架的应用,大家必要先进行2个行使测试,以便明白它的顺序方便意况,然后技巧广泛应用在大家的数目中间层上。

咱俩建构二个等级次序,并在引用的地方展开管理NuGet程序包,然后找寻到CacheManager的连带模块应用,并参加到项目引用里面,此为第2步工作。

澳门新浦京娱乐场网站 5

澳门新浦京娱乐场网站 6

我们创立叁个客户对象类,用来模拟数据的蕴藏和出示的,如下代码所示。

/// <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;
        }
    }

本条类先做了3个单例的落到实处,并开首化缓存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程序来对那个缓存测试,以便于明白在那之中的体制。

澳门新浦京娱乐场网站 7

咱俩在测试读取的时候,也正是对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));
}

大家追踪记录,能够阅览下边包车型大巴日记音信。

澳门新浦京娱乐场网站 8

大家得以看看,其中第叁回是缓存未有的状态下开始展览发轫化,起始化的记录数据为3个,然后插入记录后,再度获取数据的时候,缓存更新后的数目就成为6个了。

咱俩前边介绍了插入记录的后台代码,它同期举办了缓存数据的翻新了。

/// <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”软件来查阅相应的缓存数据的,张开软件大家可以观六柱预测应的缓存记录如下所示。

澳门新浦京娱乐场网站 9

从上图大家能够查阅到,大家抬高的兼具缓存键值都足以因而这么些Redis的客户来拓展查看,因为我们缓存里面有基于Redis缓存的兑现,同理假设大家安排别的的缓存实现,如MemCache等,那么也足以在相应的管制分界面上查看到。

咱俩成功那一个管理后,能够发现缓存数据是可以落成多层缓存的,最为神速的就是内部存款和储蓄器缓存(也是它的主缓存),它会活动同步好各样分布式缓存的多少版本争持难题。

引进如Redis的遍及式缓存有3个益处,就是大家的数额足以在先后重新启航的时候,假设未有在内部存储器缓存里面找到(没有击中指标),那么会招来布满式缓存并拓展加载,从而尽管程序重启,我们事先的缓存数据还是保存完整。

 

以上正是作者依据对缓存框架的1体化精通和其剧中人物扮演做的有关介绍,以及介绍CacheManager的应用和一部分场景的证实,通过上边不难案例的钻探,我们能够稳步引进到更具实际价值的Web API 框架层面上进展应用,以期把缓存框架发挥其确实有力的市场总值,同期也为咱们各样不一致的缓存供给开始展览更加高档案的次序的追究,希望我们持续支持。

 

二、CacheManager缓存框架的选择

因而地方对CacheManager缓存框架的回顾询问,大家大约理解了它采用的部分效益,不过实际大家什么选用它,我们必要做一些学习和询问,首先大家要求在全路应用框架之中,知道缓存框架所扮演的剧中人物。

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

纵然对于分布式的采取体系,如本人在繁多随笔中介绍到我的《混合式开拓框架》、《Web开荒框架》,由于数量请求是并发量随着用户拉长而滋长的,特别对于有个别互连网的使用系统,极端意况下有个别时刻点一下只怕就可以达成了全部应用出现的峰值。那么这种遍布式的系统架构,引进数据缓存来下滑IO的并发数,把耗时央浼改变为内部存款和储蓄器的急迅请求,能够大幅程度的降低系统宕机的高危机。

咱俩以基于常规的Web API层来构建利用框架为例,整个数据缓存层,应该是在Web API层之下、业务完毕层以上的贰个层,如下所示。

澳门新浦京娱乐场网站 10

在那么些数额缓存层里面,大家引进了CacheManager缓存框架,完毕布满式的缓存管理,使得大家的缓存数据能够在Redis服务器上贯彻多少的拍卖,同不时候能够在系统重启的时候,不至于丢失数据,能够极快回复缓存数据。

为了落到实处对那一个CacheManager缓存框架的选拔,大家要求先举行三个采取测试,以便了然它的逐一方便情形,然后手艺布满应用在我们的数据中间层上。

我们树立二个品类,并在引用的地方展开管理NuGet程序包,然后寻找到CacheManager的有关模块应用,并到场到花色引用里面,此为第2步职业。

澳门新浦京娱乐场网站 11

澳门新浦京娱乐场网站 12

大家创立2个客户对象类,用来模拟数据的仓库储存和展现的,如下代码所示。

/// <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;
}

咱俩编辑2个Winform程序来对那些缓存测试,以造福通晓个中的建制。

澳门新浦京娱乐场网站 13

大家在测试读取的时候,也便是对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));
}

大家追踪记录,能够看来下边包车型大巴日志音讯。

澳门新浦京娱乐场网站 14

大家得以看出,在这之中第三次是缓存未有的景况下展开初始化,发轫化的笔录数据为2个,然后插入记录后,再一次获取数据的时候,缓存更新后的多寡就产生五个了。

我们日前介绍了插入记录的后台代码,它同不经常间开展了缓存数据的立异了。

/// <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”软件来查占卜应的缓存数据的,张开软件大家能够看来相应的缓存记录如下所示。

澳门新浦京娱乐场网站 15

从上海教室我们得以查阅到,我们抬高的具有缓存键值都得以经过那些Redis的客户来开始展览查看,因为大家缓存里面有基于Redis缓存的贯彻,同理假若我们布置别的的缓存实现,如MemCache等,那么也得以在相应的保管分界面上查看到。

我们完毕那些管理后,能够开掘缓存数据是能够实现多层缓存的,最为便捷的正是内存缓存(也是它的主缓存),它会自动同步好各类布满式缓存的数码版本冲突难点。

引进如Redis的布满式缓存有三个功利,就是我们的数目足以在先后重新起动的时候,假诺未有在内部存款和储蓄器缓存里面找到(没有击中指标),那么会招来布满式缓存并开始展览加载,从而固然程序重启,大家事先的缓存数据还是保存完整。

 

如上正是自家依照对缓存框架的总体掌握和其剧中人物扮演做的相干介绍,以及介绍CacheManager的采取和局部情景的印证,通过地点轻便案例的探讨,大家可以逐步引进到更具实际价值的Web API 框架层面上拓展应用,以期把缓存框架发挥其确实有力的市场总值,同期也为大家种种不一致的缓存供给进行更加高档次的研商,希望大家持续协助。

 

在大家开辟的许多遍及式项目里面(如依据WCF服务...

2、CacheManager缓存框架的使用

通过下边前境遇CacheManager缓存框架的简便询问,大家大概领悟了它使用的一部分效用,不过实际上大家怎样利用它,我们须求做一些上学和通晓,首先大家需求在整个应用框架之中,知道缓存框架所饰演的剧中人物。

貌似的话,对于单机版本的行使场景,基本上是没有须求引进这种缓存框架的,因为客户端的并发量不多,而且数量请求也是寥寥可数的,品质方便不会有其它难题。

假若对于遍及式的利用系统,如小编在大多小说中牵线到本身的《混合式开拓框架》、《Web开拓框架》,由于数量请求是并发量随着用户拉长而增加的,特别对于一些网络的选用体系,极端气象下某些时刻点一下也许就能够达到了整套应用出现的峰值。那么这种分布式的种类架构,引进数据缓存来降低IO的并发数,把耗费时间恳请改造为内部存款和储蓄器的短平快请求,能够比十分大程度的暴跌系统宕机的危害。

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

澳门新浦京娱乐场网站 16

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

为了落到实处对这些CacheManager缓存框架的利用,大家须要先进行三个施用测试,以便驾驭它的逐一方便景况,然后能力普遍应用在我们的数额中间层上。

我们创设三个体系,并在引用的地点张开管理NuGet程序包,然后搜索到CacheManager的有关模块应用,并投入到品种引用里面,此为第三步职业。

澳门新浦京娱乐场网站 17

澳门新浦京娱乐场网站 18

大家创设3个客户对象类,用来模拟数据的贮存和显示的,如下代码所示。

/// <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程序来对那么些缓存测试,以利于领悟当中的建制。

澳门新浦京娱乐场网站 19

大家在测试读取的时候,也正是对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));
}

我们追踪记录,能够看出上边的日记新闻。

澳门新浦京娱乐场网站 20

笔者们能够见见,当中第三次是缓存未有的情形下进行初叶化,开头化的记录数据为贰个,然后插入记录后,再度获取数据的时候,缓存更新后的数额就改成几个了。

大家日前介绍了插入记录的后台代码,它同时张开了缓存数据的换代了。

/// <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”软件来查阅相应的缓存数据的,张开软件大家得以看出相应的缓存记录如下所示。

澳门新浦京娱乐场网站 21

从上海体育场所大家能够查阅到,大家增添的有着缓存键值都能够透过那么些Redis的客户来张开查看,因为大家缓存里面有基于Redis缓存的落实,同理假如大家配备其余的缓存完成,如MemCache等,那么也得以在对应的治本分界面上查看到。

我们实现那么些管理后,可以窥见缓存数据是足以兑现多层缓存的,最为便捷的正是内部存储器缓存(也是它的主缓存),它会自动同步好各样分布式缓存的数据版本争执难点。

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

 

如上即是本人依据对缓存框架的完好了然和其剧中人物扮演做的有关介绍,以及介绍CacheManager的采取和一部分场地包车型大巴表明,通过上边轻易案例的研商,大家得以逐步引进到更具实际价值的Web API 框架层面上举办应用,以期把缓存框架发挥其真正有力的价值,同不时间也为大家各类不一致的缓存供给进行越来越高等级次序的追究,希望我们继续帮助。

出自:

本文由澳门新浦京娱乐场网站发布于www.146.net,转载请注明出处:澳门新浦京娱乐场网站:NET缓存框架CacheManager,