# ryan-multiple-cache **Repository Path**: ryan-codes/ryan-multiple-cache ## Basic Information - **Project Name**: ryan-multiple-cache - **Description**: 基于Spring Cache+Caffeine+Redis的多级缓存管理组件,开箱即用。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://gitee.com/ryan-codes/ryan-multiple-cache - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2024-03-31 - **Last Updated**: 2025-03-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: 缓存, 多级缓存, Caffeine, Redis ## README # multiple-cache-boot-starter #### 介绍 基于Spring Cache + Caffeine + Redis的多级缓存管理组件,完全兼容@Caching、@Cacheable、@CacahePut、@CacheEvict等注解。同时支持自定义缓存API层级的缓存策略,以及通过Redis订阅发布机制,实现缓存一致性。 #### 软件架构 - JDK1.8 - SpringBoot 2.x - Caffeine 2.8.8 - Redisson 3.8.2 #### 使用说明 ###### 1. 引入依赖 ``` com.ryan.multiple.cache multiple-cache-boot-starter ${multiple-cache.version} ``` ###### 2. 默认配置项 在未对具体API进行缓存策略配置时,该配置项作为多级缓存默认全局配置。 ``` ## 默认配置 ### 缓存类型:caffeine-一级缓存,redis-二级缓存,multiple-多级缓存 ryan.multiple.cache.default.type=caffeine ### 缓存参数存活时间(单位:秒) ryan.multiple.cache.default.ttl=1800 ### 缓存最大空闲时间(单位:秒) ryan.multiple.cache.default.maxIdleTime=1800 ### 缓存最大记录数 ryan.multiple.cache.default.maxSize=1000 ### 是否允许缓存Null值 ryan.multiple.cache.default.allowNullValues=true ``` ###### 3. 自定义配置项 支持API层级的缓存配置管理,对不同API进行定制化配置。如下示例标识对缓存名称为 sayHello 的API缓存配置。 ``` ## 默认配置 ### 缓存类型:caffeine-一级缓存,redis-二级缓存,multiple-多级缓存 ryan.multiple.cache.sayHello.type=multiple ### 缓存参数存活时间(单位:秒) ryan.multiple.cache.sayHello.ttl=300 ### 缓存最大空闲时间(单位:秒) ryan.multiple.cache.sayHello.maxIdleTime=300 ### 缓存最大记录数 ryan.multiple.cache.sayHello.maxSize=100 ### 是否允许缓存Null值 ryan.multiple.cache.sayHello.allowNullValues=true ``` ###### 4. 缓存管理示例 - @Cacheable ``` @GetMapping("/get") @Cacheable(cacheNames = "sayHello", key = "#userName") public String getSayHello(String userName) { LOGGER.info("Cacheable --> keyName={}.", userName); return "Hello, " + userName + "!"; } ``` - @CachePut ``` @PutMapping("/put") @CachePut(cacheNames = "sayHello", key = "#userName") public String putSayHello(String userName) { LOGGER.info("CachePut --> keyName={}.", userName); return "Hello, " + userName + "!"; } ``` - @CacheEvict ``` @DeleteMapping("/evict") @CacheEvict(cacheNames = "sayHello", key = "#userName") public void evictSayHello(String userName) { LOGGER.info("CacheEvict --> keyName={}.", userName); } ``` ###### 5. Redis配置 当前组件中已经集成了Redis的客户端,支持单机模式、主从模式、哨兵模式和Cluster集群模式,只需要在配置文件中指定Redis服务部署模式,并在对应模式下配置redis节点信息。具体参考如下: - 单机模式 ``` ryan.redis.mode=single ryan.redis.single.address=127.0.0.1:6379 ryan.redis.single.password=cache@12345 ``` - 主从模式 ``` ryan.redis.mode=masterSlave ryan.redis.masterSlave.master=127.0.0.1:6379 ryan.redis.masterSlave.nodes=127.0.0.1:6380,127.0.0.1:6381 ryan.redis.masterSlave.password=cache@12345 ``` - 哨兵模式 ``` ryan.redis.mode=sentinel ryan.redis.masterSlave.master=127.0.0.1:6379 ryan.redis.masterSlave.nodes=127.0.0.1:6380,127.0.0.1:6381 ryan.redis.masterSlave.password=cache@12345 ``` - 集群模式 ``` ryan.redis.mode=cluster ryan.redis.masterSlave.nodes=127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381 ryan.redis.masterSlave.password=cache@12345 ``` 除了上述基本配置信息项,其他相关参数均使用了redisson客户端中默认参数。 如果要对默认参数进行修改,则需要在项目中实现如下接口即可: > 注意:RedisServerConfigHandler接口的对应实现类需要注入到spring容器中。 ``` public interface RedisServerConfigHandler { void fillConfigs(T config); } ``` > 如下示例:调整重试次数为5次,此时默认参数retryAttempts=3会被覆盖。 ``` @Component public class RedisSingleServerConfigHandler implements RedisServerConfigHandler { @Override public void fillConfigs(SingleServerConfig config) { // 设置重试次数为5次 config.setRetryAttempts(5); } } ``` #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)