分享人:张泉良
1.背景介绍
2.知识剖析
3.常见问题
4.编码实战
5.扩展思考
6.参考文献
7.更多讨论
为什么需要集群
Redis单线程特性,多请求顺序执行,单个耗时的操作会阻塞后续的操作
单机内存有限
某些特殊业务,带宽压力较大
单点问题,缺乏高可用性
不能动态扩容
(1) 什么是集群
集群是是指将多台服务器集中在一起,每台服务器都实现相同的业务, 做相同的事情。但是每台服务器并不是缺一不可, 存在的作用主要是缓解并发压力和单点故障转移问题。 可以利用一些廉价的符合工业标准的硬件构造高性能的系统。实现:高扩展、高性能、低成本、高可用!(2) redis集群
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多, 包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施。把多个redis实例整合在一起,形成一个集群, 也就是将数据分散到集群的多台机器上。当数据量过大一个主机放不下的时候,就需要对数据进行分区, 将key按照一定的规则进行计算,并将key对应的value分配到指定的Redis实例上
一致哈希性
(1)、redis集群解决方案----------------客户端静态分片
需要 smart-client 支持,在业务程序端根据预先设置的路由规则进行分片,从而实现对多个redis实例的分布式访问(2)、redis集群解决方案--------------Proxy分片
(3)、redis集群解决方案--------------------Redis Cluster
数据分布:预分片
去中心化:
(1):为什么哈希槽的数量固定为16384?
由于使用CRC16算法,该算法可以产生2^16-1=65535个值1、redis的一个节点的心跳信息中需要携带该节点的所有配置信息,而16K大小的槽数量所需要的内存为2K,如果使用65K个槽,这部分空间将达到8K,心跳信息就会很庞大。
2. Redis集群中主节点的数量基本不可能超过1000个
3. Redis主节点的配置信息中,它所负责的哈希槽是通过一张bitmap的形式来保存的,N表示节点数,如果节点数很少,而哈希槽数量很多的话 但是如果bitmap的填充率slots/N很高的话,bitmap的压缩率就很低
(2):redis怎么选择适合的持久化策略
1、LRU缓存(临时缓存)
2.持久化缓存
http://redisdoc.com/topic/cluster-tutorial.html
https://blog.csdn.net/cywosp/article/details/23397179
https://juejin.im/post/5a707f4d5188255a8817f5b1
https://blog.csdn.net/u010648555/article/details/79427608
欢迎大家讨论