SpringBoot 整合缓存思考历程记录
SpringBoot 整合缓存思考历程记录
本篇仅作思考过程记录,不详细涉及具体代码实现。
背景
- 中心存储是在关系型数据库
- 多个项目,一个项目管理数据,另一堆项目涉及高强度依赖于查询该数据
思考历程
- 确定一个中心的缓存存储,手写相关操作逻辑。需要权衡考量缓存、DB数据一致性问题
- 看下 cache2k 的文档,基于应用内存高性能缓存框架,各自从数据库加载还好说,就是多个应用间的缓存一致性需要手动处理。懒得编写代码就算了。
- 看下 Ehcache3 的文档,可以做配置集群,自动同步。但是需要基于 Terracotta 服务,所说这个搭建很简单。但是对于一个小系统来说能少点环境就少点。
- 确定基于 redis 做缓存,由于公司框架基于 Spring 体系,刚好有个
spring-data-redis
可以拿来用。然后心态爆炸,不知道公司框架魔改了哪里,引入spring-data-redis
后导致附属环境配置文件加载失败,具体表现在 application-dev.properties 文件内的配置全部没有读取到,只能读取到 application.properties 文件内的配置(浪费了半天时间确认是公司的框架导致的,还是没找到怎么改)。 - 发现
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); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律