跳到主要内容

缓存拓展(@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,"小小");
}