zoukankan      html  css  js  c++  java
  • Orchard源码:缓存设计

    概述

    从缓存失效的几种方式开始了解Orchard缓存设计

    1.设置失效时间

      Func<int> retrieve = ()
                    => _cacheManager.Get("testItem",
                            ctx => {
                                ctx.Monitor(_clock.When(TimeSpan.FromSeconds(1)));
                                return ++cached;
                            });

    2.通知删除

    //第一步构造器注入signals
    private readonly ISignals _signals; 
    
    
    //获取缓存数据 
    var data = _cacheManager.Get("key2", l =>
                        {
                            l.Monitor(_signals.When("NofifyKey"));NofifyKey
                            return "AAA";
                        });
    
    //更新缓存
    _signals.Trigger("NofifyKey");

     

    还是其它的几种失效方式,

    DirectoryToken :目录最后修改日期监控失效

    FileToken:文件最后修改日期监控失效

    AsyncVolativeToken:异步任务执行完成时失效   

    等等等具体请看代码实现

     

    实现

    注册缓存相关组件

    var builder = new ContainerBuilder();
                builder.RegisterModule(new CacheModule());
                builder.RegisterType<DefaultCacheManager>().As<ICacheManager>();
                builder.RegisterType<DefaultCacheHolder>().As<ICacheHolder>().SingleInstance();
                builder.RegisterType<DefaultCacheContextAccessor>().As<ICacheContextAccessor>();
                builder.RegisterInstance<IClock>(_clock = new StubClock());
                _container = builder.Build();
                _cacheManager = _container.Resolve<ICacheManager>(new TypedParameter(typeof(Type), GetType()));


    Orchard使用Autofac作为容器组件。注册的相关类型:

    DefaultCacheManager:缓存管理器,构造函数第一个参数为持有ICacheManager对象的类型。type作为缓存Key的一部分,这样不同的类使用相同的缓存键互不影响。

    image

    DefaultCacheHolder:缓存存储方式,Orchard使用了ConcurrentDictionary<CacheKey, object> , 可以实现自己的ICacheHolder,如支持分布式缓存

    image

    DefaultCacheContextAccessor:用于保存缓存上下文。当有多个缓存上下文时,保证缓存同时失效。

    image

    IAcquireContext: 缓存上下文。 Monitor委托用于获取缓存失效方式

    image

    ICache:缓存项,每一个持有ICacheManager对象的类型对应一个ICache

    image

    总结

    介绍了Orchard缓存模块的相关类,没有贴出更多详细的代码。了解每个类大致作用再阅读调试源码会有更深的印象。 有问题的话请留言。

    参考

    http://blog.wangtuyao.com/post/2014/9/14/orchard-caching-moudle  介绍了多个缓存上下文同时失效的设计

  • 相关阅读:
    【bzoj3566】[SHOI2014]概率充电器 树形概率dp
    【bzoj1419】Red is good 期望dp
    【bzoj2698】染色 期望
    【bzoj2134】单选错位 期望
    【bzoj1022】[SHOI2008]小约翰的游戏John 博弈论
    【bzoj3170】[Tjoi 2013]松鼠聚会 旋转坐标系
    【bzoj2338】[HNOI2011]数矩形 计算几何
    【bzoj2085】[Poi2010]Hamsters Hash+倍增Floyd
    【bzoj1014】[JSOI2008]火星人prefix Splay+Hash+二分
    【bzoj2795】[Poi2012]A Horrible Poem Hash+分解质因数
  • 原文地址:https://www.cnblogs.com/miku/p/4287061.html
Copyright © 2011-2022 走看看