3.go开源groupcache项目——consistenthash代码

notbaron · · 1095 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

3.go开源groupcache项目——consistenthash代码

       Consistenthash代码是提供ring hash的实现。

       包含两个文件consistenthash.go和consistenthash_test.go。

       包名叫做consistenthash

定义了一个Hash 函数,一个Map结构体。

1     Map结构体

定义一个hash变量,为函数返回无符号整数

一个INT的变量

一个INT数组

和一个map类型变量hashMap.

2     New函数

入参为一个整形和一个函数。

整形replicas作用是往里add的时候需要复制的数量,其实也是多少键映射一个哈希值的含义在里面。

创建一个Map结构体。其中结构体中的hashMap使用make创建。

如果函数为nil,则赋值为crc32.ChecksumIEEE

3     IsEmpty函数

判断Map结构体中keys的数量是否为0.

4     Add函数

入参为可变字符串。

将键增加到hash中。

通过range来获取入参,然后

将入参根据定义的哈希函数进行哈希得到哈希值。

将Map结构体中的keys整形数组增加一个值,该哈希值。

同时将入参变量加入到Map结构体中的hashMap变量中(map结构体),入参为键,哈希值为键值。

5     Get函数

入参为一个键值(字符串),根据提供的键来获取接近的字符串。

先判断是否为空。

然后根据根据字符串来计算得到哈希值。

然后根据sort包中的search函数,Search()方法使用“二分查找”算法来搜索某指定切片[0:n],并返回能够使f(i)=true的最小的i(0<=i<n)值,并且会假定,如果f(i)=true,则f(i+1)=true,即对于切片[0:n],i之前的切片元素会使f()函数返回false,i及i之后的元素会使f()函数返回true。但是,当在切片中无法找到时f(i)=true的i时(此时切片元素都不能使f()函数返回true),Search()方法会返回n(而不是返回-1)。

如果没找到,则返回0.

最后返回Map结构体中hashMap变量中的对应的哈希值。

 


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:notbaron

查看原文:3.go开源groupcache项目——consistenthash代码

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1095 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传