背景
Redis多数据源常见的场景:
- 分区数据处理:当数据量增长时,单个Redis实例可能无法处理所有的数据。通过使用多个Redis数据源,可以将数据分区存储在不同的实例中,使得数据处理更加高效。
- 多租户应用程序:对于多租户应用程序,每个租户可以拥有自己的Redis数据源,以确保数据隔离和安全性。
目前在网上的一些解决方案无法完全满足特定需求,例如不支持动态添加或更新数据源、缺乏数据源的负载均衡功能,或者不能开箱即用需要自行封装一些常用方法。
为了解决这些问题,封装了一个轻量级的Redis多数据源库,已在生产环境中长时间稳定运行。现分享出来,希望这个库能对你的项目有所帮助。
https://github.com/codebaorg/redis-keeper
如果这篇文章帮助到了你,欢迎star一下,感谢你的支持。
特征
- 基于redisson封装,保留redisson的所有强大功能。
- 支持redis多数据源配置的实时更新。
- 支持redis多数据源的负载均衡。
- 支持redis数据源的“只读”、“只写”、“读写”、“跳过”的状态切换。
- 提供 130+ 常用的redis操作方法,包括但不限string、list、hash、set、zset、geo、bitmap、hyberloglog、分布式锁、布隆过滤器、限流等。
快速开始
- 添加maven依赖
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.15.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.codeba</groupId>
<artifactId>redis-keeper-spring-boot-starter</artifactId>
<version>2024.0.0</version>
</dependency>
- springboot的配置文件,添加redis多数据源的配置
redis-keeper:
redis:
datasource:
ds1: // 此处的命名可以随便取,但是要保证唯一不重复
host: localhost
port: 6379
database: 0
password: yourPass
ds2: // 此处的命名可以随便取,但是要保证唯一不重复
host: localhost
port: 6379
database: 0
password: yourPass
- 按自定义的数据源别名获取相应的cacheTemplate,执行redis命令。
方式一:通过CacheTemplateProvider获取cacheTemplate,示例如下:
public class AppTest {
@Autowired
private CacheTemplateProvider<CacheTemplate> provider;
public void test() {
final Optional<CacheTemplate> templateOptional = provider.getTemplate("ds1");
if (templateOptional.isPresent()) {
final CacheTemplate cacheTemplate = templateOptional.get();
String key = "foo";
String value = "bar";
cacheTemplate.set(key, value);
}
}
}
方式二:通过代理类CacheTemplateProxy获取cacheTemplate,示例如下:
public class AppTest {
private final CacheTemplate cacheTemplate = CacheTemplateProxy.asTemplate("ds1")