redis搭建主从、redis搭建集群、redis中StrictRedis()、RedisCluster()方法与python交互

一、StrictRedis方法

创建对象,指定host、port、db与指定的服务器端口连接,其中默认host为localhost、port为6379、db为0,不同类型调用的实例方法不同,与redis命令一致,方法需要的参数与命令参数一致

from redis import StrictRedis
sr =StrictRedis(host='localhost', port=6379, db=0)
# 简写:sr = StrictRedis()

二、pycharm使用StrictRedis方法对string类型的数据进行增删改查

方法说明

  • set(key,value):存在则修改,不存在则新增,若成功返回True,否则返回false
  • get(key):获取,若存在返回key所对应的value,否则返回None
  • delete(key):删除key及所对应值,若成功返回受影响的键名,否则返回0
  • keys():获取所有键,支持正则表达式
from redis import StrictRedis
if __name__ == '__main__':
    try:   # 连接获取外部资源要使用try
        sr = StrictRedis()  # 创建对象,与redis服务器建立连接

        add = sr.set('name', 'YY')   # 增加name键,值为YY,若添加成功返回true,否则返回false
        print('是否增加成功:', add)  # 输出结果

        get = sr.get('name')  # 获取键为name的值,若存在返回值,否则返回None
        print('name的值为:', get)

        modify = sr.set('name', 'YX')   # 修改name键的值为YX
        print('修改后name的值为:', sr.get('name'))

        print('获取到的键为:', sr.keys())  # 获取所有键,aa为之前命令行添加的

        delete = sr.delete('name')
        delete2 = sr.delete('nam')
        print('删除成功返回%d,删除失败返回%d' % (delete, delete2))

    except Exception as e:
        print(e)

输出:
若redis服务未启动,将输出如下错误
Error 10061 connecting to localhost:6379. 由于目标计算机积极拒绝,无法连接。

启动后输出:
是否增加成功: True
name的值为: b'YY'
修改后name的值为: b'YX'
获取到的键为: [b'aa', b'name']
删除成功返回1,删除失败返回0

三、搭建主从

主从理解 

  • 一个master主可以拥有多个slave从,一个slave又可有多个slave,由此形成多级服务器集群架构
  • master主用来写数据
  • slave从用来读数据
  • 通过主从配置可以实现读写分离,网站读写比例为10:1

3.1主配置

1.使用ifconfig命令查看ip

2.切换至/etc/redis目录下,执行命令sudo vi redis.conf进入文件

3.修改bind绑定的ip

4.按esc退出编辑,进入命令行模式,执行命令:wq保存并退出

3.2 配置从

1.复制redis.conf命名为slave.conf

3.执行命令sudo redis-server slave.conf启动redis服务

2.打开slave.conf并修改slave.conf中的以下内容

1.修改端口:port 6378
2.找到指定位置新增:slaveof 192.168.76.128 6379

4.查看主从关系

执行命令:redis-cli -h 192.168.76.128 info replication

3.3 数据操作

1.执行命令进入master主客户端

redis-cli -h 192.168.76.128 -p 6379

2.执行命令进入slave从客户端 

redis-cli -h 192.168.76.128 -p 6378

四、搭建集群

主从可以一主多从,但若同时访问量过大则不再适用,如大型企业在全国会有很多服务器(华东、华南、华中……)

集群:是一组相互独立的、通过高速网络互联的计算机,其构成了一个组,并以单一系统模式加以管理,一个客户与集群相互作用时,集群像是一个独立的服务器,集群配置是用于提高可用性和可缩放性,当请求到来时先由负载均衡服务器处理,将请求转发到另外一台服务器上

分类

  • 软件层面:只有一台电脑,在该电脑上启动了多个redis服务
  • 硬件层面:有多台实体电脑,每台电脑上都启动了一个redis或多个redis服务

4.1 创建conf文件

在Desktop目录下创建cluster文件夹,并创建7000.conf文件

4.2 在conf文件中添加内容

在7000.conf文件中编辑并添加如下内容

