redis集群之Codis( 三 )
何管理的呢?Codis 将所有的 key 默认划分为 1024 个槽位(slot) , 它首先对客户端传过来的 key 进行 crc32 运算计算哈希值 , 再将 hash 后的整数值对 1024 这个整数进行取模得到一个余数 , 这个余数就是对应 key 的槽位 。
每个槽位都会唯一映射到后面的多个 Redis 实例之一 , Codis 会在内存维护槽位和Redis 实例的映射关系 。 这样有了上面 key 对应的槽位 , 那么它应该转发到哪个 Redis 实例
就很明确了 。
hash = crc32(command.key)
slot_index = hash % 1024
redis = slots[slot_index
.redis
redis.do(command)
槽位数量默认是 1024 , 它是可以配置的 , 如果集群节点比较多 , 建议将这个数值配置大
一些 , 比如 2048、4096 。
不同的 Codis 实例之间槽位关系如何同步?
如果 Codis 的槽位映射关系只存储在内存里 , 那么不同的 Codis 实例之间的槽位关系就无法得到同步 。 所以 Codis 还需要一个分布式配置存储数据库专门用来持久化槽位关系 。
Codis 开始使用 ZooKeeper , 后来连 etcd 也一块支持了 。
推荐阅读
- 腾讯云数据库Redis鼎立支持:腾讯会议完成300人在线会议
- 蚂蚁花呗五面(高级):分布式+MySQL+HashMap+线程池+MQ+Redis
- Java Redis 你了解多少?
- 腾讯云数据库Redis助力百万企业远程办公
- 2020年大厂面试开发者需知:redis有什么用?
- Redis缓存知识问题
- BAT一线互联网常考面试题:Spring+并发编程+JVM+设计模式+Redis
- 读懂这一篇,集群节点不下线
- 在大数据开发里Zookeeper有什么用?多台服务器集群的安装与配置
- 粉丝福利!不要小看redis,任何一家公司的招聘信息都包含一段redis的需求!