1

我正在将应用程序从 PHP PECL-Memcache客户端切换到PECL-Memcached,但遇到了麻烦。

似乎如果我从 PECL-Memcached 设置一个 INT 值,PECL-Memcache 就无法读取它。我看到类似的东西:

MemcachePool::get(): Failed to unserialize data

如果我将 int 值转换为字符串,则 get 操作可与 ​​memcache 一起使用。当然,这会破坏增量/减量。

从 memcache 设置 INT 并从 memcached 读取工作正常。

我在用着:

  • libmemcached 1.0.14
  • pecl-memcache 3.0.6
  • 内存缓存 1.4.4
  • php-pecl-memcached 2.1.0

我怀疑这与不同库设置的标志有关。关于使这些相互兼容的任何建议?

谢谢!

4

1 回答 1

3

在 memcached 服务器中标记时,pecl-memcache 和 php-pecl-memcacheD 的值类型不兼容。

pecl-memcache (memcache_pool.h) 使用以下标志:

#define MMC_TYPE_STRING 0x0000
#define MMC_TYPE_BOOL   0x0100
#define MMC_TYPE_LONG   0x0300
#define MMC_TYPE_DOUBLE 0x0700

当 pecl-memcacheD 使用它时(php_memcached.c):

#define MEMC_VAL_IS_STRING     0
#define MEMC_VAL_IS_LONG       1
#define MEMC_VAL_IS_DOUBLE     2
#define MEMC_VAL_IS_BOOL       3
#define MEMC_VAL_IS_SERIALIZED 4
#define MEMC_VAL_IS_IGBINARY   5
#define MEMC_VAL_IS_JSON       6

所以实际上只输入 STRING 匹配项,并且两者都可以以相同的方式解码

于 2013-06-26T10:43:39.400 回答