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

来源:互联网 发布:BOM是哪个软件 编辑:程序博客网 时间:2024/06/02 00:28

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变量中的对应的哈希值。

 

0 0
原创粉丝点击