Redis主从

本文介绍了Redis的主从配置,用于实现读写分离。通过在一台服务器上设置主Redis实例(master),并配置其他服务器作为从实例(slave),可以提高网站的读取性能。主库用于写操作,从库用于读操作,比例约为10:1。配置过程包括修改Redis配置文件,重启服务以及验证主从关系。此外,还展示了Python如何实现基于Redis的读写分离,通过定义一个类MSRedis自动选择读写库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis主从

主从概念

  • ⼀个master可以拥有多个slave,⼀个slave⼜可以拥有多个slave,如此下去,形成了强⼤的多级服务器集群架构

  • master用来写数据,slave用来读数据,经统计:网站的读写比率是10:1

  • 通过主从配置可以实现读写分离

在这里插入图片描述

  • master和slave都是一个redis实例(redis服务)

主从配置

配置主

  • 查看当前主机的ip地址

    ifconfig

在这里插入图片描述

  • 修改/etc/redis/redis.conf文件

    sudo vi redis.conf
    bind 192.168.26.128

  • 重启redis服务

    sudo service redis stop
    sudo redis-server redis.conf

配置从

  • 复制/etc/redis/redis.conf文件

    sudo cp redis.conf ./slave.conf

  • 修改redis/slave.conf文件

    sudo vi slave.conf

  • 编辑内容

    bind 192.168.26.128
    slaveof 192.168.26.128 6379
    port 6378

  • redis服务

    sudo redis-server slave.conf

  • 查看主从关系

    redis-cli -h 192.168.26.128 info Replication

在这里插入图片描述

数据操作

  • 在master和slave分别执⾏info命令,查看输出信息 进入主客户端

    redis-cli -h 192.168.26.128 -p 6379

  • 进入从的客户端

    redis-cli -h 192.168.26.128 -p 6378

  • 在master上写数据

    set aa aa

在这里插入图片描述

  • 在slave上读数据

    get aa

Python实现读写分离

from redis import StrictRedis

class MSRedis(object):
    '''读写分离客户端(只针对程序中用到的命令)'''

    def __init__(self, conf):
        self.master = StrictRedis(**conf['Master'])
        self.slave = StrictRedis(**conf['Slave'])
        self.read_commands = [
            'ttl', 'exist', 'expire', 'get', 'keys',
            'hget', 'hgetall', 'hkeys', 'hmget',
            'sismember', 'smembers', 'sdiff', 'sinter', 'sunion',
            'zrevrange', 'zrevrangebyscore', 'zrevrank', 'zscore'
        ]

    def __getattribute__(self, name):
        if name in ['master', 'slave', 'read_commands']:
            return object.__getattribute__(self, name)
        elif name in self.read_commands:
            print('选择了从库')
            return self.slave.__getattribute__(name)  # =>  self.slave.get()
        else:
            print('选择了主库')
            return self.master.__getattribute__(name)  # =>  self.master.get()


REDIS = {
    'Master': {
        'host': '192.168.126.133', # 主机地址
        'port': '6379', # 主机端口
        'db': 0
    },
    'Slave': {
        'host': '192.168.126.133', # 从机地址
        'port': '6378',# 从机端口
        'db': 0
    },
}
rds = MSRedis(REDIS)

# 读
read = rds.get('name')
print(read)
# 写
write = rds.set('age', 12)
print(write)

### Redis 主从配置详解 #### 1. 主从架构概述 Redis主从架构是一种常见的高可用性和扩展性的解决方案。在这种架构下,数据可以从一个 Redis 实例(称为 Master)复制到其他实例(称为 Slave)。这种设计可以用于提高读取性能、提供冗余备份以及支持故障转移[^1]。 #### 2. 主从配置流程 以下是 Redis 主从配置的具体方法: - **主节点配置** 在主节点的 `redis.conf` 文件中,无需特别设置即可作为主节点运行。只需确保该节点正常启动并监听指定端口即可[^5]。 - **从节点配置** 修改从节点的 `redis.conf` 文件,在文件中添加如下配置项: ```conf slaveof <master-ip> <master-port> ``` 这里的 `<master-ip>` 和 `<master-port>` 是主节点的 IP 地址和端口号。保存配置后重启 Redis 服务以使更改生效[^3]。 - **动态配置** 如果不想修改配置文件,也可以通过命令行动态设置从节点: ```bash SLAVEOF <master-ip> <master-port> ``` #### 3. 测试主从同步 完成上述配置后,可以通过以下方式验证主从同步是否成功: - 向主节点写入一些键值对。 - 登录从节点查看这些键值对是否存在。 如果存在,则说明主从同步已正确建立[^4]。 #### 4. 故障排查 当遇到主从同步失败的情况时,可按照以下步骤进行排查: - 确认网络连通性:检查主从节点之间的网络连接状态。 - 查看日志文件:分析主从节点的日志文件,定位可能存在的错误信息。 - 数据一致性校验:对比主从节点的数据集,确认是否有不一致之处[^2]。 --- ### 示例代码 以下是一个简单的 Python 脚本,展示如何与 Redis 主从环境交互: ```python import redis # 连接至主节点 master = redis.StrictRedis(host='172.16.104.55', port=6379, decode_responses=True) # 设置键值对 master.set('key', 'value') # 连接至从节点 slave = redis.StrictRedis(host='172.16.104.56', port=6379, decode_responses=True) # 获取键值对 print(slave.get('key')) ``` 此脚本假设主节点位于 `172.16.104.55:6379`,而从节点位于 `172.16.104.56:6379`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值