spring boot simple类型cache使用

注意:这里用的不是 redis 的缓存,simple 的缓存默认用的是 java 的 ConcurrentHashMap, 单纯的 simple 缓存,只需要引入下面的 pom 依赖即可:spring-boot-starter-cache

复制代码
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
            <version>2.5.3</version>
        </dependency>

如果你的pom里面同时还引入了:spring-boot-starter-data-redis

复制代码
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>2.5.3</version>
        </dependency>

并且配置了 spring.redis 相关属性,那么请务必指定缓存类型为 simple,否则会自动使用基于 redis 的 cache,如果你又没有配置redis相关设置的话,就会报:local class incompatible: stream classdesc serialVersionUID

复制代码
spring:
  redis:
    lettuce:
      pool:
        min-idle=0:
        max-wait=-1ms:
        max-active=3:
        max-idle=3:
    db: ${REDIS_DB:}
    host: ${REDIS_HOST:}
    password: ${REDIS_PASSWORD:}
    port: ${REDIS_PORT:}

# 有了上面的配置后,必须指定下面的配置,否则会自动使用基于 redis 的 cache

spring:
  cache:
    type: simple

然后直接新建一个Bean,配置如下的代码即可:

复制代码
@Component
public class CacheTools {

    private static Logger log = LoggerFactory.getLogger(CacheTools.class);
    
    @Cacheable("mapData")
    public Map<String,String> getCacheData() {
        
        Map<String,String> cacheMap=new HashMap<>();
        cacheMap.put("k1","v1");
        cacheMap.put("k2","v2");
        cacheMap.put("k3","v3");
    
        log.info(" init spring boot cache, total count={} ", cacheMap.size());
        return cacheMap;
    }

    @CacheEvict(value = "mapData")
    public void clearCache(){

    }

    @CachePut(cacheNames = "mapData", key = "#key")
    public void updateCache(String key, String value){

    }

    
}

这样就可以了,然后在Controller里面直接调用,第一次的没有缓存的时候,会执行该段代码完成初始化,后续再调用的时候,直接就走cache了,不会在执行代码了, 同理执行缓存清空和更新也类似

相关推荐
Flynn Liang41 分钟前
AiServices 源码级拆解:一个接口如何变成 RAG Agent
java·langchain·源码分析·rag·langchain4j·aiservices
Flynn Liang1 小时前
LangChain4j 1.23 架构全景:Java 大模型应用的 6 层抽象
java·langchain·大模型·rag·ai agent·langchain4j
聪明的笨猪猪2 小时前
实际工程问题:AI生成Redis分布式锁的原子性缺陷导致库存超卖
java·经验分享·面试·ai编程
软件技术NINI2 小时前
基于SpringBoot和Vue的新能源汽车销售推荐系统
java·vue.js·spring boot·后端·汽车·毕业设计·毕设
Flynn Liang3 小时前
LangChain4j 生产级工程骨架:12 个模块 + Docker 一键启动
java·spring boot·langchain·rag·langchain4j
RuoyiOffice4 小时前
固定资产维修管理:从报修、审批到办结,原资产卡怎么回查?
spring boot·固定资产·ruoyi office·资产维修·维修审批·维修办结·资产履历
噢,我明白了4 小时前
JAVA中的一些基础应用知识点
java·开发语言
招风的黑耳4 小时前
SpringBoot+Vue+MySQL 民宿在线预定平台 完整可运行版(源码+文档)
vue.js·spring boot·mysql
SL_staff4 小时前
私有化低代码不是妥协,而是企业级数字化的自主可控主航道
java
装不满的克莱因瓶4 小时前
【SpringAI Alibaba】ReactAgent结构化输出OutputType与OutputSchema实战
java·人工智能·ai·springai·springaialibaba