您的位置 首页 java

聊聊在AOP模式下的缓存方案

面向方法的数据集 缓存

使用了autofac做为ioc容器,使用Autofac.Extras.DynamicProxy2作为方法拦截器,缓存面向方法,直接在方法上添加CachingAttribute特性即可。

缓存注册流程

  1. 关于方法拦截器
  2. 缓存名称设计
  3. 添加ioc
  4. 添加拦截器与接口的绑定
  5. 在对应的接口实现类里,为方法添加CachingAttribute
  6. 缓存get,remove的作用

关于方法拦截器

方法拦截器是 AOP 面向方面编程的一个重要体现,将我们的功能点设计出现,与现有系统 解耦 ,然后注入到项目里,哪些地方需要这个功能,就在哪个地方注入它。

缓存名称设计

名称由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的作用

  1. get:一般作用在带有返回值的方法上,缓存名称为项目名+类名+value,当缓存存在时,直接返回,当不存在时,执行方法后,把返回值存入缓存,再返回。
  2. remove:删除某个缓存,它直接把缓存名称value作为remove的参数注入。

文章来源:智云一二三科技

文章标题:聊聊在AOP模式下的缓存方案

文章地址:https://www.zhihuclub.com/192848.shtml

关于作者: 智云科技

热门文章

网站地图