当前位置: 首页 > news >正文

camellia动态操作redis配置实现单租户和多租户

为了方便使用redis,单机版做演示,只提供关键点搭建,具体细节下载源码,源码在最下方

第一步搭建redis服务

第二步搭建mysql服务

第三步执行所需脚本

https://github.com/netease-im/camellia/blob/master/docs/camellia-dashboard/table.sql

第四步创建空springboot服务 需要集成mysql和redis

第五步引入相关依赖

第六步启动类加上注解

@EnableCamelliaDashboard @SpringBootApplication(scanBasePackages = {"com.example.camellia", "com.netease.nim.camellia.dashboard"})

扫描包需要加上,否则调用服务接口出现404

第七步启动camllia dashboard此项目

由于java版本兼容性问题,启动时需加上 VM参数 --add-opens java.base/java.lang=ALL-UNNAMED

第八步官网拉取camellia源码

https://github.com/netease-im/camellia

进入camellia-redis-proxy-bootstrap应用中

配置

transpond: type: remote remote: url: http://127.0.0.1:8080 bid: 1 bgroup: default dynamic: false check-interval-millis: 3000 monitor-enable: false connect-timeout-millis: 10000 read-timeout-millis: 60000 route: conf: provider: camellia_dashboard

第九步启动camellia-redis-proxy-bootstrap服务

第十步验证结果

可调用dashboard接口绑定业务身份,更改配置。进行验证

1.创建资源表

此接口会返回tid

curl --location 'http://127.0.0.1:8080/camellia/admin/createResourceTable' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'detail= { "type": "simple", "operation": { "read": "redis://@127.0.0.1:6379", "type": "rw_separate", "write": "redis://@127.0.0.1:6379" } }' \ --data-urlencode 'info=tid=3test'

若采用redis集群模式参考配置:


最简单先记这个格式:

redis-cluster://[username:password 或 password]@host1:port1,host2:port2,host3:port3

注意点:

- @ 必须有
- 节点之间用英文逗号 ,
- Cluster 不像 sentinel,不需要 /masterName
- 只写密码时就是 redis-cluster://password@...
- 用 ACL 时就是 redis-cluster://username:password@...

1. 最简单的 cluster 资源表
如果你只是单集群直连,直接这样就行,甚至不一定非得包 JSON:

redis-cluster://@10.0.0.11:7000,10.0.0.12:7000,10.0.0.13:7000

或者写成 JSON:

{
"type": "simple",
"operation": "redis-cluster://@10.0.0.11:7000,10.0.0.12:7000,10.0.0.13:7000"
}

2. 带密码的 cluster

{
"type": "simple",
"operation": "redis-cluster://yourPassword@10.0.0.11:7000,10.0.0.12:7000,10.0.0.13:7000"
}

3. 带 ACL 用户名密码的 cluster

{
"type": "simple",
"operation": "redis-cluster://appuser:yourPassword@10.0.0.11:7000,10.0.0.12:7000,10.0.0.13:7000"
}

4. cluster 做读写分离
如果你想按你之前那种 rw_separate 写法,可以这样:

{
"type": "simple",
"operation": {
"type": "rw_separate",
"read": "redis-cluster://@10.0.0.11:7000,10.0.0.12:7000,10.0.0.13:7000",
"write": "redis-cluster://@10.0.0.11:7000,10.0.0.12:7000,10.0.0.13:7000"
}
}

这个写法语义上可以用,但如果读写其实是同一个 cluster,这么写更多只是为了结构统一。

5. 如果你要“读从节点,写主节点”
Camellia 还支持 redis-cluster-slaves://:

{
"type": "simple",
"operation": {
"type": "rw_separate",
"read": "redis-cluster-slaves://@10.0.0.11:7000,10.0.0.12:7000,10.0.0.13:7000?withMaster=false",
"write": "redis-cluster://@10.0.0.11:7000,10.0.0.12:7000,10.0.0.13:7000"
}
}

这里:

- withMaster=false 表示读只走 slave
- 如果你想主从都参与读,可以写 withMaster=true

6. TLS 集群
如果你们生产是 TLS,前缀改成 rediss-cluster://:

{
"type": "simple",
"operation": "rediss-cluster://appuser:yourPassword@10.0.0.11:7000,10.0.0.12:7000,10.0.0.13:7000"
}

我建议你现在最先用这个
如果你只是把单机改成 cluster,先用这一版最稳:

{
"type": "simple",
"operation": "redis-cluster://@10.0.0.11:7000,10.0.0.12:7000,10.0.0.13:7000"
}

2.绑定业务身份

传入第一步返回的tid,如果变更redis配置,先执行1.创建资源表,然后再执行此接口才会真正被camellia-redis-proxy-camellia拉取到

curl --location 'http://127.0.0.1:8080/camellia/admin/createOrUpdateTableRef' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'bid=1' \ --data-urlencode 'bgroup=default' \ --data-urlencode 'tid=7' \ --data-urlencode 'info=demo binding4'

camellia-redis-proxy-bootstrap会定时去轮询的读取dashboard对应业务身份的资源表,如果资源发生变化,会根据md5比对,如不一致就会返回200 ,camellia-proxy-bootstrap会更改redis的路由进行访问。否则会出现304 not.notify 无改变的结果

多租户的实现

