/**
* Internal private hashing method.
*
* This is the original hashing algorithm from other clients.
* Found to be slow and have poor distribution.
*
* @param key String to hash
* @return hashCode for this string using our own hashing algorithm
*/
private static long origCompatHashingAlg( String key ) {
long hash = 0;
char[] cArr = key.toCharArray();
for ( int i = 0; i < cArr.length; ++i ) {
hash = (hash * 33) + cArr[i];
}
return hash;
}
/**
* Internal private hashing method.
*
* This is the new hashing algorithm from other clients.
* Found to be fast and have very good distribution.
*
* UPDATE: This is dog slow under java
*
* @param key
* @return
*/
private static long newCompatHashingAlg( String key ) {
CRC32 checksum = new CRC32();
checksum.update( key.getBytes() );
long crc = checksum.getValue();
return (crc >> 16) & 0x7fff;
}
/**
* Internal private hashing method.
*
* MD5 based hash algorithm for use in the consistent
* hashing approach.
*
* @param key
* @return
*/
private static long md5HashingAlg( String key ) {
MessageDigest md5 = MD5.get();
md5.reset();
md5.update( key.getBytes() );
byte[] bKey = md5.digest();
long res = ((long)(bKey[3]&0xFF) << 24) | ((long)(bKey[2]&0xFF) << 16) | ((long)(bKey[1]&0xFF) << 8) | (long)(bKey[0]&0xFF);
return res;
}
/**
* Returns a bucket to check for a given key.
*
* @param key String key cache is stored under
* @return int bucket
*/
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();
}
}
}
默认是NATIVE_HASH这种。
分享到:
相关推荐
分布式一致性哈希是一种解决在分布式缓存系统中如何高效、稳定地分配数据的算法,尤其在Memcache等缓存服务中广泛应用。它旨在确保当缓存集群中的节点增减时,对现有数据的映射影响最小,从而降低数据迁移和系统压力...
为了解决这个问题,一致性Hash算法被引入。一致性Hash可以更好地处理服务器数量变化时的数据迁移,确保在添加或删除服务器时,只有一小部分数据需要重新分配,从而降低对缓存命中率的影响。 总的来说,MemCache是...
- **memcache.hash_strategy** 和 **memcache.hash_function**: 控制key到服务器的映射策略及哈希函数,通过设置不同的策略和函数,可以优化数据分布和负载均衡,比如标准哈希策略和CRC32算法通常用于提高一致性。...
在这个PHP实现的案例中,一致性哈希被用于解决Memcache分布式缓存系统的问题。Memcache是常见的内存缓存系统,它提供快速的数据存储和检索服务。在分布式环境中,多个Memcache服务器可以协同工作,存储和处理大量...
- 分布式存储:Memcached采用分散式哈希(Distributed Hash Table,DHT)策略,将数据根据键(key)均匀地分布到各个服务器节点上,从而实现数据的分布式存储。 - 内存存储:所有数据都存储在内存中,提供高速访问...
Tair采用一致性哈希算法实现数据的分布式存储。每个数据项根据其主键哈希后映射到Q个桶(bucket)之一,config server按照预设策略将这些桶均匀分配到各个data server上。由于数据按照主键哈希分布,每个桶中的数据...
Memcached采用分布式哈希(Distributed Hash Table, DHT)策略来存放数据。每个节点根据预设的算法(如一致性哈希)负责一部分键值对的存储,当新的节点加入或节点下线时,数据分布能够相对平滑地调整,避免大规模...
- hash.h\hash.c:实现server端的哈希算法。 - assoc.h\assoc.c:管理server端的哈希表。 - items.h\items.c:管理server端的对象。 - slabs.h\slabs.c:负责内存管理。 - memcached.h\memcached.c:主要逻辑及main...
- 一致性哈希算法在分布式缓存系统中至关重要,因为它能有效地在节点增删时保持数据分布的稳定。 - 对于memcache,可以在php.ini配置文件中设置`Memcache.hash_strategy`为`consistent`,以及`memcache.hash_...
`memcache.hash_strategy`用于选择Memcache的哈希策略,`consistent`是一种哈希算法,能够保持同一个key在同一个服务器上的存储,适合分布式部署。`session.save_path`指定了memcache服务器的地址和端口,如果有多个...
Memcache是一款高性能的分布式内存对象缓存系统,专门用于存储键值对,通过在内存中维护一个巨大的哈希表,它可以对数据库查询结果、文件等数据进行缓存。Memcache的目的是为了减轻数据库压力,加速动态Web应用,...
3. **一致性Hash算法的实现原理** 一致性哈希算法通过将哈希值映射到一个环形空间上,使得数据的分布相对均匀,即使在节点增减时,只有少数数据需要迁移。这样保证了系统的稳定性和效率。 4. **Memcached与Redis的...
memcache eacache Tair 消息队列 jms Queue Topic kafka 持久 复制 Stream Partition rocketMQ RabbitMQ ActiveMQ 常用开源框架 Spring Spring MVC Spring WebFlow spring tx aop ioc Struts...
* 缓存数据库 Memcache 的集群模式和一致性 Hash * Redis 的基本数据类型 网络模块 * 一个 URL 请求的过程 * HTTP 状态码的意义(502、406、302) * 三次握手和四次挥手 * Vi 编辑器的两种模式和跳转到最后一行 * ...
Memcached的分布式实现是在客户端,通过特定算法决定数据应存储在哪个节点,形成分布式架构。 **Redis**,与Memcached相似,支持更多类型的value,如字符串、链表、集合和有序集合,且支持原子性操作。此外,Redis...
它采用hash表存储数据,通过哈希算法快速定位数据,提供快速访问。 3. **分布式特性**:memcached通过一致性哈希策略实现数据的分布式存储,可以在多台服务器之间分发负载,确保高可用性和可扩展性。 4. **缓存...