SpringBoot 整合缓存思考历程记录

SpringBoot 整合缓存思考历程记录

本篇仅作思考过程记录,不详细涉及具体代码实现。

背景

  1. 中心存储是在关系型数据库
  2. 多个项目,一个项目管理数据,另一堆项目涉及高强度依赖于查询该数据

思考历程

  1. 确定一个中心的缓存存储,手写相关操作逻辑。需要权衡考量缓存、DB数据一致性问题
  2. 看下 cache2k 的文档,基于应用内存高性能缓存框架,各自从数据库加载还好说,就是多个应用间的缓存一致性需要手动处理。懒得编写代码就算了。
  3. 看下 Ehcache3 的文档,可以做配置集群,自动同步。但是需要基于 Terracotta 服务,所说这个搭建很简单。但是对于一个小系统来说能少点环境就少点。
  4. 确定基于 redis 做缓存,由于公司框架基于 Spring 体系,刚好有个 spring-data-redis 可以拿来用。然后心态爆炸,不知道公司框架魔改了哪里,引入spring-data-redis后导致附属环境配置文件加载失败,具体表现在 application-dev.properties 文件内的配置全部没有读取到,只能读取到 application.properties 文件内的配置(浪费了半天时间确认是公司的框架导致的,还是没找到怎么改)。
  5. 发现CacheManager有个实现在Redisson里面,已经引入了。去掉spring-data-redis依赖,以Redisson内的RedissonSpringCacheManager 作为Spring的缓存管理。
public class RedissonConfig {
private final CreatorProperties creatorProperties;
@Bean
RedissonClient redissonClient() {
CreatorProperties.Redis redisConfig = creatorProperties.getRedis();
String url = redisConfig.getUrl();
String password = redisConfig.getPassword();
String username = redisConfig.getUsername();
Config config = new Config();
SingleServerConfig singleServerConfig = config.useSingleServer();
// use "rediss://" for SSL connection
singleServerConfig.setAddress(url);
if (StringUtils.hasText(username)) {
singleServerConfig.setUsername(username);
}
if (StringUtils.hasText(password)) {
singleServerConfig.setPassword(password);
}
singleServerConfig.setDatabase(redisConfig.getDatabase());
log.debug("redis url: {}", url);
// 设置序列化方式为 JsonJacksonCodec 便于查找缓存
config.setCodec(new JsonJacksonCodec());
return Redisson.create(config);
}
@Bean
RedissonReactiveClient redissonReactive(RedissonClient redissonClient) {
return redissonClient.reactive();
}
@Bean
public CacheManager cacheManager(RedissonClient redissonClient) {
return new RedissonSpringCacheManager(redissonClient);
}
}
posted @   临渊不羡渔  阅读(64)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示