微服务day10-Redis面试篇
Redis主从
搭建主从集群
建立集群时主节点会生成同一的replicationID,交给各个从节点。
集群中的缓冲区是一个环型数组,即若从节点宕机时间过长,可能导致命令被覆盖。
主从集群优化
哨兵原理
哨兵是一个集群来确保哨兵不出现问题。
服务状态监控
选举新主节点
故障转移
哨兵原理小结
搭建哨兵集群
操作文档
Redis分片
搭建分片集群
第三小章,详细操作https://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
算法对key
做hash
运算,得到的结果与16384
取余,就计算出了这个key
的slot
值。然后到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
这个key
的hash slot
是5474
,而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>