缓存拓展(@Cacheable)
默认实现为redis
-
添加相关配置
快速开始中已配置,若已配置可忽略
spring:
redis:
database: 0
host: 192.168.0.1
port: 6379
# 没设置密码不要写password,空字符串会报错。
# password:
timeout: 10000
注意:
过期时间:默认过期时间为 7200 秒(2小时),可自定义时间,使用方式为在即cacheName属性中拼接#
再拼接时间(单位:秒)@CachePut也一样。
这个分隔字符我使用的是
%
,但是网上几乎所有介绍缓存过期均使用#
作为分隔符,这里我一直在犹豫,#
也许有它特殊的意义,^
也好,%
也好,_
也 好,感觉都比#
贴切,我在这也处理下#
的分隔,方便使用者从网上学的#
字写法失效。我于这里做兼容:
[@%#_]
四个字符均可做分隔符使用,推荐#
。
使用:
可使用在接口上,亦可使用在实现类方法上。
添加缓存:
@Cacheable(cacheNames = "random",key="#key",unless = "#result == null")
刷新缓存:
@CachePut(cacheNames = "animal",key = "#name")
清除缓存:
@CacheEvict(cacheNames = "animal",key = "#name")
这是springboot内置的注解,可自行搜索用法,提供一个链接:https://www.jb51.net/article/112849.htm
栗子:
当使用
cacheNames = "animal:byId"
时,redis过期时间为7200秒(默认处理)。当使用
cacheNames = "animal:byId#600"
时,redis过期时间为600秒。当使用
cacheNames = "animal:byId#0"
时,redis永久不过期。
@GetMapping("getAnimalById")
@ApiOperation(value = "获取小动物:自定义过期时间(ById)",notes = "<pre>" +
"测试自定义过期时间"+
"</pre>")
@Cacheable(cacheNames = "animal:byId#600",key = "#id")
// @Cacheable(cacheNames = "animal:byId#0",key = "#id")
public Animal getAnimalById(Long id){
Console.log("执行逻辑...");
return new Animal(id,"小小");
}