分片机制
Redis单台问题
- 使用redis单台时内存会明显不足.如果一味的扩容内存,则运行的效率低.
- 如果redis单台服务器宕机.
Redis分片(分区)介绍
- 核心特点:实现了redis内存的扩容.
- 说明:使用多个redis节点,共同为用户提供服务.内存空间翻倍. 用户使用时当做一个整体.并且内存保存的数据不一.
分片搭建
Hash一致性算法
概念:同一个字符串hash值是一致的.
个人理解:
Hash一致性算法的目的是为了在多节点的缓存中,
- 尽可能的将数据平均分配到每个节点中去(平衡性)
- 查询数据时遵循单调性,即去顺时针最近的节点中找到数据(单调性)
- 尽可能减少相同内容在缓存中多次映射,产生原因是分布式环境中不同终端看到的缓存区范围不同(分散性)
- 尽可能减少不同终端对特定缓存区映射不同内容,这是分散的另一个角度,产生原因也是分布式环境中不同终端看到的缓存区范围不同,多个终端可能会看到同一块缓存区,而且映射地址不同(负载)
特性
-
平衡性(Balance):平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。很多哈希算法都能够满足这一条件。 -
单调性(Monotonicity):单调性是指如果已经有一些内容通过哈希分派到了相应的缓冲中,又有新的缓冲加入到系统中。哈希的结果应能够保证原有已分配的内容可以被映射到原有的或者新的缓冲中去,而不会被映射到旧的缓冲集合中的其他缓冲区。 -
分散性(Spread):在分布式环境中,终端有可能看不到所有的缓冲,而是只能看到其中的一部分。当终端希望通过哈希过程将内容映射到缓冲上时,由于不同终端所见的缓冲范围有可能不同,从而导致哈希的结果不一致,最终的结果是相同的内容被不同的终端映射到不同的缓冲区中。这种情况显然是应该避免的,因为它导致相同内容被存储到不同缓冲中去,降低了系统存储的效率。分散性的定义就是上述情况发生的严重程度。好的哈希算法应能够尽量避免不一致的情况发生,也就是尽量降低分散性。 -
负载(Load):负载问题实际上是从另一个角度看待分散性问题。既然不同的终端可能将相同的内容映射到不同的缓冲区中,那么对于一个特定的缓冲区而言,也可能被不同的用户映射为不同的内容。与分散性一样,这种情况也是应当避免的,因此好的哈希算法应能够尽量降低缓冲的负荷。
参考文档
1、https://blog.csdn.net/wlccomeon/article/details/86553831
2、https://www.jianshu.com/p/6ad87a1f070e
3、https://www.cnblogs.com/shijingxiang/articles/11491721.html
4、https://blog.csdn.net/skh2015java/article/details/79143192