根据当前仓库里的配置,configurationUri 是给 Lettuce 用的 Redis 地址,支持单节点或多节点(作为集群种子节点)。下面是用 Docker 起 Redis 集群以及生成 configurationUri 的用法说明。


1. 用 Docker 搭建 Redis 集群

方式 A:docker-compose(推荐)

在项目里或任意目录建一个 docker-compose-redis-cluster.yml

version: "3.8"
services:
  redis-node-1:
    image: redis:7.2-alpine
    command: redis-server --port 6379 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
    ports:
      - "6379:6379"
    volumes:
      - redis-1-data:/data
    networks:
      redis-cluster:
​
  redis-node-2:
    image: redis:7.2-alpine
    command: redis-server --port 6379 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
    ports:
      - "6380:6379"
    volumes:
      - redis-2-data:/data
    networks:
      redis-cluster:
​
  redis-node-3:
    image: redis:7.2-alpine
    command: redis-server --port 6379 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
    ports:
      - "6381:6379"
    volumes:
      - redis-3-data:/data
    networks:
      redis-cluster:
​
volumes:
  redis-1-data:
  redis-2-data:
  redis-3-data:
​
networks:
  redis-cluster:
    driver: bridge

启动并初始化集群:

# 启动 3 个节点
docker compose -f docker-compose-redis-cluster.yml up -d
​
# 等待几秒后,创建集群(1 副本 = 3 主节点)
docker run --rm --network <项目名>_redis-cluster redis:7.2-alpine redis-cli --cluster create \
  redis-node-1:6379 redis-node-2:6379 redis-node-3:6379 \
  --cluster-yes

<项目名>_redis-cluster 是 compose 根据目录名自动生成的网络名,可用 docker network ls 查看。

方式 B:单机多端口(本机开发)

本机跑 6 个容器(3 主 3 从),端口 6379–6384:

for port in 6379 6380 6381 6382 6383 6384; do
  docker run -d --name redis-$port -p $port:6379 \
    redis:7.2-alpine redis-server --port 6379 --cluster-enabled yes \
    --cluster-config-file nodes.conf --cluster-node-timeout 5000
done
​
# 创建集群(前 3 个为主,后 3 个为从)
docker run --rm -it --network host redis:7.2-alpine redis-cli --cluster create \
  127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 \
  127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 \
  --cluster-replicas 1

2. 生成 configurationUri 并填到 config

代码里通过 RedisURI.create(uri) 解析,Lettuce 会连上你给的节点后自动用 CLUSTER SLOTS 发现整个集群,所以只需要填一个(或几个)种子节点即可。

  • 单节点种子(本机/宿主机访问):

    • 单机单节点:redis://localhost:6379/

    • 单机集群(上面方式 B):redis://localhost:6379/redis://127.0.0.1:6379/

  • 多节点种子(可选,高可用):

    • redis://host1:6379,host2:6379,host3:6379/

    • 示例:redis://redis-node-1:6379,redis-node-2:6379,redis-node-3:6379/(在 compose 同一网络内的服务名)

  • 带密码:

    • redis://:你的密码@localhost:6379/

你在 config.yml 里已经有的几处可以这样填(本机单节点示例):

# 本机单节点或本机集群任一节点
cacheCluster:
  configurationUri: redis://localhost:6379/
​
pubsub:
  uri: redis://localhost:6379/
​
pushSchedulerCluster:
  configurationUri: redis://localhost:6379/
​
rateLimitersCluster:
  configurationUri: redis://localhost:6379/

若 Signal-Server 跑在 Docker 里、Redis 用 compose 起的 3 个节点,则把 localhost 换成对应服务的 host(例如 redis-node-1),并保证它们在同一 Docker 网络中,例如:

  • configurationUri: redis://redis-node-1:6379/

  • 或多种子:redis://redis-node-1:6379,redis-node-2:6379,redis-node-3:6379/


3. 小结

场景 configurationUri 示例
本机单节点 redis://localhost:6379/
本机集群 redis://localhost:6379/(任一台)
Docker 内多节点 redis://redis-node-1:6379/ 或多节点逗号分隔
有密码 redis://:password@host:6379/

你当前在 Ask 模式,我无法直接改仓库里的文件。若需要我帮你在项目里新建 docker-compose-redis-cluster.yml改写 config.yml 里这几项,可以切到 Agent 模式再说一下要哪种部署方式(本机 / Docker 内)。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