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的一部分,这样不同的类使用相同的缓存键互不影响。

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

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

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

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

总结
介绍了Orchard缓存模块的相关类,没有贴出更多详细的代码。了解每个类大致作用再阅读调试源码会有更深的印象。 有问题的话请留言。
参考
http://blog.wangtuyao.com/post/2014/9/14/orchard-caching-moudle 介绍了多个缓存上下文同时失效的设计
Orchard源码:缓存设计的更多相关文章
- jQuery2.x源码解析(设计篇)
jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 这一篇笔者主要以设计的角度探索jQuery的源代 ...
- Orchard 源码探索(Log)
简单工厂模式.抽象工厂模式和适配器模式 依赖倒置原则也叫依赖倒转原则,Dependence Inversion Principle,对抽象进行编程,不要对实现进行编程. A.高层次的模块不应该依赖于低 ...
- [从源码学设计]蚂蚁金服SOFARegistry之程序基本架构
[从源码学设计]蚂蚁金服SOFARegistry之程序基本架构 0x00 摘要 之前我们通过三篇文章初步分析了 MetaServer 的基本架构,MetaServer 这三篇文章为我们接下来的工作做了 ...
- [从源码学设计]蚂蚁金服SOFARegistry之网络封装和操作
[从源码学设计]蚂蚁金服SOFARegistry之网络封装和操作 目录 [从源码学设计]蚂蚁金服SOFARegistry之网络封装和操作 0x00 摘要 0x01 业务领域 1.1 SOFARegis ...
- [从源码学设计]蚂蚁金服SOFARegistry之消息总线异步处理
[从源码学设计]蚂蚁金服SOFARegistry之消息总线异步处理 目录 [从源码学设计]蚂蚁金服SOFARegistry之消息总线异步处理 0x00 摘要 0x01 为何分离 0x02 业务领域 2 ...
- [从源码学设计]蚂蚁金服SOFARegistry之存储结构
[从源码学设计]蚂蚁金服SOFARegistry之存储结构 目录 [从源码学设计]蚂蚁金服SOFARegistry之存储结构 0x00 摘要 0x01 业务范畴 1.1 缓存 1.2 DataServ ...
- [从源码学设计]蚂蚁金服SOFARegistry之推拉模型
[从源码学设计]蚂蚁金服SOFARegistry之推拉模型 目录 [从源码学设计]蚂蚁金服SOFARegistry之推拉模型 0x00 摘要 0x01 相关概念 1.1 推模型和拉模型 1.1.1 推 ...
- [从源码学设计]蚂蚁金服SOFARegistry之时间轮的使用
[从源码学设计]蚂蚁金服SOFARegistry之时间轮的使用 目录 [从源码学设计]蚂蚁金服SOFARegistry之时间轮的使用 0x00 摘要 0x01 业务领域 1.1 应用场景 0x02 定 ...
- [从源码学设计]蚂蚁金服SOFARegistry 之 自动调节间隔周期性任务
[从源码学设计]蚂蚁金服SOFARegistry 之 自动调节间隔周期性任务 目录 [从源码学设计]蚂蚁金服SOFARegistry 之 自动调节间隔周期性任务 0x00 摘要 0x01 业务领域 0 ...
- [从源码学设计]蚂蚁金服SOFARegistry 之 LocalDataServerChangeEvent及数据同步
[从源码学设计]蚂蚁金服SOFARegistry 之 LocalDataServerChangeEvent及数据同步 目录 [从源码学设计]蚂蚁金服SOFARegistry 之 LocalDataSe ...
随机推荐
- iOS 设置 (plist)
Architectures:
- 【OCP|052】OCP最新题库解析系列-3
3.Which structure can span multiple data files?❑ A) a permanent tablespace❑ B) a bigfile tablespace❑ ...
- “全栈2019”Java第一百零三章:匿名内部类详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- APScheduler定时任务
python模块(APScheduler定时任务) APScheduler简介 在平常的工作中几乎有一半的功能模块都需要定时任务来推动,例如项目中有一个定时统计程序,定时爬出网站的URL程序,定时 ...
- asp代码审计
今天给大家带来的是asp程序的代码审计,asp和aspx代码审计来说,有很多相同的地方. 正好今天要交任务,最近的目标站的子域名使用了这个cms,但是版本不一定是这个,好累. 本文作者:i春秋签约作家 ...
- Linux 解压 压缩文件
来源于:http://blog.csdn.net/mmllkkjj/article/details/6768294/ 解压 tar –xvf file.tar //解压 tar包tar -xzvf f ...
- Leetcode 88 合并两个有序数组 Python
合并两个有序数组 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分 ...
- 解决pymysql.err.InternalError: (1366, "Incorrect string value: '\\xF0\\x9F\\x8C\\xB8' for column 'headline' at row 1")
解决pymysql.err.InternalError: (1366, "Incorrect string value: '\\xF0\\x9F\\x8C\\xB8' for column ...
- JQ 文件上传
var formData = new FormData(); var name = $("input").val(); formData.append("file&quo ...
- ltp-ddt eth过程中遇到的问题
eth_iperf_tcp ETH_S_PERF_IPERF_TCP_INTPACING_8K_1448B source 'common.sh'; iface=`get_eth_iface_name. ...