cuijiemin 发表于 2013-1-25 21:05:10

Memcached集群及hash算法

memcached是业内使用最多,最稳定的内存缓存服务器,danga的java_memcached-client也是比较稳定的一款java分布式集群客户端。
其实现原理是利用hash算法实现服务器定位,保证读写都在同一台。memcached集群数据互补,没有主从和备份,这是很多公司节约成本的做法。所以在一台服务器宕机的情况下,读写都无法进行,转到nosql数据库或RDBMS,并在服务器重新启动后容错工具容错就行。
所以memcached的部署和客户端还是很简单。memcached协议基于文本,也不难。至于hash算法实现如下:
private long getHash( String key, Integer hashCode ) {if ( hashCode != null ) {if ( hashingAlg == CONSISTENT_HASH )return hashCode.longValue() & 0xffffffffL;elsereturn hashCode.longValue();}else {switch ( hashingAlg ) {case NATIVE_HASH:return (long)key.hashCode();case OLD_COMPAT_HASH:return origCompatHashingAlg( key );case NEW_COMPAT_HASH:return newCompatHashingAlg( key );case CONSISTENT_HASH:return md5HashingAlg( key );default:// use the native hash as a defaulthashingAlg = NATIVE_HASH;return (long)key.hashCode();}}}
private long getBucket( String key, Integer hashCode ) {long hc = getHash( key, hashCode );if ( this.hashingAlg == CONSISTENT_HASH ) {return findPointFor( hc );}else {long bucket = hc % buckets.size();if ( bucket < 0 ) bucket *= -1;return bucket;}}
页: [1]
查看完整版本: Memcached集群及hash算法