聊聊在AOP模式下的缓存方案
面向方法的数据集缓存
使用了autofac做为ioc容器,使用Autofac.Extras.DynamicProxy2作为方法拦截器,缓存面向方法,直接在方法上添加CachingAttribute特性即可。
缓存注册流程
- 关于方法拦截器
- 缓存名称设计
- 添加ioc
- 添加拦截器与接口的绑定
- 在对应的接口实现类里,为方法添加CachingAttribute
- 缓存get,remove的作用
关于方法拦截器
方法拦截器是AOP面向方面编程的一个重要体现,将我们的功能点设计出现,与现有系统解耦,然后注入到项目里,哪些地方需要这个功能,就在哪个地方注入它。
AOP是以IOC容器为基础的,所以你的拦截器组件也需要提前被注入到ioc容器里,并且,现在不论是java还是.net,都提倡统一管理对象,而不是用new来生产对象,这一点也是面向接口编程的一种体现,而你在业务层进行对象传递时,永远依赖的是抽象,而不会依赖具体的实现!
缓存名称设计
名称由key和value组成
- key:项目名+对象名+缓存名称(CachingAttribute.key)
- value:缓存方法的参数名+参数值的组合
例如下面的缓存方法代码
[Caching(CachingMethod.Get, value = "time")]
DateTime GetTime(int id);
当调用为GetTime(1)
时,产生的缓存key值如下:
key="DataSetCache_IUserInfoService_time"
value="id_1"
添加ioc
builder.RegisterType<CachingBehavior>();
builder.RegisterType<DefaultUserInfoService>()
.As<IUserInfoService>()
.InstancePerLifetimeScope()
.InterceptedBy(typeof(CachingBehavior))
.EnableInterfaceInterceptors();
添加拦截器与接口的绑定
// 下面两句表示将CachingBehavior拦截器绑定到接口上
.InterceptedBy(typeof(CachingBehavior))
.EnableInterfaceInterceptors();
在方法上添加CachingAttribute特性
[Caching(CachingMethod.Get,value="time")]
DateTime GetTime();
我们可以在接口的方法上添加这个特性,也可以在接口的实现类的方法上添加这个特性,根据缓存的影响程度去添加。如果缓存对接口所有实现都启作用,就放在接口方法上,反之放在类的方法上。
缓存get,remove的作用
get
:一般作用在带有返回值的方法上,缓存名称为项目名+类名+value,当缓存存在时,直接返回,当不存在时,执行方法后,把返回值存入缓存,再返回。remove
:删除某个缓存,它直接把缓存名称value作为remove的参数注入。
聊聊在AOP模式下的缓存方案的更多相关文章
- 使用AspectCore实现AOP模式的Redis缓存
这次的目标是实现通过标注Attribute实现缓存的功能,精简代码,减少缓存的代码侵入业务代码. 缓存内容即为Service查询汇总的内容,不做其他高大上的功能,提升短时间多次查询的响应速度,适当减轻 ...
- Angularjs在360兼容模式下取数据缓存问题解决办法
测试提了一个bug,在360浏览器兼容模式下,删除页面数据需要手动刷新浏览器才能看到最新的数据.首先要复现当时的问题,很容易就复现了,但是发现在360浏览器兼容模式下无法打开开发者工具.好在经过反复重 ...
- VLAN 模式下的 OpenStack 管理 vSphere 集群方案
本文不合适转载,只用于自我学习. 关于为什么要用OpenStack 管理 vSphere 集群,原因可以有很多,特别是一些传统企业,VMware 的使用还是很普遍的,用 OpenStack 纳管至少会 ...
- .Net环境下的缓存技术介绍 (转)
.Net环境下的缓存技术介绍 (转) 摘要:介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题(共17页) 1 概念 ...
- .Net环境下的缓存技术介绍
.Net环境下的缓存技术介绍 摘要: 介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题(共17页) 1 概念 1.1 ...
- .net下的缓存技术
1.为什么要缓存?缓存能解决的问题 1.1稳定性 同一个应用中,对同一数据.逻辑功能和用户界面的多次请求时经常发生的.当用户基数很大时,如果每次请求都进行处理,消耗的资源是很大的浪费,也同时造成系统的 ...
- C#.Net环境下的缓存技术
转载:https://www.cnblogs.com/lvjy-net/p/8297679.html 一.缓存技术本节将介绍以下技术: 使用Asp.Net缓存: 使用Remoting Singleto ...
- CAS (5) —— Nginx代理模式下浏览器访问CAS服务器配置详解
CAS (5) -- Nginx代理模式下浏览器访问CAS服务器配置详解 tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 nginx版本: nginx-1.9.8 ...
- .net环境下的缓存技术-转载!
摘要: 介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题(共17页) 1 概念 1.1 缓存能解决的问题 · 性 ...
随机推荐
- python高级编程1
1.如何在列表,字典,集合中根据条件筛选数据? 如: 过滤列表[3, 9, -1, 10, 20, -2...]中的负数 筛出字典{‘小明’:70, 'Jim':88,'Tom':98...}中值高于 ...
- ResultSet,RowSet,OracleCachedRowSet和RowSetMetaData区别及联系
在java主要涉及到数据开发的过程中,我们会和数据库打交道很多,其中使用了数据集比如ResultSet和RowSet,经常使用两种,还有其它的一些,那么这两种的主要区别是什么呢?我们先来看它们引入的方 ...
- java的Junit的用法(转发)
初级https://blog.csdn.net/andycpp/article/details/1327147/ 中级https://blog.csdn.net/andycpp/article/det ...
- bzoj2437 [Noi2011]兔兔与蛋蛋
二分图博弈果然都是一个套路,必经点必胜,非必经点必败, 但是肯定不能每走一步就重新建图判断必胜还是必败,那么我们可以这样:每走一步就把这个点删掉,然后find他原来的匹配,如果找不到,就说明他是必经点 ...
- linux系统光盘开机自动挂载-配置本地yum源
一.光盘开机自动挂载 1.修改配置文件 执行命令 :vi /etc/fstab 添加/dev/cdrom /mnt iso9660 ...
- SpringBoot Web Https 配置
不管是游戏服务器开发,还是其它服务开发,越来越多的平台都要求服务端必须支持https的访问.以增加安全性.比如目前火热的小程序,要求服务端必须支持https,苹果商店也有说http请求要修改为http ...
- python爬虫踩坑教程
我们的目标是爬取下面这个个网址上的2010~2018年的数据 http://stockdata.stock.hexun.com/zrbg/Plate.aspx?date=2015-12-31 获取我们 ...
- 第10章 协议和声明类型常量 - IdentityModel 中文文档(v1.0.0)
使用OAuth 2.0,OpenID Connect和声明时,声明类型和protocoal值有很多"魔术字符串".IdentityModel提供了几个常量字符串类来帮助它. 10. ...
- 16 , CSS 边框与边界
1.CSS 中边框的使用 2.CSS 中边界的使用 16.1 CSS 中边框的使用 属性名称 属性值 说明 border-color 十六进制 可依序设置上,右,下,左线颜色 英文名称 border- ...
- 理解Device Tree Usage(续)
4 How Interrupts work 与遵循树的自然结构的地址范围转换不同, 中断信号可以起源于或者终止于板卡上的任何设备. 与设备树中自然表示的设备寻址不同,中断信号的表示独立于设备树节点 ...