关于一致性hash算法的意义以及其相对于简单求余法(除数求余法)的好处,查看第六章 memcached剖析

 

注意:真实的hash环的数据结构是二叉树,这里为了简便使用了列表List

1、一致性hash算法的使用地方

  • memcached服务器
  • Jedis分片机制

 

2、真实服务器节点没有虚拟化的一致性hash算法实现

ServerNode:真实服务器节点

 1 package hash;
 2 
 3 /**
 4  * server节点
 5  */
 6 public class ServerNode {
 7     private String serverName;
 8     private long serverHash;
 9 
10     public String getServerName() {
11         return serverName;
12     }
13 
14     public void setServerName(String serverName) {
15         this.serverName = serverName;
16     }
17 
18     public long getServerHash() {
19         return serverHash;
20     }
21 
22     public void setServerHash(long serverHash) {
23         this.serverHash = serverHash;
24     }
25 
26     /**
27      * 下边重写hashcode()和equals()是为了在删除节点的时候只根据传入的serverName删除即可
28      */
29     @Override
30     public int hashCode() {
31         final int prime = 31;
32         int result = 1;
33         result = prime * result
34                 + ((serverName == null) ? 0 : serverName.hashCode());
35         return result;
36     }
37 
38     @Override
39     public boolean equals(Object obj) {
40         if (this == obj)
41             return true;
42         if (obj == null)
43             return false;
44         if (getClass() != obj.getClass())
45             return false;
46         ServerNode other = (ServerNode) obj;
47         if (serverName == null) {
48             if (other.serverName != null)
49                 return false;
50         } else if (!serverName.equals(other.serverName))
51             return false;
52         return true;
53     }
54     
55     
56 }
View Code

相关文章:

  • 2021-05-15
  • 2022-03-06
  • 2022-12-23
  • 2021-06-19
猜你喜欢
  • 2021-06-08
  • 2022-12-23
  • 2023-03-24
  • 2021-12-03
  • 2021-07-05
  • 2021-08-19
相关资源
相似解决方案