zoukankan      html  css  js  c++  java
  • 聊聊在AOP模式下的缓存方案

    面向方法的数据集缓存

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

    缓存注册流程

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

    1. get:一般作用在带有返回值的方法上,缓存名称为项目名+类名+value,当缓存存在时,直接返回,当不存在时,执行方法后,把返回值存入缓存,再返回。
    2. remove:删除某个缓存,它直接把缓存名称value作为remove的参数注入。
  • 相关阅读:
    Ant Design Pro V5 + Django Restful Framework Token认证后台实现(二)
    Ant Design Pro V5 + Django Restful Framework Token认证后台实现(一)
    D365 FO产生随机字符串
    D365 FO Array增加排序
    转:Microsoft Dynamics AX内部版本号概述
    vue 组件通信总结
    脑图
    Flask 和 Django 中间件对比
    k8s 理论知识总结
    Flask 源码简析
  • 原文地址:https://www.cnblogs.com/lori/p/10602746.html
Copyright © 2011-2022 走看看