PECL-Memcache无法读取PECL-Memcached中设置的INT

时间:2012-12-04 06:25:00

标签: php memcached libmemcached

我正在将应用程序从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
  • memcached 1.4.4
  • php-pecl-memcached 2.1.0

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

谢谢!

1 个答案:

答案 0 :(得分: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匹配的类型,并且两者都可以用相同的方式解码