【golang】分布式缓存 – 一致性哈希算法

之前也了解到过一致性哈希算法,但是没有用go实现过,刚好最近看GeeCache,动手实现下一致性哈希算法

正文:

我们先来想下一致性哈希算法的数据结构含有哪些内容:

1.map 用来存储虚拟节点对应的真实节点,是一个映射表

2.hash 哈希函数

3.key 哈希环,存储所有虚拟节点

4.replicas 虚拟节点的倍数

了解过一致性哈希算法的朋友,应该是能够理解为什么要有上面的内容,下面我们用代码实现下:

下面,我们实现获取节点的方法:

将key经过hash运算,在哈希环上顺时针找到第一个节点,存入

添加节点的方法

以上就是一致性哈希的实现方法,也挺好理解的。记录下~

| 不骄不躁,保持学习

Original: https://www.cnblogs.com/freeyw/p/16554169.html
Author: 要坚持的girl
Title: 【golang】分布式缓存 – 一致性哈希算法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/516227/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • go微服务框架Kratos笔记(二)引入zap日志库

    zap日志库是一款高性能的开源日志库,提供了结构化日志记录和printf风格的日志记录 go get -u go.uber.org/zap 参考官方文档中描述,为了方便业务自适配不…

    Go语言 2023年5月25日
    045
  • Go语言 context包源码学习

    你必须非常努力,才能看起来毫不费力!微信搜索公众号[ 漫漫Coding路 ],一起From Zero To Hero ! 日常 Go 开发中,Context 包是用的最多的一个了,…

    Go语言 2023年5月25日
    062
  • gRPC,爆赞

    gRPC 这项技术真是太棒了,接口约束严格,性能还高,在 k8s 和很多微服务框架中都有应用。 作为一名程序员,学就对了。 之前用 Python 写过一些 gRPC 服务,现在准备…

    Go语言 2023年5月25日
    052
  • 支持首次触发的 Go Ticker

    促使我写这篇文章主要是在写一个关于虚拟货币账户监控的项目时使用 Ticker 的问题。 Ticker 的问题 如果用过 Ticker 的朋友会知道,创建 Ticker 后并不会马上…

    Go语言 2023年5月25日
    062
  • golang 中 sync.Mutex 的实现

    mutex 主要有两个 method: Lock() 和 Unlock() Lock() 可以通过一个 CAS 操作来实现 func (m *Mutex) Lock() { for…

    Go语言 2023年5月25日
    053
  • golang 标准库template的代码生成

    最近,随着 antd Pro v5 的升级,将项目进行了升级,现在生成的都是 ts 代码。这个项目的自动生成代码都是基于 golang 的标准库 template 的,所以这篇博客…

    Go语言 2023年5月25日
    039
  • Go编译过程

    一、 Go编译流程 二、过程说明 词法解析 读取Go源文件,将字符序列转换为符号(token)序列,比如将”:=”转换为_Define 代码中的标识符、关键…

    Go语言 2023年5月25日
    053
  • 从零开始搭建GoLang语言开发环境

    更多干货文章,更多最新文章,欢迎到作者主博客 菜鸟厚非 一、安装 GoLang 1.1 下载 首先访问 https://go.dev/dl/ 下载 GoLang,下载完成后双击安装…

    Go语言 2023年5月25日
    061
  • go实用编程-算法篇 -归并排序

    /**** // i: the begin index of old sub-array, j: the begin index of even sub-array | array…

    Go语言 2023年5月25日
    065
  • Go 语言快速开发入门

    需求 开发的步骤 linux下如何开发Go程序 MAC下如何开发Go程序 Golang执行流程分析 编译和运行说明 Go程序开发的注意事项 Go语言的转义字符(escapechar…

    Go语言 2023年5月25日
    073
  • Go能实现AOP吗?

    hello~大家好,我是小楼,今天分享的话题是 Go是否能实现AOP?…

    Go语言 2023年5月25日
    070
  • 新作:轻量级Golang IoC容器——iocgo

    习惯于Java或者C#开发的人应该对控制反转与依赖注入应该再熟悉不过了。在Java平台有鼎鼎大名的Spring框架,在C#平台有Autofac,Unity,Windsor等,我当年…

    Go语言 2023年5月25日
    064
  • 【Docker】使用Docker Client和Docker Go SDK为容器分配GPU资源

    深度学习的环境配置通常是一项比较麻烦的工作,尤其是在多个用户共享的服务器上。虽然conda集成了virtualenv这样的工具用来隔离不同的依赖环境,但这种解决方案仍然没办法统一地…

    Go语言 2023年5月25日
    067
  • 许式伟:Go+ 演进之路

    7 月 10 日,一年一度的 ECUG Con 2022 在线上圆满举行。许式伟作为七牛云 CEO、ECUG 社区发起人、Go+ 语言发明人,为大家来带了《Go+ 演进之路》的主题…

    Go语言 2023年5月25日
    079
  • GO语言HTTP请求案例–httpUtil.go

    package util import (“bytes”“fmt”“io/ioutil”“log…

    Go语言 2023年5月29日
    054
  • sync:二. 延迟初始化(once)

    sync.Once 是 Go 标准库提供的使函数只执行一次的实现。作用与 init 函数类似,但有区别。在某些情况下预先初始化一个变量会增加函数的启动延迟,如果实际执行时可能用不上…

    Go语言 2023年5月25日
    066
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球