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 @ 2022-12-22 10:22  临渊不羡渔  阅读(60)  评论(0编辑  收藏  举报