# 端口号
port 7000   
# 访问的ip
bind 192.168.76.128  
# 是否以守护进程(后台)方式运行
daemonize yes   
# pid文件
pidfile 7000.pid   
# 是否使用集群
cluster-enabled yes   
# 集群文件
cluster-config-file 7000_node.conf   
 # 集群的超时时间
cluster-node-timeout 15000  
# 备份相关
appendonly yes

4.3 复制 conf文件

 复制文件7000.conf并分别命名为7001.conf、7002.conf、7003.conf、7004.conf和7005.conf

4.3 修改conf文件 

进入各个复制的文件,分别修改所选值

如7001.conf文件修改如下 

4.4 使用conf配置文件启动redis服务 

切换至cluster目录,运行redis-server加载这6个配置文件

查看进程

4.5 创建集群

若redis为5.0以上版本,可直接跳过该步骤,改用redis-cli创建集群

切换至redis安装目录下的src目录下,执行以下指令将redis-trib.rb拷贝到/usr/local/bin/目录下,redis-trib.r用于创建集群,复制后可在任何目录下调用次命令

sudo cp redis-trib.rb /usr/local/bin/

运行命令创建集群

redis-trib.rb create --replicas 1 192.168.76.128:7000 192.168.76.128:7001 192.168.76.128:7002 192.168.76.128:7003 192.168.76.128:7004 192.168.76.128:7005

可能运行失败,报警告warning:redis-trib.rb is not longer available,直接按提示即可

4.6 改用以下命令创建集群

redis-cli --cluster create 192.168.76.128:7000 192.168.76.128:7001 192.168.76.128:7002 192.168.76.128:7003 192.168.76.128:7004 192.168.76.128:7005 --cluster-replicas 1 

如下,创建的一主一从,三个节点

 至此集群搭建成功

4.6 数据验证

从上图看看出,搭建的master主服务器为7000、7001、7002,slave从服务器为7003、7004、7005

连接7000,-c表示连接到集群

连接命令:redis-cli -h 192.168.76.128 -p 7000 -c

 写入数据,自动跳到了7001,写入成功

说明

  • redis cluster的设计具有去中心化和去中间件的特性,即集群中的每个节点都是平等的关系每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,且连接保持活跃,由此保证了我们只需要连接集群中的任意⼀个节点,就可以获取到其他节点的数据
  • Redis集群没有用传统的⼀致性哈希来分配数据,而是采用⼀种叫做哈希槽 (hash slot)的方式。redis cluster默认分配了16384个slot,当我们 set⼀个key时,会用CRC16算法来取模得到所属的slot,然后将这个key 分到哈希槽区间的节点上,具体算法为:CRC16(key) % 16384。所以我们在测试set和get的时候,直接跳转到了7000端口的节点
  • Redis集群会把数据存在⼀个master节点,然后在这个master和其对应的salve之间进行数据同步。当读取数据时,也根据⼀致性哈希算法到对应的master节点获取数据。只有当⼀个master挂掉之后,才会启动⼀个对应的salve节点,充当master
  • 需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的⼀半时,整个集群就无法提供服务了

五、pycharm使用RedisCluster()方法与集群交互实现增删改查

安装redis-py-cluster命令:pip install redis-py-cluster 

from rediscluster import RedisCluster
if __name__ == '__main__':
    try:
        # 构建所有的节点,redis会用CRC16算法将键和值写到某个节点上
        nodes = [
            {'host': '192.168.76.128', 'port': '7000'},
            {'host': '192.168.76.128', 'port': '7001'},
            {'host': '192.168.76.128', 'port': '7002'}
        ]
        src = RedisCluster(startup_nodes=nodes, decode_responses=True)  # 构建RedisCluster对象
        result = src.set('tel', 99999)   # 新增key为tel的值
        print(result)
        tel = src.get('tel')   # 获取key为tel的值
        print(tel)
    except Exception as e:
        print(e)

输出:
True
99999

程序运行前后命令行查看值 

学习导航:http://xqnav.top/

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

learning-striving

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值