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 @ 2023-02-03 14:22  宇宙野牛  阅读(569)  评论(0编辑  收藏  举报