Redis主从

搭建主从集群

建立集群时主节点会生成同一的replicationID,交给各个从节点。 

集群中的缓冲区是一个环型数组,即若从节点宕机时间过长,可能导致命令被覆盖。

主从集群优化

哨兵原理

哨兵是一个集群来确保哨兵不出现问题。

服务状态监控

选举新主节点

故障转移

哨兵原理小结

搭建哨兵集群

操作文档

Redis分片

搭建分片集群

第三小章,详细操作icon-default.png?t=O83Ahttps://b11et3un53m.feishu.cn/wiki/Jck7w4GBSia4sukQn1vc9s3anMf

redis-cli --cluster create --cluster-replicas 1 \
192.168.21.101:7001 192.168.21.101:7002 192.168.21.101:7003 \
192.168.21.101:7004 192.168.21.101:7005 192.168.21.101:7006

散列插槽

[root@server02 redis-cluster]# docker exec -it r1 bash
root@server02:/data# redis-cli -p 7001
127.0.0.1:7001> set user jack
(error) MOVED 5474 192.168.21.101:7002
127.0.0.1:7001>

当我们读写数据时,Redis基于CRC16 算法对keyhash运算,得到的结果与16384取余,就计算出了这个keyslot值。然后到slot所在的Redis节点执行读写操作。

不过hash slot的计算也分两种情况:

  • key中包含{}时,根据{}之间的字符串计算hash slot

  • key中不包含{}时,则根据整个key字符串计算hash slot

例如:

  • key是user,则根据user来计算hash slot

  • key是user:{age},则根据age来计算hash slot

测试:进入r1容器,先于7001建立连接,写入数据。

[root@server02 redis-cluster]# docker exec -it r1 bash
root@server02:/data# redis-cli -p 7001
127.0.0.1:7001> set user jack
(error) MOVED 5474 192.168.21.101:7002
127.0.0.1:7001>

出现包错:

提示我们MOVED 5474,其实就是经过计算,得出user这个keyhash slot5474,而5474是在7002节点,不能在7001上写入!!

连接集群时,要加-c参数:

# 通过7001连接集群
redis-cli -c -p 7001
# 存入数据
set user jack

可知它会根据插槽不同跳转到不同的主节点:

root@server02:/data# redis-cli -c -p 7001
127.0.0.1:7001> set user jack
-> Redirected to slot [5474] located at 192.168.21.101:7002
OK
192.168.21.101:7002>

如果要将不同的key存放到同一个主从集群中需要再key前添加{}其中添加相同的数据。:

127.0.0.1:7001> set {user}:name tom
-> Redirected to slot [5474] located at 192.168.21.101:7002
OK
192.168.21.101:7002> set {user}:age 21
OK
192.168.21.101:7002>

Redis数据结构

RedisObject

SkipList

SortedSet

Redis内存回收

过期KEY的处理

内存淘汰策略

Redis缓冲问题

缓冲一致性

缓冲穿透

缓存雪崩

缓存击穿

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部