初探redis集群

集群原理

  1. 哈希槽:redis共16384个哈希槽,数据会根据CRC16(key) mod 16384,决定存储在哪个哈希槽,这种将数据存储在不同节点不同哈希槽的行为被称为数据分片
  2. 从节点是没有哈希槽的,只有主节点才有
  3. 存储/读取的时候,先进行运算,如果计算的槽位在当前节点则直接进行存取,如果不在则进行转发

集群搭建(windows)

  1. 准备多个redis环境,修改各自的redis.windows.conf, 关注如下配置
    a. port
    b. 打开注释cluster-config-file yes
    c. cluster-config-file 设置为不同的名字
    d. cluster-node-timeout 设置超时时间
    ------以下为需要配置静态环境信息使用的参数------
    e. cluster-announce-ip(可选),当前节点的ip
    f. cluster-announce-port(可选),当前节点的端口
    g. cluster-announce-bus-port(可选),当前节点的通信端口
  2. 执行安装命令
    redis-server.exe --service-install redis.windows.conf --service-name redis7001****
  3. 启动集群(官方建议满足高可用至少6个节点,三主三从)
    a. 确保各个节点的服务已经启动
    b. redis-cli --cluster -a 密码 create 127.0.0.1:6379 127.0.0.1:7000 127.0.0.1:7001 --cluster-replicas 1
    其中cluster-replicas用来设置从节点的个数
    参考链接:https://zhuanlan.zhihu.com/p/563422863?utm_id=0

SpringBoot集成redis集群
springboot级成redis比较简单,直接增加集群的配置即可:
spring.redis.cluster.max-redirects=3
spring.redis.cluster.nodes=127.0.0.1:6379,127.0.0.1:7000,127.0.0.1:7001

Python集成redis集群
通过redis引入RedisCluster(低版本的redis包貌似不支持集群)
建立集群连接之后,其余的操作和单节点redis是一样的。
rc = RedisCluster(host='127.0.0.1', port=7000)

C++集成redis集群
目前在github上找到两个开源包,待编译验证:
https://github.com/eyjian/r3c
https://github.com/zhengshuxin/acl

FAQ

  1. 当备份数据的时候,是否需要在集群的每个节点执行save命令
    不需要,连接其中一个节点执行save即可
  2. 可否使用keys查询键的数量
    官方不建议,因为会暂停redis,影响性能(可考虑单独存储一个键来计数,待验证)
  3. redis可存储的key的数量
    官方给出的数据是2^32个,实际测试中单节点最低能满足2.5亿个键值
  4. 集群中是否支持批量操作,如mget,mset
    不支持
posted @ 2023-09-09 10:59  gengone  阅读(13)  评论(0编辑  收藏  举报