Redis主从

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

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值