7 redis集群

7 redis集群

  • 集群:集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。

redis集群

  1. 分类:软件层面与硬件层面
    软件层面:一台电脑开启多个redis服务
    硬件层面:多台电脑开启了redis服务
    redis需要版本3.0以上,需要ruby语言运行环境
    安装ruby后,需要配置:
    gem install redis
  • redis目录下创建节点文件
  • 将redis下面的文件复制到节点文件夹下面
  • 修改节点文件下的文件配置windows.conf
    port 7000
    bind 172.16.179.130
    daemonize yes
    pidfile 7000.pid
    cluster-enabled yes
    cluster-config-file 7000_node.conf #为该节点配置信息,服务启动后会生成该文件
    cluster-node-timeout 15000 #创建集群时不会超时
    appendonly yes
    
  • 使用创建的配置文件启动redis服务
    或者使用bat文件启动
    #每个节点目录都要有
    title redis-7000 #节点名
    redis-server.exe redis.windows.conf
    
  • 安装集群脚本redis-trib,创建集群
    ruby redis-trib.rb create --replicas 1 127.0.0.1:9000 127.0.0.1:9001 127.0.0.1:9002 127.0.0.1:9003 127.0.0.1:9004 127.0.0.1:9005
  • 连接集群的指令:
    redis-cli.exe -h 主IP -c -p 端口号
  • 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个或以上的主节点,否则在创建集群时会失败,并且当存 活的主节点数⼩于总节点数的⼀半时,整个集群就⽆法提供服务了
    from rediscluster import *
    if __name__ == '__main__':
      try:
          # 构建所有的节点,Redis会使⽤CRC16算法,将键和值写到某个节点上
          startup_nodes = [
              {'host': '192.168.26.128', 'port': '7000'},
              {'host': '192.168.26.130', 'port': '7003'},
              {'host': '192.168.26.128', 'port': '7001'},
          ]
          # 构建StrictRedisCluster对象
          src=StrictRedisCluster(startup_nodes=startup_nodes,decode_responses=True)
          # 设置键为name、值为itheima的数据
          result=src.set('name','itheima')
          print(result)
          # 获取键为name
          name = src.get('name')
          print(name)
      except Exception as e:
          print(e)
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值