Redis-Cluster笔记1
2018-09-06 本文已影响0人
Smart_ape
问:Redis-Cluster通过什么方式存储数据?
Redis集群通过分片的方式来保存数据库中的键值对(K/V)。整个数据库被分为16384个槽,这些槽大致被均等的分配到每一个节点上(用户可自主配置)。每个键都属于某一个槽,计算键值有效部分对应的槽,键通过CRC-16算法计算校验和,将校验和和16384取余,得出该键值对应的槽,然后经过gossip协议,周期性的和集群中的其他节点交换信息,最终整个集群都会知道key在哪一个槽上。当所有的槽都有节点处理时,集群处于上线状态,否则集群将处于下线状态。
问:是否可以将某一类的数据统一放到某一个槽上面?
可以,key的有效部分使用CRC16算法计算出哈希值,再将哈希值对16384取余,得到插槽值。什么是有效部分,key值如果包含了“{}”部分。并且“{}”中有字符。则“{}”包含的部分将作为有效部分计算槽值,如果key没有包含“{}”则将所有key值作为有效部分。所以我们可以将某一类数据的key统一prefix作为有效部分。
问:客户端查询某一key对应的value值的时候。如果访问的节点没有该key将如何处理?
访问的键所在的槽处于访问的节点,命令将会直接执行,并返回对应的值。访问的键所在的槽不在当前访问的节点,节点将返回MOVED错误,例如:-moved 233 127.0.0.1:6377 ,其中233为当前键所在槽值,IP地址表示当前槽值所在的节点,客户端将会根据返回的IP和端口信息再次发送请求重试,返回键对应的值。