博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ehcache学习笔记(三) 与Spring集成
阅读量:6805 次
发布时间:2019-06-26

本文共 3401 字,大约阅读时间需要 11 分钟。

Spring EhCache集成

所需jar包

Ehcache2.6.6  [ehcache-core-2.6.6.jar]  ,Spring3 M2(全部jar) ,slf4j-api-1.6.1.jar,slf4j-jdk14-1.6.1.jar

先定义EhCache的配置文件:ehcache.xml  具体详细配置说明这里不做解释,关于ehcache的教程网上很多。

在Spring的XML当中配置与EhCache集成

1、<cache:annotation-driven cache-manager="ehCacheCacheManager"/> 开启注解支持,这样可以使用Spring的注解来操作缓存。

2、ehCacheManagerFactoryBean 用来初始化Ehcache的CacheManager

3、ehCacheCacheManager 配置Spring的缓存管理器

以上配置就完成了EhCache与Spring的集成

Spring还提供了与其他缓存框架的支持,具体配置细节可以查看官方文档。

如果Spring与多个缓存框架集成 可以配置CompositeCacheManager用于组合CacheManager,即可以从多个CacheManager中轮询得到相应的Cache。

当我们调用cacheManager.getCache(cacheName) 时,会先从第一个cacheManager中查找有没有cacheName的cache,如果没有接着查找第二个,如果最后找不到,因为fallbackToNoOpCache=true,那么将返回一个NOP的Cache否则返回null。

 

一般我们使用Cache注解在Spring当中使用缓存。

@Cacheable

应用到读取数据的方法上,即可缓存的方法,如查找方法:先从缓存中读取,如果没有再调用方法获取数据,然后把数据添加到缓存中。

(即从缓存中读取数据,同时也将数据放入缓存)

public @interface Cacheable {    String[] value();  //缓存的名字,可以把数据写到多个缓存      String key() default "";   //缓存key,如果不指定将使用默认的KeyGenerator生成,后边介绍      String condition() default ""; //满足缓存条件的数据才会放入缓存}

 

@CachePut 

用法类似于@Cacheable,但是用于存放数据声明(如更新数据),所以每次都会执行,将执行后的结果存入缓存。

(只往缓存里放数据,不从缓存中读数据)

public @interface CachePut {    String[] value();    String key() default "";    String condition() default "";}

 

@CacheEvict 

即应用到移除数据的方法上,如删除方法,调用方法时会从缓存中移除相应的数据。

(从缓存中清除数据)

public @interface CacheEvict {      String[] value();                        //请参考@CachePut      String key() default "";                 //请参考@CachePut      String condition() default "";           //请参考@CachePut      boolean allEntries() default false;      //是否移除所有数据      boolean beforeInvocation() default false;//是调用方法之前移除/还是调用之后移除  }

 

Spring 提供的SpEL上下文支持

参考资料:http://jinnianshilongnian.iteye.com/blog/2001040?page=2 开涛

 

1、缓存的key可以使用参数的属性 

@Cacheable(value="books", key="#isbn")public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed)@Cacheable(value="books", key="#isbn.rawNumber")public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed)@Cacheable(value="books", key="T(someType).hash(#isbn)") // key="T(静态类的全名 包名+类名).方法(参数)"public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed)

 

2、可以根据条件来决定是否使用缓存 condition表达式的条件满足才使用缓存。

 

@Cacheable(value="book", condition="#name.length < 32")public Book findBook(String name)
@Cacheable(value="UserMenuCache", key="#key", condition="#key.equals('ok')")public User userTokenCache(String key)
@Cacheable(value = "user", key = "#id", condition = "#id lt 10")public User conditionFindById(final Long id)

 

3、只往缓存中放数据

@CachePut(value="UserMenuCache", key="#key")public User userTokenCache(String key)

 

4、扩展key的生成,可以写一个静态代码,然后根据业务自定义key

1 @Component 2 public class SystemCacheManager { 3      4     @CachePut(value="UserMenuCache", key="T(com.framework.code.component.SystemCacheManager).hashKey(#key)") 5     public User userTokenCache(String key) { 6         System.out.println("SystemCacheManager.userTokenCache()"); 7         User user = new User(); 8         user.setAge(18); 9         return user;10     }11     12     public static String hashKey(String key) {13         System.out.println("SystemCacheManager.hashKey()");14         return "test" + key;15     }16 }

 

 

转载地址:http://hhvwl.baihongyu.com/

你可能感兴趣的文章
《网络安全原理与实践》一1.12 复习题
查看>>
《电路分析导论(原书第12版)》一词汇表
查看>>
《Android游戏编程入门经典》——4.6节问与答
查看>>
TouchVG 支持 CocoaPods 了!
查看>>
24个可能你现在用不到,但应该了解的 PHP 库
查看>>
如何在 Ubuntu 16.10 的 Unity 8 上运行老式 Xorg 程序
查看>>
《C Primer Plus(第6版)中文版》一2.12 编程练习
查看>>
怎样在 Ubuntu Unity Dash 添加关机、重启选项
查看>>
《数字图像处理与机器视觉——Visual C++与Matlab实现》——0.1 数字图像
查看>>
《JavaScript高效图形编程(修订版)》——导读
查看>>
在 Linux 中使用 SSD(固态驱动器):启用 TRIM
查看>>
开发者的实用 Vim 插件(二)
查看>>
springcloud(四):熔断器Hystrix
查看>>
数据驱动型文化是大数据成功的关键
查看>>
《Python机器学习——预测分析核心算法》——2.3 对“岩石vs.水雷”数据集属性的可视化展示...
查看>>
机器学习初学者入门实践:怎样轻松创造高精度分类网络
查看>>
Ruby Tip:定义索引操作符
查看>>
优云automation实践技巧:简单4步完成自动化构建与发布
查看>>
【Android 】【Monkey Demons】 针对性的进行稳定性测试
查看>>
基于MongoDB与NodeJS构建物联网系统
查看>>