transpond: type: remote remote: url: http://127.0.0.1:8080 bid: 1 bgroup: default dynamic: true check-interval-millis: 3000 monitor-enable: false connect-timeout-millis: 10000 read-timeout-millis: 60000

修改dynamic为true开启多租户

先建立资源例如

bid:2 ,bgroup :viss

bid:3,bgroup:doss

然后开启两个redis-cli窗口进行连接

连接后需要设置当前链接名称按照规则:camellia_bid_bgroup 这种规则 ,前缀不可变化,在camellia源码中会按照这种规则解析,然后会路由到对应的配置

输入get命令,根据路由规则会获取到不同的值,至此完成redis-proxy的动态路由

也可使用redis客户端工具RESP进行操作

应用方使用redis-proxy

以springboot为例

需要引用依赖

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>

添加配置类

@Configuration public class RedisConfig { @Value("${spring.redis.host}") private String host; @Value("${spring.redis.port}") private int port; @Value("${spring.redis.password:}") private String password; @Value("${spring.redis.database:0}") private int database; @Value("${spring.redis.client-name:camllia-dynamic-client}") private String clientName; @Bean public LettuceConnectionFactory redisConnectionFactory() { RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(host, port); configuration.setDatabase(database); if (password != null && !password.isEmpty()) { configuration.setPassword(password); } ClientOptions clientOptions = ClientOptions.builder() .socketOptions(SocketOptions.builder() .connectTimeout(Duration.ofSeconds(10)) .build()) .build(); LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder() .clientOptions(clientOptions) .commandTimeout(Duration.ofSeconds(5)) .clientName(clientName) .build(); LettuceConnectionFactory factory = new LettuceConnectionFactory(configuration, clientConfig); factory.afterPropertiesSet(); return factory; } @Bean public StringRedisTemplate stringRedisTemplate(LettuceConnectionFactory connectionFactory) { StringRedisTemplate template = new StringRedisTemplate(); template.setConnectionFactory(connectionFactory); return template; } }
server: port: 8081 spring: redis: host: localhost port: 63800 password: pass123 database: 0 timeout: 3000ms client-name: camellia_3_viss lettuce: pool: max-active: 8 max-idle: 8 min-idle: 0 max-wait: -1ms

主要是根据client-name来区分路由的

应用方使用对应dashboard分发的client-name

二 根据dashboard管理页面操作redis的配置

登录账号:admin

登录密码:pass1234

1.先建立资源表

2.业务绑定

3.业务绑定管理菜单

可查看业务和资源表关联信息

4.路由验证结果是否被改变

5.资源台账

在创建资源表管理时,数据会自动创建,无需手动登记资源

camellia-dashboard新建项目源码

https://gitcode.com/qq_33544462/camellia-dashboard

应用实现动态redis-proxy项目源码

https://gitcode.com/qq_33544462/camllia-dynamic/tree/main

http://www.jsqmd.com/news/804807/

相关文章:

  • 终极指南:5步掌握MapleStory游戏资源编辑的AI驱动解决方案
  • 创业团队如何借助 Taotoken 统一管理多项目 AI 调用成本
  • CI/CD——在jenkins中构建流程实现springboot项目的自动化构建与部署
  • 泰拉瑞亚整合包下载灾厄大杂烩整合包2026最新版下载
  • Unity(十六)切换场景及鼠标相关
  • FPGA单粒子翻转(SEU)原理、影响与防护策略全解析
  • 20 鸿蒙LiteOS信号量原理实战:信号量作用、MAX_COUNT含义、线程同步源码解析
  • 网络安全法正式实施!这五个专业人才“身价”要暴涨
  • 植物大战僵尸杂交版下载2026最新版更新v3.16及版本介绍分享(附下载链接)
  • 停止自我感动式努力。你熬的不是夜,是发际线
  • Unity(十七)Unity随机数及Unity委托
  • 新手入门教程使用curl命令快速测试Taotoken大模型API连通性
  • DHCP实验
  • 基于Docker的OpenClaw容器化部署:安全隔离与实战指南
  • AI代理任务编排平台AgentForge:本地调度与自动化工作流实践
  • 深海迷航风灵月影修改器下载(已汉化)2026最新版分享
  • 氧化钇:半导体的隐藏王牌
  • RoboCore架构:机器人碰撞检测的硬件加速方案
  • ClawWork CLI实战:构建去中心化AI代理与链上激励工作流
  • AI图像生成器的“天花板”正在被打破:从一致性控制、角色记忆、多图连贯性到文本排版精度——实测结果颠覆行业认知
  • AI认知绝症:永远立于不败的二分法与反二分法
  • 0x01 位运算
  • 谷歌排名算法有哪些? 外贸B2B网站提升询盘的4个优化重点
  • 把破事丢给AI,把快乐还给自己
  • 2026免费去水印小程序排行榜:免费去水印小程序推荐,哪款去水印效果好? - 科技热点发布
  • Java并发编程核心原理,程序员必备!
  • OpenWrt网络访问控制:家庭数字生活管理的终极解决方案
  • 在线水印去除怎么做?2026年免费去水印工具实测指南 - 科技热点发布
  • Cyberpunk 2077存档编辑器:开源技术实现与安全数据修改指南
  • 我的世界生化危机终极末日整合包下载(已汉化)2026最新版下载分享