我正在将应用程序从PHP PECL-Memcache客户端切换到PECL-Memcached,我遇到了麻烦。
似乎如果我从PECL-Memcached设置一个INT值,那么PECL-Memcache就无法读取它。我看到类似的东西:
MemcachePool::get(): Failed to unserialize data
如果我将int值转换为字符串,则get操作与memcache一起使用。当然,这会打破增量/减量。
从memcache设置INT并从memcached读取工作正常。
我正在使用:
我怀疑它与不同库设置的标志有关。有关使这些相互兼容的任何建议吗?
谢谢!
答案 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匹配的类型,并且两者都可以用相同的方式解码