ketama 清纯版(参考 http://www.metabrew.com/article/libketama-consistent-hashing-algo-memcached-clients,https://github.com/RJ/ketama/blob/master/java_ketama/SockIOPool.java) java实现:
/**
* Calculates the ketama hash value for a string
* @param s
* @return
*/
public
static
Long
md5HashingAlg
(
String
key
)
{
if
(
md5
==
null
)
{
try
{
md5
=
MessageDigest
.
getInstance
(
"MD5"
);
}
catch
(
NoSuchAlgorithmException
e
)
{
log
.
error
(
"++++ no md5 algorythm found"
);
throw
new
IllegalStateException
(
"++++ no md5 algorythm found"
);
}
}
md5
.
reset
();
md5
.
update
(
key
.
getBytes
());
byte
[]
bKey
=
md5
.
digest
();
long
res
=
((
long
)(
bKey
[
3
]&
0
xFF
)
<<
24
)
|
((
long
)(
bKey
[
2
]&
0
xFF
)
<<
16
)
|
((
long
)(
bKey
[
1
]&
0
xFF
)
<<
8
)
|
(
long
)(
bKey
[
0
]&
0
xFF
);
return
res
;
}