Tips:过期key时使用Caffeine的expireAfterWrite方法实现,所以一个过期key就对应一个cache
Maven项目导入依赖
<!-- cache 缓存 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
<version>2.5.14</version>
</dependency>
<!-- cache 缓存实现 -->
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>2.9.3</version>
</dependency>
创建配置类
import org.springframework.cache.caffeine.CaffeineCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author lxb
* @create 2023/6/8 14:42
**/
@Configuration
public class CaffeineCacheConfig {
@Bean
public CaffeineCacheManager cacheManager() {
CaffeineCacheManager caffeineCacheManager = new CaffeineCacheManager();
return caffeineCacheManager;
}
}
封装工具类是按照redis工具类封装的
@Component
public class CaffeineRepository {
@Autowired
private CaffeineCacheManager cacheManager;
// 默认不过期cache
static final String defaultCacheName = "ordinary";
// 过期默认cache
static final String defaultExpire = "expire";
// 不过期
static final long defaultTimeout = -1;
// 记录过期可以的添加时间使用
static final String expireKey = ":time";
/***
* 获取Cache 没有就创建
* @param cacheName
* @return
*/
public Cache createCache(String cacheName,long timeout){
if (!isCache(cacheName)) {
cacheManager.registerCustomCache(cacheName,caffeineCacheBuilder(timeout).build());
}
return cacheManager.getCache(cacheName);
}
public Cache getCache(String cacheName){
return cacheManager.getCache(cacheName);
}
/***
* 判断Cache是否存在
* @