缓存分片中的哈希算法与一致性哈希算法

什么是缓存分片

在高并发场景下,缓存往往成为了瓶颈。这时候,我们可以通过缓存数据分片的方式来解决问题。所谓缓存数据分片,就是将缓存数据按照一定的规则分成多个片段,每个片段由不同的缓存节点负责。这样做有两个好处:

第一,能够降低单个缓存节点的负载压力,提高缓存的并发性能。如果单个缓存节点存储大量数据,在高并发的访问中容易造成缓存击穿或缓存雪崩等问题,从而导致系统性能下降。采用缓存数据分片后,每个缓存节点存储的数据量变少,可以有效避免这些问题的发生。

第二,缩短缓存查找时间,提高缓存的命中率。在缓存中查找数据需要一定的时间,如果缓存的数据量很大,查找时间就会变长,从而降低缓存的命中率。采用缓存数据分片后,每个缓存节点存储的数据比较少,缩短了查找时间,提高了缓存的命中率。

在缓存分片中,常用的2种算法:哈希算法与一致性哈希算法。

Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。常见的Hash函数有:MD4,MD5,SHA-1等

哈希算法

哈希算法通过某种哈希算法散列得到一个值,按该值将数据分配到集群响应节点进行缓存,哈希算法在扩展缓存节点时,取模参数也需要更改,并且所有节点的缓存都受影响。

一致性哈希算法

一致性哈希算法将整个哈希值空间映射成一个按顺时针方向组织的虚拟圆环,使用哈希算法算出数据哈希值,然后根据哈希值的位置沿圆环顺时针查找,将数据分配到第一个遇到的集群节点进行缓存。

实现思路:

1.对不同节点服务器的某些参数(mac地址、IP地址等)进行hash计算,用hash值对2^32取模,确定当前服务器落在环某一个节点上

2.数据存储时,对指定的key进行hash计算,然后用hash值对2^32取模,确定数据落在环的哪一个节点上,得到环的节点值之后,顺时针方向找到遇到的第一台服务器,这台服务器就是存储当前数据的地方。

一致性哈希算法有两大优点:

减少节点:服务器2发生故障,存在上面的数据都需要迁移,那么,此时只需要迁移服务器1与服务器2之间的数据B、C到服务器3即可。

增加节点:在数据B、C之间添加服务器4,那么只需要迁移存储在服务器2上的数据B到服务器4即可。

1)可扩展性。一致性哈希算法保证了增加或减少服务器时,数据存储的改变最少,相比传统哈希算法大大节省了数据移动的开销。

2) 更好地适应数据的快速增长。

相关推荐
不去幼儿园1 分钟前
【启发式算法】Dijkstra算法详细介绍(Python)
人工智能·python·算法·机器学习·启发式算法·图搜索算法
serve the people10 分钟前
神经网络中梯度计算求和公式求导问题
神经网络·算法·机器学习
闻缺陷则喜何志丹15 分钟前
【二分查找、滑动窗口】P10389 [蓝桥杯 2024 省 A] 成绩统计|普及+
c++·算法·蓝桥杯·二分查找·滑动窗口·洛谷·成绩
乔冠宇1 小时前
蓝桥杯算法——铠甲合体
算法·职场和发展·蓝桥杯
商bol451 小时前
算阶,jdk和idea的安装
数据结构·c++·算法
迷迭所归处1 小时前
C语言 —— 愿文明如薪火般灿烂 - 函数递归
c语言·开发语言·算法
努力学习java的哈吉米大王2 小时前
Redis数据结构,渐进式遍历,数据库管理
数据库·redis·缓存
柠檬鲨_4 小时前
C语言100天练习题【记录本】
c语言·数据结构·算法
float_六七4 小时前
二叉树三种遍历方式——前序、中序、后序(C++)
开发语言·c++·算法
CYRUS_STUDIO9 小时前
常用加解密算法介绍
算法·安全·逆向