php - 与 PHP 和 Python 共享 Memcache

标签 php python memcached flags

我正在尝试在 Python 和 PHP 之间共享 Memcache key 。 Python 写入 key ,PHP 读取它。我正在使用 Cakephp 框架、php-pecl-memcache(不是 php-pecl-memcached)和 python-memcache 所有 python 库。

Python:

  mc = memcache.Client( ["127.0.0.1:11211"])
  key = "key1"
  value = 1323779849
  mc.set(key, value)

PHP:

  echo Cache::read('key1', 'memcached');

PHP 无法读取变量,我收到奇怪的“MemcachePool::get() [http://php.net/memcachepool.get]: 无法解压缩数据”错误;我怀疑这与每个库中设置不同的 memcached 标志有关。

这是我 telnet 到 memcached 时发生的情况:

Python 设置 key :

 get key1
 VALUE key1 1 12
 1323779849
 .
 END

PHP 设置 key :

 get key1
 VALUE key 1 0 12
 1323779849
 END
  • 有没有办法覆盖这些标志并“做你自己的事情”?
  • 是否有可以更好地协同工作的 php/python memcache 库?
  • 或者,有没有一种简单的方法可以在 python/php 之间创建公共(public)内存空间?

最佳答案

终于可以用了。很多东西没有按预期工作。

  1. 一个问题是 php 和 python 使用不同的标志来执行不同的操作。 在全 python 或全 php 解决方案中不是问题,但对于环境间通信来说是一个真正的问题。一个有用的资源是 http://www.hjp.at/zettel/m/memcached_flags.rxml ,这表明 python-memcache 将长整数标记为“2”,而 php-memcache 无法理解,因此出现压缩错误。我修改了 python-memcache 以在 set 函数中包含“标志覆盖”。这个变量只是强制使用特定的标志,而不管 python memcache 认为它应该是什么。这使我能够将 Int 从 2 重新标记为 0。我将对 python-memcache 的当前版本进行 prob 分支并将其提交到 Github。这允许我将 python long int 标志 (2) 强制设置为 php 可以理解的值 (0)。

  2. CakePhp 1.3.3 之前的版本将所有 key 存储在 memcached 中,并附加一个 key_expires 键,标记为 768 等。如果没有这个附加 key ,它将无法找到您要查找的 key 。值得庆幸的是,这种行为在后来的 Cakephp 版本中被转储了(我只是升级到 1.3.13),现在运行良好。

关于php - 与 PHP 和 Python 共享 Memcache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8490312/

相关文章:

PHP curl 错误 : unable to use client certificate (no key found or wrong pass phrase? )

python - 哪些技术限制阻止了 python 中格雷厄姆数的计算?

ASP.NET 数据缓存?内存缓存等价物

c# - 使用静态 MemcachedClient 的问题

php - 告诉 Paypal 自动处理每月付款

php - PHP 中的 if-else 与多个条件

php - 一个表单有多个 ID

python - 如果 lambda 返回无 Pandas,则删除行

python - 如何在 Pytorch 中为图像及​​其掩模制作自定义数据集?

caching - Memcached、Redis 或 Couchbase