首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Memcache哈希生成

Memcache哈希生成
EN

Stack Overflow用户
提问于 2013-01-09 04:53:43
回答 3查看 452关注 0票数 1

我得到了一个示例脚本,它看起来像这样:

代码语言:javascript
复制
$memcache = new Memcache;
$memcache->addServer('memcache_host', 11211);
$memcache->addServer('memcache_host2', 11211);

如果我使用now

代码语言:javascript
复制
$memcache->set('var_key', 'some really big variable');

当然,键get/value被存储(只在一台服务器上)。但是当我对Memcache Serverlist重新排序时,它会重新创建缓存。我注意到它总是使用第二个服务器...但是为什么呢?

我只想知道并理解存储的哈希是如何生成的。哪些因素与散列和服务器选择相关?

我找不到任何关于。

致以问候!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-12 08:37:03

答案是:

代码语言:javascript
复制
crc32($KEY) % Server.length

因此,在我的例子中,我有两台服务器,示例密钥为"var_key“。

crc32('var_key') %2

结果是0。所以第一个服务器是幸运的!

crc32('var_key_bit_longer_and_longer') %2

在本例中,选择第二个服务器(结果为1)。

正如我们所见,以下因素是相关的:

  • The Key
  • Server count
  • Order of Server

(服务器的关键服务器计数和顺序)

对于标准的散列策略,这就是选择服务器的方式。

票数 1
EN

Stack Overflow用户

发布于 2013-01-10 00:15:40

我不确定如何实现CRC客户端库来对密钥运行hashing algorithm works,并对列表中的实例数量进行取模操作,以便从列表中为set/get选择一个实例

更好的是,您可以使用weight选项增加在50-50中选择的每个服务器的更改

代码语言:javascript
复制
$memcache = new Memcache;
$memcache->addServer('memcache_host', 11211,true,50);
$memcache->addServer('memcache_host2', 11211,true,50);
票数 0
EN

Stack Overflow用户

发布于 2013-01-10 00:33:38

看看Cache的_hashfunc(),它使用键作为唯一的参数。

代码语言:javascript
复制
sub _hashfunc {
    return (crc32($_[0]) >> 16) & 0x7fff;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14223808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档