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; else return 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 default hashingAlg = 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; } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值