Redis实战篇——搭建主从复制

Redis实战篇------搭建主从复制

1.Redis主从

单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。

1.1.主从集群结构

下图就是一个简单的 Redis 主从集群结构:

如图所示,集群中有一个 master 节点、两个 slave 节点(现在叫replica)。当我们通过 Redis 的 Java 客户端访问主从集群时,应该做好路由:

  • 如果是写操作,应该访问 master 节点,master 会自动将数据同步给两个 slave 节点
  • 如果是读操作,建议访问各个 slave 节点,从而分担并发压力

1.2.搭建主从集群

我们会在同一个虚拟机中利用3个Docker容器来搭建主从集群,容器信息如下:

容器名 Value ip : 端口
r1 master 192.168.xx.xxx:7001
r2 slave 192.168.xx.xxx:7002
r3 slave 192.168.xx.xxx:7003

1.2.1.启动多个Redis实例

我们利用 docker 进行部署

docker-compose 如下

不会使用 docker 可以查看以下文章:

一文带你安装 Centos 安装 Docker

Docker 常用命令大全!!

docker-compose.yaml 文件如下:

yaml 复制代码
version: "3.2"

services:
  r1:
    image: redis
    container_name: r1
    network_mode: "host"
    entrypoint: ["redis-server", "--port", "7001"]
  r2:
    image: redis
    container_name: r2
    network_mode: "host"
    entrypoint: ["redis-server", "--port", "7002"]
  r3:
    image: redis
    container_name: r3
    network_mode: "host"
    entrypoint: ["redis-server", "--port", "7003"]

上传至 /root/redis 目录下:

执行命令,搭建集群:

bash 复制代码
docker compose up -d

查看 docker 容器,可以看到都正常启动了

查看端口映射:

1.2.2.建立集群

虽然我们启动了3个 Redis 实例,但是它们并没有形成主从关系。我们需要通过命令来配置主从关系:

bash 复制代码
# Redis5.0以前
slaveof <masterip> <masterport>
# Redis5.0以后
replicaof <masterip> <masterport>

有临时和永久两种模式:

  • 永久生效:在 redis.conf 文件中利用 slaveof 命令指定master节点
  • 临时生效:直接利用 redis-cli 控制台输入 slaveof 命令,指定 master 节点

我们测试临时模式,首先连接 r2 ,让其以 r1 为master

bash 复制代码
# 连接r2
docker exec -it r2 redis-cli -p 7002
# 认r1主,也就是7001
slaveof 192.168.xx.xxx 7001

使用info replication 命令查看 r2 状态,可以看到他的 master 已经是 7001

有个小问题,那么我们还没连接的时候,他的身份是什么呢?

这里我们连接 r3 查看他的状态中的 role

没错,他是他自己的主人!

然后连接 r3 ,让他变成 r1slave 。。。

bash 复制代码
# 连接r3
docker exec -it r3 redis-cli -p 7003
# 认r1主,也就是7001
slaveof 192.168.xx.xxx 7001

然后连接 r1 ,查看集群状态:

bash 复制代码
# 连接r1
docker exec -it r1 redis-cli -p 7001
# 查看集群状态
info replication

可以看到,当前节点 r1:7001 的角色是 master,有两个slave与其连接:

  • slave0:port7002,也就是 r2 节点
  • slave1:port7003,也就是 r3 节点

1.2.3.测试

依次在 r1r2r3 节点上执行下面命令:

bash 复制代码
set num 123
get num

结果如下:

那么我们可以在从节点 set 吗?

显然是不行的 ~

至此,我们就部署了简单的 Redis 的主从复制 ~

参考:

https://www.bilibili.com/video/BV1S142197x7?p=142&vd_source=f586bbf89de5904ba5a05a8c1d18f1c4

相关推荐
尤物程序猿11 小时前
【2025面试Java常问八股之redis】zset数据结构的实现,跳表和B+树的对比
数据结构·redis·面试
冰^13 小时前
MySQL VS SQL Server:优缺点全解析
数据库·数据仓库·redis·sql·mysql·json·数据库开发
zru_960213 小时前
Docker 部署 Redis:快速搭建高效缓存服务
redis·缓存·docker
axinawang14 小时前
springboot整合redis实现缓存
spring boot·redis·缓存
Spring小子14 小时前
黑马点评商户查询缓存--缓存更新策略
java·数据库·redis·后端
柯34916 小时前
Redis的过期删除策略和内存淘汰策略
数据库·redis·lfu·lru
bing_15817 小时前
Redis 的单线程模型对微服务意味着什么?需要注意哪些潜在瓶颈?
数据库·redis·微服务
小黑蛋学java17 小时前
Redis-cli常用参数及功能的详细说明
redis
听闻风很好吃18 小时前
Redis高级数据类型解析(二)——Set、Sorted Set与Geo实战指南
数据库·redis·缓存
YGGP18 小时前
【每日八股】复习 Redis Day2:Redis 的持久化(下)
redis