go实现GeeCache(一致性哈希)

文章讲述了在分布式缓存系统中,如何通过一致性哈希算法解决数据获取效率和一致性问题,以及如何处理数据倾斜现象,通过创建虚拟节点实现数据更均匀的分布。作者还给出了节点信息结构和操作代码实现的概述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先对于分布式的缓存来说,假设有10个节点用来存储数据,现在我要获取某个key的值,最笨的方法就是对十个节点每个节点都进行请求,但是这样的请求不如将所有的数据都集成到一个节点中,还节省了请求发送和接受的时间,同时也保证了数据的一致性(假设请求了10个节点,有多个节点返回了结果,并且结果都还不一样,这样就无法确认那个是正确的数据)

这个时候就需要一致性哈希算法

一致性hash算法的主要思想就是假设有编号1-100的数据,现在有10个节点来存放这100条数据,比较好的想法就是第一个节点管理1-10,第二个节点管理11-20.......依次类推。一致性hash算法也差不多是这样,但是没有这样的平均,首先我们计算所有key的hash值,并排好序形成一个环,对于所有的节点我们同样也计算他的hash值(一般是计算节点名称的hash值)然后关于key的归属,假设有key的hash值1 3 5 8 9 有三个节点的hash 2 5 8,那么对于每个数据的归属都是通过二分查找不小于当前key的hash值的最小节点hash对应的节点,如果大于所有节点那么就是最小的那个节点,所以节点2存储1 9,节点5存储3 5,节点8存储8。

数据倾斜问题:指的就是假设有数据1 3 5 8 9,有节点2 3 4,这个时候一半以上的数据都在节点2上,节点4没有任何的数据,这个时候我们就创建多个虚拟节点,一个实际的节点对应多个虚拟节点,虚拟节点的创建可以通过节点名+数字的方式求得多个hash值,通过增加散点数量来使数据尽量均匀的分布

然后是代码的实现

首先是定义一个结构体,主要用于存放节点的信息

添加节点和获取数据所在的节点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值