RuoYi-Vue-v3.9.0:Caffeine本地缓存替代Redis
·
1.去除redis相关依赖
common模块:

2.新建本地缓存
添加依赖:
<!-- 本地缓存-->
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>
代码说明:
对业务缓存进行拆分
新建并初始化,下方缓存:
数据字典 dictCache; 系统配置 sysConfigCache; token认证 cachetokenCache; 防止重复提交 repeatSubmitCache; 验证码服务 captchaCache;
增加一下基础方法。
使用implements ApplicationRunner,重写run方式进行初始化。
详细代码如下:
@SuppressWarnings(value = {"unchecked", "rawtypes"})
@Component
@Order(1)
public class LocalCache implements ApplicationRunner {
private static final Logger log = LoggerFactory.getLogger(LocalCache.class);
@Value("${token.expireTime}")
private int tokenExpireTime;
private Map<String, Object> dictCache;
private Map<String, Object> sysConfigCache;
/**
* token认证cache - 会自动过期的map
*/
private Cache<String, Object> tokenCache;
/**
* 防止重复提交
*/
private Cache<String, Object> repeatSubmitCache;
/**
* 验证码服务
*/
private Cache<String, Object> captchaCache;
@Override
public void run(ApplicationArguments args) throws Exception {
sysConfigCache = new ConcurrentHashMap<String, Object>(1024);
dictCache = new ConcurrentHashMap<String, Object>(1024);
tokenCache = Caffeine.newBuilder()
.expireAfterWrite(tokenExpireTime, TimeUnit.MINUTES)
.initialCapacity(100)
.maximumSize(1000)
.build();
repeatSubmitCache = Caffeine.newBuilder()
.expireAfterWrite(Constants.REPEAT_SUBMIT_INTERVAL, TimeUnit.MILLISECONDS)
.initialCapacity(100)
.maximumSize(1000)
.build();
captchaCache = Caffeine.newBuilder()
.expireAfterWrite(Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES)
.initialCapacity(100)
.maximumSize(1000)
.build();
}
public void deleteAllDictCacheObject() {
dictCache.clear();
}
public void deleteAllSysConfigCacheObject() {
sysConfigCache.clear();
}
public void deleteTokenCacheObject(String key) {
tokenCache.invalidate(key);
}
public void deleteRepeatSubmitCacheObject(String key) {
repeatSubmitCache.invalidate(key);
}
public void deleteCaptchaCacheObject(String key) {
captchaCache.invalidate(key);
}
public void deleteSysConfigCacheObject(String key) {
sysConfigCache.remove(key);
}
public void deleteDictCacheObject(String key) {
dictCache.remove(key);
}
public <T> T getTokenCacheObject(String key) {
return (T) tokenCache.getIfPresent(key);
}
public <T> T getRepeatSubmitCacheObject(String key) {
return (T) repeatSubmitCache.getIfPresent(key);
}
public <T> T getCaptchaCacheObject(String key) {
return (T) captchaCache.getIfPresent(key);
}
public <T> T getSysConfigCacheObject(String key) {
return (T) sysConfigCache.get(key);
}
public <T> T getDictCacheObject(String key) {
return (T) dictCache.get(key);
}
public void setTokenCacheObject(String key, Object value) {
tokenCache.put(key, value);
}
public void setRepeatSubmitCacheObject(String key, Object value) {
repeatSubmitCache.put(key, value);
}
public void setCaptchaCacheObject(String key, Object value) {
captchaCache.put(key, value);
}
public void setSysConfigCacheObject(String key, Object value) {
sysConfigCache.put(key, value);
}
public void setDictCacheObject(String key, Object value) {
dictCache.put(key, value);
}
public Collection<String> getTokenCacheKeys() {
return tokenCache.asMap().keySet();
}
public Collection<String> getDictCacheKeys() {
return dictCache.keySet();
}
public Collection<String> getSysConfigCacheKeys() {
return sysConfigCache.keySet();
}
}
3.方法替换
替换业务中RedisCache中方法的调用。
4.清理代码
清理redis相关代码与yml配置。
tip
对于使用@PostConstruct初始化,有部分导致空指针问题,采用@Order 和 implements ApplicationRunner进行替换。
序列化问题报错修复:
JSONArray arrayCache = JSONArray.from(SpringUtils.getBean(LocalCache.class).getDictCacheObject(getCacheKey(key)));
参考:把ruoyi-vue前后端分离项目的redis缓存改为本地缓存cache_ruoyi redis-CSDN博客
https://blog.csdn.net/weixin_43860634/article/details/131402382
更多推荐


所有评论(0)