Springboot使用@Cacheable为方法添加缓存的简单例子

需求及要点

初次使用@Cacheable注解,目的是对相同参数频繁查询的方法返回结果进行缓存,提高接口效率。
一开始只添加注解后不生效,经过调试,需要注意以下几点:

  1. 在 application.yml / application.properties 中配置缓存,关键配置类型type(这里以redis为例)和缓存名称cache-names
  2. 为启动类添加 @EnableCaching 注解
  3. 在方法上方添加 @Cacheable 注解,指明缓存名称 cacheNames/value,与配置文件中的名称对应
  4. 方法需要声明为公共的
  5. 在服务类内部调用不生效,需要将方法写到单独的类中(即:在A服务类的a方法中调用b方法,给b方法加缓存注解是无效的;可在A类的a方法中调用B类里的加注解的b方法)
  6. 需要缓存多个方法时,缓存名称使用同一个就可以(如下面例子中的"redisCache")

代码示例

  1. 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
  1. 启动类
@EnableCaching
public class Application {

}
  1. 存放不好归类的缓存方法的缓存工具类
@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);
    }
}
posted @   宇宙野牛  阅读(595)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示