2012-12-04 48 views
1

我正在將應用程序從PHP PECL-Memcache客戶端切換到PECL-Memcached,我遇到了麻煩。PECL-Memcache無法讀取從PECL-Memcached設置的INT

看來,如果我從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

我懷疑它與不同的庫設置的標誌有關。任何建議使這些互相兼容?

謝謝!

回答

3

在memcached服務器中標記值時,pecl-memcache和php-pecl-memcacheD之間存在不兼容。

PECL,內存緩存(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 

爲字符串,因此只有類型相匹配實際上並可以用相同的方式解碼