redis缓存策略

摘要:
常见的策略包括“余数法”和“一致HASH算法”。Redis存储键,值是一对一的,Remainder方法使用HASH表的数据长度来计算HASHODE的余数。剩余部分用作直接设置或访问缓存的索引。然后根据要缓存的数据的密钥计算密钥的HashCode。然后,在环上,顺时针找到最接近密钥哈希值的缓存服务器节点,并将该值存储在服务器节点上。上述一致性哈希算法解决了分布式缓存集群中的容量扩展问题。

常用策略有“求留余数法”和“一致性HASH算法”

redis存储的是key,value键值对

一、求留余数法

使用HASH表数据长度对HASHCODE求余数,余数作为索引,使用该余数,直接设置或访问缓存。

计算key的HashCode

redis缓存策略第1张

缺点:增加服务器,由于除数不一样了,之前缓存的数据都没办法访问了,即不支持热部署【扩展】

二、一致性HASH算法

一致性HASH算法通过一个叫做一致性HASH环的数据结构,实现KEY到缓存服务器的HASH映射。

redis缓存策略第2张

算法过程如下:

先构造一个0到232的整数环,然后将服务器节点的Hash值,放在该环上(可以理解为将你的ip做hash,将ip的HashCode放在环上)。然后根据需要缓存的数据的Key,计算Key的HashCode,然后在环上,顺时针查找距离这个Key的Hash值最近的缓存服务器的节点,然后将Value,存储到该服务器节点上。

这是当缓存服务器集群需要扩容的时候,只需要将新加入的节点的HashCode,放入一致性Hash环中,由于Key是顺时针查找距离最近的节点,因此,新加入的节点只影响整个环中的一小段。

请参见上图,如果我们新加入的服务器节点Node3,在Node1和Node2之间,如下图:

redis缓存策略第3张

那么受影响的区域,只是Node2到Node3之间(顺时针)的缓存,此区间的缓存数据,加入节点之前是缓存在Node1上的,现在需要重新缓存到Node3上面。

具体应用中,这个长度为232的整数环,通常使用二叉查找树实现,Hash查找过程实际上是在二叉树中查找不小于查找树的最小值。当然,这个二叉树的最右边的叶子节点和最左边的叶子节点相连接,构成环。

通过上面的一致性Hash算法,就解决了分布式缓存集群中扩容的问题。然而上面的方法,仍然有问题。我们已经说过,上面的架构,只影响了Node2到Node3之间的区域(顺时针),那么Node3,也只是分摊了Node1节点的压力,而Node0和Node2的访问压力,并没有变化。也就是说:我们加入了硬件投入,却起到了很小的效果。

一致性Hash算法的进化版

所以说,我们还需要对上面的做法,进行改进。

上述问题是,一致性Hash算法带来的负载均衡不均衡。我们可以通过增加虚拟层来实现。

我们将每台缓存服务器,虚拟为一组虚拟缓存服务器,将虚拟服务器的Hash值,放置在Hash环上,Key在环上先找到虚拟服务器节点,再得到物理服务器的信息。

redis缓存策略第4张

这样,一台服务器节点,被环中多个虚拟节点所代表,且多个节点均匀分配。很显然,每个物理节点对应的虚拟节点越多,各个物理节点之间的负载越均衡,新加入物理服务器对原有的物理服务器的影响越保持一致。

免责声明:文章转载自《redis缓存策略》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用WIC组件转换图片格式Android 对话框弹出位置和透明度的设置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ArcGIS切片技巧及注意事项三之高级工具应用

1 - 修改已经发布缓存服务的缓存级别 如上图所示,红箱子里有很多缓存管理的工具,这里我们要用的是里面的管理地图服务器缓存比例。 下图中,服务器输入本机,然后选择我们需要调整比例尺级别的服务,这个工具适用于我们的缓存已经发布,例如我们已经发布到500比例尺,现在我们想将缓存发布到200比例尺,这里我们追加一个200比例尺,然后在到我们服务缓存发布界面单独...

译文:前端性能的重要性 The Importance of Frontend Performance

欢迎訪问我的主页。最新的文章我会首先公布在个人主页上: http://blog.guaidm.com/shocky/ 原书下载地址:http://pan.baidu.com/s/1pJocRwB        在我的web开发生涯里,大部分时候我都是作为一个后台project师。这样一来,我投入了非常多的精力去研究、练习怎样通过后台优化来提升项目产品...

redis主从机制

1.redis replication的核心机制 (1).redis采用异步方式复制数据到slave节点,不过redis 2.8开始,slave node会周期性地确认自己每次复制的数据量 (2).一个master node是可以配置多个slave node的 (3).slave node也可以连接其他的slave node (4).slave node做...

nginx 配置的一些参数

/etc/nginx/nginx.conf worker_rlimit_nofile#;      --指定一个worker 进程所能打开的最大文件描述符数量worker_rlimit_sigpending#;    --指定每个用户能够发往进程的信号的数量 性能优化相关的配置  1.work_processes      --worker 进程的个数,通...

centos使用yum下载至本地及使用本地缓存安装包

centos使用yum下载至本地及使用本地缓存安装包  yum install --downloadonly --downloaddir=/home/java java https://www.iteye.com/blog/mywaylife-2435856 https://blog.csdn.net/weixin_30861797/article/det...

redis中的hash、列表、集合操作

一、hash操作 数据结构:key:{k1:v1, k2:v2, k3:v3} 类似Python中的字典 如:info : {name: lina, age: 22, sex: F} hset key k1 v1 设置/创建(字典) hget key k1 获取key1 中 k1对应的值 批量设置获取 hmset key k2 v2 k3 v3 同时...