问题标签 [libmemcache]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - Memcache 一致性哈希、集群、PHP 代码、Ketama 等
我一整天都在尝试用 PHP 理解 Memcache 并编写代码,但我在某些方面感到困惑。我浏览了很多文章,几乎所有与此相关的 SO 问题,但找不到确切的答案。
1) 在 PHP 中创建一致散列密钥的代码是什么?我必须安装哪些库以及我真正需要做什么?有什么好文章可以看吗?
2)假设,我已经成功存储了一个一致的散列密钥,现在如果我的任何服务器关闭或添加了一个新服务器,即使我使用的是一致的散列密钥等也会有什么不同吗?
3)如果在http://ru.php.net/manual/en/memcached.addserver.php中所述的一致哈希的情况下,使用 Memcached::addServers() 而不是 Memcached::addServer() 会产生任何影响不是那是什么意思?
4) 使用上述代码是否足以进行一致哈希,然后添加/删除服务器不会对密钥产生任何影响?
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) 我是否必须以某种方式对我的密钥进行哈希处理,或者只提供我的密钥并让 Memcached 处理其余的?
请各位,我需要你们的真正支持,以便尽快了解并实施我的生产环境。你的回答会让我明白我应该更好地编码什么。
php - “php_network_getaddresses: getaddrinfo failed”是什么意思?
“php_network_getaddresses: getaddrinfo failed”是什么意思?
当我使用 memcache 时,我发现这个“什么是“php_network_getaddresses:getaddrinfo failed”的含义?” 运行 memcache 的方法时出现。
mysql - 使用 memcache_functions_mysql UDF 处理 memcache 和 mysql
我已经安装了以下软件包——
- libevent-2.0.21
- memcached-1.4.17
- libmemcached-0.34
- memcached_functions_mysql_1.1
以上都安装成功了。ldconfig -v 命令的输出(显示已包含 libmemcached 库的部分)如下:
但是,当我尝试使用 memcache_functions 附带的 install_functions.sql 将 UDF 加载到 mysql 中时,它会引发以下错误:
插件目录的内容是:
mamp - 在 MAMP Mac OX X 10.9 上安装 memcache PECL 扩展
我正在尝试在运行 10.9 (Mavericks) 的 Mac 上的 MAMP 中安装 PECL memcache 扩展。我刚刚升级到 MAMP 3.0,需要重新安装。
我在终点站跑了sudo pecl install memcache
,但我的路径似乎被塞满了,找不到php.h
。好像进去了/Applications/MAMP/bin/php/php5.5.10/include/php/main/php.h
。/Applications/MAMP/bin/php/php5.5.10/include/
不存在。
这是我的终端日志。其他人遇到过这个问题吗?
php - 在 php 中使用带有 memcache 的 setOption 函数
我正在使用memcache扩展来连接和使用 Memcache 服务器。但是现在,我想使用这个库中不存在但存在于 Memcached 中的函数,称为Memcached::setOption
将整个代码从 Memcache 移动到 Memcached 对我来说真的很困难。
有什么方法可以使用 setOption 函数的功能,而无需更改任何地方的代码?
php - 如何在 Mavericks 上安装 memcache?(MAMP)
我的机器上有 MAMP,我想为 php 安装 memcache,因为我的一个项目会抛出类似Fatal error: Class 'Memcache' not found
.
我从 appstore安装了X-Code ,并使用homebrew安装了libevent、memcached、libmemcached。
然后..
安装共享扩展:/usr/lib/php/extensions/no-debug-non-zts-20100525/
之后,我将 memcached.so 和 memcache.so 复制到我的 extension_folder:
/Applications/MAMP/bin/php/php5.5.10/lib/php/extensions/no-debug-non-zts-20121212/
并将 extension = memcached.so 添加到我的 php.ini 中。
我仍然遇到致命错误..有什么问题?
php - PHP 会话未保存在内存缓存中
使用 Amazon Linux 在 AWS 上使用 php 5.4 运行应用程序。
PHP 版本是 PHP 5.4.28。从 AWS 存储库安装的 memcache 库是 php54-pecl-memcache-3.0.8-1.11.amzn1.x86_64
我已经验证 php 正在使用 /etc/php.ini:
该设置表明我应该使用 memcache:
我可以从盒子远程登录到端点和端口并正确连接,因此实例能够连接到 memcached 服务器。
我们尝试过的事情:
- 我已经从 php.ini 文件中删除了 tcp://,这并没有什么不同——会话仍然保存在文件中。
- 我们已从 session.save_handler="memcache" 更改为 session.save_handler="memcached"
- 每次我们进行更改时,我们都会停止 httpd 服务器,然后重新启动它
- 我们甚至尝试重新启动服务器
无论我们尝试过什么,会话都存储在磁盘上的 /var/lib/php/sessions 中。是否有我遗漏的东西,或者这是一个已知的 5.4 或 AWS 问题?
python - 使用 Ketama 使用多个客户端以一致的密钥分配访问 memcache
我在使用不同的 Python 客户端从内存缓存服务器读取数据时遇到问题,然后是用于将值写入内存缓存的那个。
我有一个使用 'ketama' 行为使用 pylibmc 写入缓存的进程。我有一个不同的服务,它从 Tornado IOLoop 异步读取 memcache。我已经定制了tornado-memcache以使用python-ketama模块查找服务器,该模块只是通用 C 库 libketama 的包装器。
相关pylibmc客户端初始化代码:
有没有人做过类似的事情(多个客户)?似乎两个客户端使用的哈希连续体非常不同,或者密钥的哈希/检索方式不同(两个客户端都应该使用 md5)。
编辑: 我已经编写了测试以确认这是一个连续问题。
php - Memcached 中短超时的性能开销
我想知道 memcached 中的短超时(60 秒)是否会对性能产生任何负面影响,VS 更长的超时,但忽略返回的值(如果它是在 60 秒前存储的)。
有很多缓存未命中(如果该项目已被删除)会对性能产生影响吗?
快速说明:如果缓存未命中,我不会重新设置值,只是检查它是否存在
示例场景:
考虑在您的网站上,您希望防止双重操作的情况(例如,在您的网站上单击两次付款按钮,这会注册两次付款。在我们的案例中,我们不处理付款)。
一个简单的技巧是将用户操作在 Memcached 中保留一小段时间——当然有更好的方法可以做到这一点——并检查在最后几秒钟内是否进行了相同的调用。
现在,您可以将缓存设置为短时间,然后检查缓存中是否存在用户的相同操作。或者,将last_user_action缓存设置很长一段时间,以及操作的时间,应用程序可以根据预期的时间段检查时间。
短期的警告是有很多缓存删除(过期键)和很多缓存未命中(因为项目已被删除)。更长的时间只会使用更多的内存。
所以,我想知道大量删除(过期元素)和缓存未命中的开销。
php - Memcached / Memcache 键未过期
似乎 Memcached 的数据按预期过期,但密钥本身永不过期。为什么值为零后键仍然存在?当我运行此代码时:
取自http://docs.phalconphp.com/en/latest/api/Phalcon_Cache_Backend_Memcache.html
我可以成功地将数组保存在 $myNewRandomKey 键下。然后我在 30 秒超时后运行此代码:
并看到键仍然存在,尽管数据为 NULL,但在超时到期之前已填充该键。这对我来说似乎只对了一半。钥匙也应该已经清除了。
但是,如果我运行 $cache->delete($myNewRandomKey); 密钥将完全擦除。不一致!
底线:如果密钥没有过期或者 memcached 有问题,那么它们会随着时间的推移而增长和增长,直到导致另一种类型的头痛——系统管理员的头痛?
这些是版本,但我希望这与问题无关,并且我的期望是错误的。
向所有 SO'ers 干杯!
SL