spring boot中spring cache 整合redis
来源:互联网 发布:经传多赢软件 编辑:程序博客网 时间:2024/06/14 01:12
配置 spring cache 和 redis 的整合 @Bean public RedisCacheManager cacheManager(){ RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate(redisConnectionFactory)); redisCacheManager.setDefaultExpiration(5l); // 设置默认的缓存过期时间(单位:秒) Map<String, Long> expiresMap = new HashMap<String, Long>(); // 对某些命名空间单独设置过期时间 expiresMap.put("demo1", 5l); expiresMap.put("demo2", 10l); redisCacheManager.setExpires(expiresMap); return redisCacheManager; }启用 spring cache 注解 @EnableCaching使用: 实现类:@CacheConfig(cacheNames = "current service name") 方法上:@Cacheable注意: 1、注解一定要加在service层的实现类上,而不是controller,也不是service的interface上; 2、如果有标明@Cacheable注解的方法所在类有实现了某个接口,那么接口中一定要声明该方法,不然缓存不起作用。(原因:spring包装实现类,只有接口里的方法是可见的)。 3、如果标明@Cacheable注解的方法没所在类没有实现任何接口,只需要声明为public即可。注解: ------------------demo-----class-------------------------- @Service @CacheConfig(cacheNames = "paomotemp") public class MainTestServiceImpl implements MainTestService{ @Autowired private BankInfoService bankInfoService; public List<BankInfo> demo1(String id, String name, Integer age){ List<BankInfo> bankInfos = bankInfoService.getBankInfos(); System.out.println(bankInfos); return bankInfos; } public List<BankInfo> demo2(BankInfo bankInfo){ List<BankInfo> bankInfos = bankInfoService.getBankInfos(); System.out.println(bankInfos); return bankInfos; } public String demo3(){ return "1"; } } ------------------demo-----class-------------------------- 方法级别的注解 @Cacheable : 用于标识方法需要缓存 value/cacheNames:表示方法缓存所属的命名空间(可用类注解@CacheConfig的cacheNames代替,进行统一管理) key:缓存名,所在命名空间内需唯一(详细:http://blog.csdn.net/fireofjava/article/details/48913335)。 自动生成: demo1() :com.jiuhongpay.weixin_service.service.MainTestServiceImpl.demo1_4sd32 末尾的 “4sd32” 分别代表id、name、age的传参 demo2() :com.jiuhongpay.weixin_service.service.MainTestServiceImpl.printBankInfo_com.jiuhongpay.weixin_service.model.BankInfo@4238646b 自定义(表达式中表示某个字段一定要用“#”号开头,不然会报错。): @Cacheable(key = "#bankInfo.bankId + #bankInfo.cardNo") demo2() :43 //实体bankInfo中的 bankId = 4,cardNo = 3 condition:根据参数控制是否需要进行缓存,例如: demo1() //id 为3 的不缓存 @Cacheable(condition = "#id != '3'") //id是string,所以匹配要有单引号 //age 为3 的不缓存 @Cacheable(condition = "#age != 3") //age是int,匹配不需要单引号 注:string 匹配值不加单引号则匹配不上,同理,Integer 匹配值加了单引号也匹配不上 demo2() //只有bankInfo.bankId 为4 并且 #bankInfo.cardNo 为'3'的进行缓存 @Cacheable(condition = "#bankInfo.bankId == 4 and #bankInfo.cardNo == '3'") 注:关系表达式可以用“and”、“or”、“&&”、“||” unless:根据返回值控制是否需要进行缓存,例如: demo3() //返回值为 "1"的不进行缓存 @Cacheable(unless = "#result == '1'") 注:#result 代表返回结果值 @CacheEvict : 用于标识删除某数据缓存 value/cacheNames:表示方法缓存所属的命名空间(必填) key:缓存名(必填) allEntries :为true时,表示全部删除。默认值为false。 例如: demo1() //进行查询的方法,需缓存 @Cacheable(key = "'bankinfo_' + #id") demo3() //进行删除的方法,对demo1()结果的缓存进行删除 @CacheEvict(value = "paomotemp", key = "'bankinfo_' + #id") @CachePut : 一般用于新增/修改方法,调用方法时会自动把相应的数据放入缓存,并每次都会请求db,用法等同于 @Cacheable ,但不会像 @Cacheable 一样,如果有缓存就直接读缓存。 类级别的注解 @CacheConfig : 用于声明命名空间 cacheNames : 一般一个实现类是一个命名空间,声明后,@Cacheable 、 @CachePut 中的 value 和 cacheNames 就可以被替代,不需要被声明 例如:demo class 中的 MainTestServiceImpl命名规则建议: @CacheConfig cacheNames 使用每个实现类所属的接口名称,例如: @CacheConfig(cacheNames = "bankInfoService") @Cacheable value 如果使用默认的过期时间,那么不需要定义; 如果有自己特殊的自定义过期时间,则使用每个实现类所属的接口名称 + 下划线 + 时间(单位秒),例如: @Cacheable(value = "bankInfoService_10") 注:如果使用自定义的过期时间,需要去 spring cache 和 redis 的整合类中配置过期时间map。 key 方法名 + 参数,例如: @Cacheable(key = "'getById_' + #id") public BankInfo getById(Integer id);
阅读全文
0 0
- spring boot中spring cache 整合redis
- Springboot中Spring-cache与redis整合
- spring boot整合redis
- spring boot 整合 redis
- spring boot整合redis
- Spring Boot整合Redis
- spring boot redis整合
- spring boot 中redis与cookie整合
- 在 spring boot 中使用spring cache + redis
- 基spring cache 整合redis
- spring boot spring cache ehcache3.x整合
- spring-boot整合redis 总结
- (七)Spring Boot 整合Redis
- spring boot shiro redis整合
- Spring-boot中使用Cache
- spring中整合redis
- spring boot redis cache 缓存学习
- Spring boot 之 Cache With Redis
- Android低功耗蓝牙译文(一)
- 打通钉钉+WebHook:日志服务告警升级
- java web页面显示图片
- 莱德币数字资产登录中国 区块链技术成下一市场风口
- TOJ 3436: 相邻数
- spring boot中spring cache 整合redis
- Character常见方法和转义
- 初识View-SIX
- c++纯虚函数
- 第一次交叉编译基于群晖 213j(CPU:Armada 370)的iperf过程
- Geoserver style使用(三)——按属性和缩放级别渲染矢量图层
- bzoj1500/洛谷P2042 维护数列
- slowlog慢日志切割
- 原生JS实现一个滑动插件