SpringMVC Memcached 搭建WEB项目缓存框架

时间:2022-04-16 17:14:27

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

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


  该套框架的基本思路是:利用Spring-AOP在项目的DAOImpl层做一个环绕切面,在方法上添加自定义注解实现细粒度的控制,在环绕切面上使用CacheUtils中增强指定方法。CacheUtils的主要功能就是在去访问数据库前先去缓存中查看是否有值,有则直接返回,没有数据则去数据库中查,然后在放入缓存中。而对于删除,修改,增加方法,则需要将缓存中的数据清空。

  如何判断某一个方法是该从缓存中查询还是更新缓存,我的方式是自定义了一个注解,手动在所有Dao层实现类的方法上加上注解@Cache表示该方法属于查询方法,@Flush表示该方法不属于查询方法,需要更新缓存中数据。此处又会产生一个问题,更新缓存数据如何实现?借鉴别人的经验,同样我也使用了缓存版本这么一个概念,就是将DaoImpl的包类路径作为versionKey,缓存数据的时候,先查询该方法所在的DaoImpl的Version值,然后以包类路径+方法名+转换为JSON的参数+Version值作为KEY值,talk is cheap show u the code;

配置文件 spring-datasource.xml

注意:在有些情况下,会怎么都不进入Spring的切面中,此时可能的原因容器冲突的原因:SpringMVC的容器依赖于Spring的容器,在SpringMVC的配置文件中最好将DAO层的注解@Repository排除(同理如果SpringAOP的切面配置在Service层,则将@Service注解排除掉),还有就是在实际应用中可能会出现一个问题就是,继承自父类BaseDaoImpl的XxxDaoImpl