最近做的项目一直在使用memcached作为缓存来缓存各种数据,现在BOSS要在项目上加上缓存。并把任务交给我。便琢磨怎么解决这个问题。

  看了很多文章,写的比较详尽靠谱的就是这篇了http://www.cnblogs.com/cczhoufeng/archive/2013/04/09/3009578.html,并在此基础之上结合自身项目做出了一些改动,在此分享出来。


  该套框架的基本思路是:

  利用Spring-AOP在项目的DAOImpl层做一个环绕切面

  在方法上添加自定义注解实现细粒度的控制(然而需要修改其他DAO的实现类方法,并不是特别好的解决思路,希望有人能够想出更好的方法)

  在环绕切面上使用CacheUtils中定义的对缓存中间件的操作方法

    CacheUtils的主要功能就是在去访问数据库前先去缓存中查看是否有值,有则直接返回,没有数据则去数据库中查,然后在放入缓存中。而对于删除,修改,增加方法,则需要将缓存中的数据清空。

    CacheUtils在通过反射拿到该次访问方法的具体信息,首先以该方法的包类路径+方法名字+参数的json 转哈希 获取到一个版本号KEY,由此去缓存中查询,如果没有则初始化版本号为1

    然后在以包类路径+方法名字+参数的json+版本号字符串转哈希 获取到一个结果集KEY,再由此去缓存中查询结果,如果没有结果,则说明缓存中没有命中,需要去访问DB,然后将结果集合放入缓存。

配置文件切面 spring-datasource.xml

  配置切面和缓存工具类的注册  

<bean id="cacheUtils" class="com.demo.util.CacheUtils" />

<aop:config proxy-target-class="true">
        <aop:aspect id="aspect" ref="cacheUtils">
            <aop:pointcut id="cacheMgr" expression="execution(* com.demo.system.dao.*.*(..))"/>
            <aop:around method="doAround"  pointcut-ref="cacheMgr"/>
        </aop:aspect>
</aop:config>
View Code

相关文章:

  • 2022-02-07
  • 2021-09-20
  • 2021-09-18
  • 2021-05-12
  • 2021-08-03
  • 2021-09-09
  • 2022-01-25
  • 2021-06-05
猜你喜欢
  • 2021-06-22
  • 2021-09-09
  • 2022-12-23
  • 2022-12-23
  • 2022-01-19
  • 2021-11-27
  • 2022-12-23
相关资源
相似解决方案