注意:这里用的不是 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了,不会在执行代码了, 同理执行缓存清空和更新也类似