English | 简体中文
支持 JDK: 1.8 ... 21
支持 Redisson: 3.15.5 ... 3.27.0
支持 Redis: 3.0 ... 7.2
- 基于redisson封装,保留redisson所有强大功能
- 支持redis的多数据源配置和实时更新
- 支持redis数据源的“只读”、“只写”、“读写”、“跳过”的状态切换
- 具有优秀的拓展性和兼容性
<dependency>
<groupId>org.codeba</groupId>
<artifactId>redis-keeper-core</artifactId>
<version>2024.0.0</version>
</dependency>
<dependency>
<groupId>org.codeba</groupId>
<artifactId>redis-keeper-support</artifactId>
<version>2024.0.0</version>
</dependency>
implementation group: 'org.codeba', name: 'redis-keeper-core', version: '2024.0.0'
implementation group: 'org.codeba', name: 'redis-keeper-support', version: '2024.0.0'
libraryDependencies += "org.codeba" % "redis-keeper-core" % "2024.0.0"
libraryDependencies += "org.codeba" % "redis-keeper-support" % "2024.0.0"
// 1. 创建配置类
Config config = new Config();
config.useSingleServer().setAddress("redis://localhost:6379").setPassword(yourPass);
// 2. 创建数据源
DefaultCacheDatasource datasource = new DefaultCacheDatasource();
Map<String, CacheTemplate> dsMap = datasource.initialize(new HashMap<String, CacheKeeperConfig>() {{
put("ds1", new CacheKeeperConfig(config));
}});
Map<String, List<CacheTemplate>> dssMap = datasource.initializeMulti(new HashMap<String, List<CacheKeeperConfig>>() {{
put("ds2", Collections.singletonList(new CacheKeeperConfig(config)));
}});
// 3. 创建数据源提供者
CacheTemplateProvider<CacheTemplate> provider = new CacheTemplateProvider<>(dsMap, dssMap);
// 4. 获取CacheTemplate
Optional<CacheTemplate> templateOptional = provider.getTemplate("ds1");
final CacheTemplate cacheTemplate = templateOptional.get();
cacheTemplate.set("foo", "bar");
// 或者获取“读写”状态的CacheTemplate
Optional<CacheTemplate> templateOptionalRW = provider.getTemplate("ds1", CacheDatasourceStatus.RW);
// 或者获取多个相同用途的CacheTemplate
Collection<CacheTemplate> cacheTemplates = provider.getTemplates("ds2");
// 或者从多个相同用途的CacheTemplate中轮询获取一个(负载均衡)
Optional<CacheTemplate> polledTemplate = provider.pollTemplate("ds2");
// 或者从多个相同用途的CacheTemplate中随机获取一个
Optional<CacheTemplate> randomedTemplate = provider.randomTemplate("ds2");
redis-keeper全部的可配置项完全兼容Spring Data Redis和Redisson的配置。示例如下:
redis-keeper:
redis:
datasource:
#.....
datasources:
#.....
redisson:
datasource:
#.....
datasources:
#.....
- 类型:
Map<String,RedisKeeperProperties>
- 默认值:
null
示例如下:
redis-keeper:
redis:
datasource:
ds1:
host: xx
port: xx
database: xx
password: xx
ds2:
host: xx
port: xx
database: xx
password: xx
ds3:
host: xx
port: xx
database: xx
password: xx
- 类型:
Map<String, List<RedisKeeperProperties>
- 默认值:
null
redis-keeper:
redis:
datasources:
ds1:
- host: xx
port: xx
database: xx
password: xx
- host: xx
port: xx
database: xx
password: xx
ds2:
- host: xx
port: xx
database: xx
password: xx
- host: xx
port: xx
database: xx
password: xx
ds3:
- host: xx
port: xx
database: xx
password: xx
- host: xx
port: xx
database: xx
password: xx
配置 | 类型 | 默认值 | 取值范围 |
---|---|---|---|
status | string | RW | RO、WO、RW、SKIP |
invoke-params-print | boolean | false | true、false |
host | string | localhost | - |
port | number | 6379 | - |
database | number | 0 | - |
password | string | null |
- |
更多的配置请查看Spring Data Redis的配置类: spring-boot/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/RedisProperties.java at main · spring-projects/spring-boot (github.com)
- 类型:
Map<String,RedissonKeeperProperties>
- 默认值:
null
示例如下:
redis-keeper:
redisson:
datasource:
ds1:
invoke-params-print: true
status: RW
config: |
singleServerConfig:
address: redis://xxx:6379
database: 0
password: xxx
- 类型:
Map<String, List<RedissonKeeperProperties>
- 默认值:
null
示例如下:
redis-keeper:
redisson:
datasources:
ds2:
- invoke-params-print: true
status: RW
config: |
singleServerConfig:
address: redis://xxx:6379
database: 0
password: xxx
- invoke-params-print: true
status: RW
config: |
singleServerConfig:
address: redis://xxx:6379
database: 0
password: xxx
配置 | 类型 | 默认值 | 取值范围 |
---|---|---|---|
status | string | RW | RO、WO、RW、SKIP |
invoke-params-print | boolean | false | true、false |
config | string | null |
- |
file | string | null |
- |
更多的配置请查看Redisson的配置类: redisson/redisson-spring-boot-starter/src/main/java/org/redisson/spring/starter/RedissonProperties.java at master · redisson/redisson (github.com)
- Maven依赖
<dependency>
<groupId>org.codeba</groupId>
<artifactId>redis-keeper-spring-boot-starter</artifactId>
<version>2024.0.0</version>
</dependency>
- CacheTemplate新增自定义的方法
自定义 MyCacheTemplate.java
import org.codeba.redis.keeper.support.CacheKeeperConfig;
import org.codeba.redis.keeper.support.DefaultRedissonTemplate;
public class MyCacheTemplate extends DefaultRedissonTemplate {
public MyCacheTemplate(CacheKeeperConfig cacheKeeperConfig) {
super(cacheKeeperConfig);
}
public void test() {
final RedissonClient redissonClient = getDataSource();
redissonClient.someMehotd();
System.out.println("hello world");
}
}
自定义 MyCacheDatasource.java
import org.codeba.redis.keeper.support.CacheDatasource;
import org.codeba.redis.keeper.support.CacheKeeperConfig;
public class MyCacheDatasource implements CacheDatasource<MyCacheTemplate> {
@Override
public MyCacheTemplate instantTemplate(CacheKeeperConfig config) {
return new MyCacheTemplate(config);
}
}
使新的MyCacheDatasource生效
import org.codeba.redis.keeper.support.CacheDatasource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyConfiguration {
@Bean
public CacheDatasource<MyCacheTemplate> cacheDatasource() {
return new MyCacheDatasource();
}
}
- 使用新的CacheTemplate
@SpringBootTest
public class AppTest {
@Autowired
private CacheTemplateProvider<MyCacheTemplate> myProvider;
@Test
public void testMyProvider() {
final Optional<MyCacheTemplate> templateOptional = myProvider.getTemplate("ds1");
if (templateOptional.isPresent()) {
final MyCacheTemplate cacheTemplate = templateOptional.get();
// Custom Methods
cacheTemplate.test();
}
}
}
- Maven依赖
<dependency>
<groupId>org.codeba</groupId>
<artifactId>redis-keeper-spring-boot-starter</artifactId>
<version>2024.0.0</version>
</dependency>
- 自定义 MyCacheDatasource.java,比如自定义设置redisson序列化和反序列化的编码方式。
import org.codeba.redis.keeper.support.CacheDatasource;
import org.codeba.redis.keeper.support.CacheKeeperConfig;
public class MyCacheDatasource implements CacheDatasource<MyCacheTemplate> {
@Override
public Consumer<CacheKeeperConfig> configPostProcessor(Consumer<CacheKeeperConfig> consumer) {
return v -> v.getConfig().setCodec(new JsonJacksonCodec());
}
}
- 使新的MyCacheDatasource生效
import org.codeba.redis.keeper.support.CacheDatasource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyConfiguration {
@Bean
public CacheDatasource<MyCacheTemplate> cacheDatasource() {
return new MyCacheDatasource();
}
}
-
Fix: JsonJacksonCodec fails to serialize Throwable on Java17 by tomj-vm · Pull Request #5436 · redisson/redisson (github.com)#
-
Redisson.getBlockingDeque:java.lang.NoClassDefFoundError: java/util/SequencedCollection · Issue #5402 · redisson/redisson (github.com) redisson的3.24.3 版本 有bug