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
  • memcached 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 に答える