Springboot使用@Cacheable为方法添加缓存的简单例子
需求及要点
初次使用@Cacheable注解,目的是对相同参数频繁查询的方法返回结果进行缓存,提高接口效率。
一开始只添加注解后不生效,经过调试,需要注意以下几点:
- 在 application.yml / application.properties 中配置缓存,关键配置类型type(这里以redis为例)和缓存名称cache-names
- 为启动类添加 @EnableCaching 注解
- 在方法上方添加 @Cacheable 注解,指明缓存名称 cacheNames/value,与配置文件中的名称对应
- 方法需要声明为公共的
- 在服务类内部调用不生效,需要将方法写到单独的类中(即:在A服务类的a方法中调用b方法,给b方法加缓存注解是无效的;可在A类的a方法中调用B类里的加注解的b方法)
- 需要缓存多个方法时,缓存名称使用同一个就可以(如下面例子中的"redisCache")
代码示例
- application.yml
spring:
# 缓存配置
cache:
type: redis
redis:
time-to-live: 300000
# 缓存名称,与注解中的名称对应
cache-names: redisCache
# redis 配置
redis:
# 地址
host: xxx.xxx.xxx.xxx
# 端口
port: xxx
# 数据库索引
database: xxx
# 密码
password: xxx
timeout: 300s
jedis:
pool:
# 连接池中的最小空闲连接
min-idle: 0
# 连接池中的最大空闲连接
max-idle: 8
# 连接池的最大数据库连接数
max-active: 8
# #连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms
- 启动类
@EnableCaching
public class Application {
}
- 存放不好归类的缓存方法的缓存工具类
@Component
public class CacheUtils {
@Resource
private AnylineService anylineService;
@Cacheable(cacheNames = "redisCache")
public DataSet anylineQueryIds(String tableName, String key, Object value){
String fields = "(ID," + key + ")";
return anylineService.querys(tableName + fields, key + ":" + value);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!