Orchard源码:缓存设计

本文深入解析Orchard缓存模块设计,包括缓存失效机制如设置失效时间、通知删除,以及DirectoryToken和FileToken等监控方式。介绍了缓存相关组件注册,如DefaultCacheManager、DefaultCacheHolder和DefaultCacheContextAccessor的作用。

概述

从缓存失效的几种方式开始了解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  介绍了多个缓存上下文同时失效的设计

转载于:https://www.cnblogs.com/miku/p/4287061.html

源码地址: https://pan.quark.cn/s/d1f41682e390 miyoubiAuto 米游社每日米游币自动化Python脚本(务必使用Python3) 8更新:更换cookie的获取地址 注意:禁止在B站、贴吧、或各大论坛大肆传播! 作者已退游,项目不维护了。 如果有能力的可以pr修复。 小引一波 推荐关注几个非常可爱有趣的女孩! 欢迎B站搜索: @嘉然今天吃什么 @向晚大魔王 @乃琳Queen @贝拉kira 第三方库 食用方法 下载源码 在Global.py中设置米游社Cookie 运行myb.py 本地第一次运行时会自动生产一个文件储存cookie,请勿删除 当前仅支持单个账号! 获取Cookie方法 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 按刷新页面,按下图复制 Cookie: How to get mys cookie 当触发时,可尝试按关闭,然后再次刷新页面,最后复制 Cookie。 也可以使用另一种方法: 复制代码 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 控制台粘贴代码并运行,获得类似的输出信息 部分即为所需复制的 Cookie,点击确定复制 部署方法--腾讯云函数版(推荐! ) 下载项目源码和压缩包 进入项目文件夹打开命令行执行以下命令 xxxxxxx为通过上面方式或取得米游社cookie 一定要用双引号包裹!! 例如: png 复制返回内容(包括括号) 例如: QQ截图20210505031552.png 登录腾讯云函数官网 选择函数服务-新建-自定义创建 函数名称随意-地区随意-运行环境Python3....
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值