- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我一整天都在尝试使用 PHP 理解 Memcache 并为其编写代码,但我在某些地方感到困惑。我浏览了很多文章和几乎所有与此相关的 SO 问题,但找不到确切答案。
1) 在 PHP 中创建一致散列键的代码是什么?我必须安装哪些库以及我真正需要做什么?有什么好的文章可以浏览吗?
2) 假设,我已经成功存储了一个一致的哈希 key ,现在如果我的任何服务器关闭或添加了一个新服务器,即使我使用的是一致的哈希 key 等,它会有什么不同吗?
3) 使用 Memcached::addServers() 而不是 Memcached::addServer() 会在一致性哈希的情况下产生任何差异,如 http://ru.php.net/manual/en/memcached.addserver.php 中所述如果不是那是什么意思?
$m = new Memcached();
$m->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
$m->addServers($servers);
4) 使用上面的代码是否足以实现一致性哈希,然后添加/删除服务器不会对 key 产生任何影响?
5) 什么是 Ketama 图书馆?如果 Memcached::DISTRIBUTION_CONSISTENT 可以更好地工作,为什么还要使用它?以下 http://www.last.fm/user/RJ/journal/2007/04/10/rz_libketama_-_a_consistent_hashing_algo_for_memcache_clients
6) 我是否必须以某种方式散列我的 key ,或者只提供我的 key 并让 Memcached 处理其余部分?
伙计们,我需要你们真正的支持来尽快理解并在我的生产环境中实现它。您的回答会让我明白我应该如何更好地编写代码。
最佳答案
那么问题很多,我尽量一一解答。
1) 在 PHP 中创建一致散列键的代码是什么?我必须安装哪些库以及我真正需要做什么?有什么好的文章可以看吗?
好吧,尽管您对代码提出了质疑,但这段代码对于 PHP 中的一致性哈希已经足够了。您只需要使用您的 LibMemcached 客户端库即可将 Consistent Hashing 与 Memcached 结合使用。只需在您的代码下方添加以下行
$m->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);
如果您想使用一致性哈希,强烈建议启用此选项,并且在未来的版本中可能会默认启用。按照这个来了解一堆常量及其定义,以便更好地理解 http://www.php.net/manual/en/memcached.constants.php
虽然更好的方法可以通过在 php.ini 中全局设置来获得更好的性能(我还没有测试过。)
memcache.hash_strategy = consistent;
如 http://blog.fedecarg.com/2008/12/24/memcached-consistent-hashing-mechanism/ 中的建议那么您不需要在每个 memcached 调用中单独指定。默认值为 Standard,使用模数计算,如果您添加或删除服务器,这将无济于事。
2) 假设,我已经成功存储了一个一致的哈希 key ,现在如果我的任何服务器关闭或添加了一个新服务器,即使我使用的是一致的哈希 key 等,它会有什么不同吗?
尽管正如 lsmooth 所说,删除或添加服务器时总会产生影响,但假设将 1 台服务器添加到 3 台服务器中的影响很小,它将大约 1/4 = 25% 丢失 key ,因此服务器越多,机会越少丢失 key 。
3) 使用 Memcached::addServers() 而不是 Memcached::addServer() 会在一致性哈希的情况下产生任何差异,如 http://ru.php.net/manual/en/memcached.addserver.php 中所述如果不是那是什么意思?
正如 Ismooth 所说。他是对的。最好使用 addServers。请注意,必须在使用 setOption 设置所有选项后调用 «addServers()»,否则这些选项将不适用于这些服务器。
4) 使用上面的代码是否足以实现一致性哈希,然后添加/删除服务器不会对 key 产生任何影响?
已在问题 1 的答案中回答。
5) 什么是 Ketama 图书馆?如果 Memcached::DISTRIBUTION_CONSISTENT 可以更好地工作,为什么还要使用它? http://www.last.fm/user/RJ/journal/2007/04/10/rz_libketama_-_a_consistent_hashing_algo_for_memcache_clients
LibKetama 是 Consistent Hashing key 分发算法所基于的库。因此,在 Memcached 中使用一致性哈希意味着使用 LibKetama,这就是事实。
6) 我是否必须以某种方式散列我的 key ,或者只提供我的 key 并让 Memcached 处理其余部分?
Yvan 说 “Memcached 客户端将自动散列您的 key 。假设您有 3 个服务器,A、B 和 C 以及 3 个 key «K1» 到 «K9»。例如,客户端散列算法将存储如下:K1/K2/K3存放在A,K4/K5/K6存放在B,K7/K8/K9存放在C。如果你的服务器B宕机,它的keys(K4/K5/K6)会被平均存放在剩下的2台服务器(A和C)上。比如K4会去A,K5/K6会去C服务器。
这只是一个例子,不是真正的算法。您可以使用函数 $memcached->getServerByKey( 'K4') 找出哪个 key 在哪个服务器上。然后让一台服务器宕机,并查看 getServerByKey() 在这次失败后发送给您的内容”。在 http://www.dugwood.com/895442.html#dwCmtForm。
关于php - Memcache 一致性哈希、集群、PHP 代码、Ketama 以及所有相关内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20862857/
我正在为我的按钮使用 onClick 功能。我的按钮代码如下所示: Button 1 Button 2 我的 JS 函数如下所示: function fadeNext(selectedId, spee
首先,我想提一下,我理解每个人在不提供至少一些试验或错误的情况下提出问题的感受,但这纯粹是一种知识需求,话虽如此,我会去提前问。 我一直无法弄清楚如何将保存在 MySQL 表中的 600-1000 个
我想做的事情有点令人困惑,而且我英语不太好,所以我先把代码贴在这里,这样你就可以很容易地理解: 以下是表单内容: Testing for Stackoverflow Option1
我学习 SDL 二维编程已有一段时间了,现在我想创建一个结合使用 SDL 和 OpenGL 的程序。我是这样设置的: SDL_Init(SDL_INIT_VIDEO); window = SDL_Cr
我创建了 2 个 data-* 标签。数据类别和数据标签。单击 href 标签后,我想复制该数据类别和数据标签以形成输入。我的代码是:
我想用 CSS 换行。我正在使用内容。 td:before { content: "Test\A Test2"; } 它不工作。如何正确
这个问题已经有答案了: Java Class that implements Map and keeps insertion order? (8 个回答) 已关闭 6 年前。 我有一个 HashMap
我正在尝试使用 JMeter 执行端到端测试。测试涉及写入SFTP文件夹并从另一个SFTP文件夹读取写入操作生成的文件。 我能够使用 JMeter SSH SFTP 插件连接到 SFTP 文件夹,并能
您好,我有带有标准服务器端 Servlet 的 GWT 客户端。 我可以从 GWT 客户端上传文件并在服务器端读取其内容 我可以将其作为字符串发送回客户端 但是 我有 GWT FormPanel与操作
我在 Plone 4.3.9 中创建了一个自定义类型的灵巧性,称为 PersonalPage,必须只允许在特定文件夹中使用 成员文件夹/用户文件夹 . 在他的 FTI 中,默认情况下 False .
在新(更新)版本的应用程序中更改小部件布局的最佳做法是什么?当新版本提供更新、更好的小部件时,如何处理现有小部件? 最佳答案 我认为您必须向用户显示一个弹出窗口,说明“此版本中的新功能”并要求他们重新
在我的应用程序中,我使用支持 View 寻呼机和 PagerTabStrip。进入查看寻呼机我有一些 fragment ,进入其中一个我正在使用支持卡片 View 。运行应用程序后,所有卡片 View
我有以下布局文件。基本上我有谷歌地图,在左上角我有一个 TextView,我需要在其中每 15 秒保持一次计数器以刷新 map 。布局很好。
我使用如下结构: HashMap > > OverallMap 如果我这样做: OverallMap . clear ( ) clear() 丢弃的所有内容(HashMap 对象、Integer 对
我在数据库中有 1000 张图像。在页面加载时,我随机显示 60 张图片,当用户滚动时,我通过 AJAX 请求添加 20 张图片。 第一种方法 我所做的是将所有图像加载到一个容器中,然后隐藏所有图像并
我正在使用 woocommerce 创建一个网上商店。 我想在每个产品上添加一个包含产品信息的表格,例如颜色、交货时间等等。 但是当我添加这张表时。本产品消失后的所有内容。 我的表的代码: td {
This question already has an answer here: What does an empty value for the CSS property content do?
因此,我正在与我的 friend 一起为 Google Chrome 开发一个扩展程序,对于大多数功能(即日历、设置等),我们打开一个模式,这样我们就不必重定向到另一个页面。当您在内容之外单击时,我们
我将可变高度的 CSS 框设置为在更大的 div 中向左浮动。现在我想添加一个标题,其中文本在框的左侧垂直显示(旋转 90 度),如下面的链接所示(抱歉还不能发布图片)。 http://imagesh
相关页面位于 www.codykrauskopf.com/circus 如果您查看我页面的右侧,在半透明容器和浏览器窗口边缘之间有一个间隙。我看了看,出于某种原因,wrap、main、content
我是一名优秀的程序员,十分优秀!