redis等缓存相关的一致性hash算法
2014-09-16 10:48
295 查看
一致性哈希算法目前在缓存中用到的越来越广泛,比如说:redis
这里以两台redis服务器举例,“复制个数”为2,此时就是有四个虚拟节点(A1,A2对应A,B1,B2对应B),此时平衡性就会有很大的提高。
参考:http://blog.csdn.net/sparkliang/article/details/5279393
1应用场景:
假设目前有多台redis服务器,需要放到redis中的key值有多个,如何能让这些key值均匀的分布到这些redis服务器中,已达到充分利用redis服务器的目的,这就是一致性哈希出现的历史背景。2一致性哈希原理:
在移除或者添加一个缓存的时候,需要尽可能小的改变已存在的key的映射关系。2.1哈希环
通常计算hash值的算法是将值映射到一个32位的key值,也就是说是0到2^32-1次方范围内的值;我们可以将此想象成一个环(一个首为0,尾为2^32-1组成的环)。2.2把对象映射到哈希环中
假设现在有4个key值,通过hash值计算后在哈希环中的分布如下(此处图略,大家可以想象一下,一个环状,hash值分布在这个环中)。2.3把redis服务器映射到哈希环中
同样的道理,假设我们有四台redis服务器,同样的hash值算法,将四台redis服务器均匀的分部到哈希环中去(计算redis哈希值的算法,一般可以通过redis服务的IP或者服务器名来计算,redis就是通过IP计算的)。2.4将key值映射到redis服务器上
现在对象或者key值,以及redis服务器已经都映射到哈希环中了;现在key值沿着环的顺时针方向,当遇到第一个redis服务器的时候,就把key值放到此服务器中,剩下的key值以同样的原理被均匀分散的放到了redis服务器中。2.5redis服务器的变化
2.5.1移除redis服务器
现在考虑第二台redis服务器挂掉了,现在只需要变动第一台和第二台之前的key值,将其值放到第三台即可。2.5.2添加redis服务器
现在添加一台redis服务器,位置正好处在key1和key2之间,此时受影响的是沿此服务器逆时针到上一台服务器中间的key,这些key值将会被放到这台新的redis服务器中,而且受影响的也仅有这些。3虚拟节点
虚拟节点是为了解决平衡性的问题,例如,如果只有两台redis服务器,另外有四个key值,有可能出现四个key值都只是在一台redis服务器上,这样使得分布式很不平衡的,此时虚拟节点就是解决这个问题的。这里以两台redis服务器举例,“复制个数”为2,此时就是有四个虚拟节点(A1,A2对应A,B1,B2对应B),此时平衡性就会有很大的提高。
参考:http://blog.csdn.net/sparkliang/article/details/5279393
相关文章推荐
- 电商之梳理redis相关知识---java缓存技术
- Jeesite增加spring-data-redis缓存功能以及相关配置
- 分布式缓存的一致性hash算法
- Redis缓存对象相关
- 【ci框架】ci框架中中有关redis文件缓存相关的文件
- redis中缓存的数据与数据库数据一致性的方案
- redis系列之数据库与缓存数据一致性解决方案
- 《分布式》:paxos算法和一致性Hash算法相关记录
- CI框架中redis缓存相关操作文件示例代码
- 分布式缓存的一致性hash算法
- redis集群方案-一致性hash算法
- redis系列之数据库与缓存数据一致性解决方案
- PHP相关系列 - memcache的一致性Hash算法
- memcache与redis lru 一致性hash 缓存雪崩 缓存无底洞 永久数据被踢现象
- 分布式缓存技术memcached学习系列(四)—— 一致性hash算法原理
- 分布式缓存技术redis学习系列(五)——spring-data-redis与JedisPool的区别、使用ShardedJedisPool与spring集成的实现及一致性哈希分析
- 深入解读缓存(二)——一致性Hash算法
- 【C#|.NET】跳出一致性Hash算法 打造更高效的分布式缓存
- 深入解读缓存(二)——一致性Hash算法
- 跳出一致性Hash算法 打造更高效的分布式缓存