【问题标题】:PECL-Memcache can't read INTs set from PECL-MemcachedPECL-Memcache 无法从 PECL-Memcached 读取 INT 集
【发布时间】:2012-11-21 17:51:46
【问题描述】:

我正在将应用程序从 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

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

谢谢!

【问题讨论】:

    标签: php memcached libmemcached


    【解决方案1】:

    在 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 匹配项,并且两者都可以以相同的方式解码

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-24
      • 2014-04-01
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多