一、系统缓存
eladmin系统缓存使用的是 Redis,默认使用 Spring 的注解对系统缓存进行操作。
二、配置缓存
配置文件位于 eladmin-common 模块中的 me.zhengjie.config.RedisConfig,如下(重点关注spring-cache相关配置):
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
/**
* 自定义缓存key生成策略,默认将使用该策略。
*/
@Bean
@Override
public KeyGenerator keyGenerator() {
return (target, method, params) -> {
Map<String,Object> container = new HashMap<>(8);
Class<?> targetClassClass = target.getClass();
// 类地址
container.put("class",targetClassClass.toGenericString());
// 方法名称
container.put("methodName",method.getName());
// 包名称
container.put("package",targetClassClass.getPackage());
// 参数列表
for (int i = 0; i < params.length; i++) {
container.put(String.valueOf(i),params[i]);
}
// 转为JSON字符串
String jsonString = JSON.toJSONString(container);
// 做SHA256 Hash计算,得到一个SHA256摘要作为Key
return DigestUtils.sha256Hex(jsonString);
};
}
@Bean
@Override
@SuppressWarnings({"all"})
public CacheErrorHandler errorHandler() {
// 异常处理,当Redis发生异常时,仅打印日志,不影响正常业务。这里用spring自带的LoggingCacheErrorHandler也可以。
log.info("初始化 -> [{}]", "Redis CacheErrorHandler");
return new CacheErrorHandler() {
@Override
public void handleCacheGetError(RuntimeException e, Cache cache, Object key) {
log.error("Redis occur handleCacheGetError:key -> [{}]", key, e);
}
@Override
public void handleCachePutError(RuntimeException e, Cache cache, Object key, Object value) {
log.error("Redis occur handleCachePutError:key -> [{}];value -> [{}]", key, value, e);
}
@Override
public void handleCacheEvictError(RuntimeException e, Cache cache, Object key) {
log.error("Redis occur handleCacheEvictError:key -> [{}]", key, e);
}
@Override
public void handleCacheClearError(RuntimeException e, Cache cache) {
log.error("Redis occur handleCacheClearError:", e);
}
};
}
}
三、 spring Cache基操
SpringBoot结合Redis实现缓存管理 - 掘金 (juejin.cn)
四、使用建议
缓存的出现加快了数据查询的速度,同时增加了维护成本,建议使用在高频读低频写的数据上。
注意:使用不当可能会出现数据不一致的问题,请根据实际业务的需要进行使用。