【问题标题】:Warning: Memcached::getMulti(): could not unserialize value, no igbinary support警告:Memcached::getMulti():无法反序列化值,不支持 igbinary
【发布时间】:2016-05-14 00:54:54
【问题描述】:

我已经在我的 Drupal 网站上成功使用 memcached(在 OS X 上通过 brew 安装)几个月了。

然而,这个错误在很长的页面加载后突然发生:

( ! ) 警告:Memcached::getMulti(): 无法反序列化值,在第 375 行的 sites/all/modules/contrib/memcache/dmemcache.inc 中没有 igbinary 支持

为什么会发生这种情况,为什么我需要igbinary(我想我有)以及如何解决它?


看来我已经安装了php56-igbinary

$ php -i | grep igbinary
Additional .ini files parsed => /usr/local/etc/php/5.6/conf.d/ext-igbinary.ini,
igbinary
igbinary support => enabled
igbinary version => 1.2.1
igbinary APC serializer ABI => no
igbinary session support => yes
igbinary.compact_strings => On => On
igbinary support => yes
memcached.serializer => igbinary => igbinary
Registered serializer handlers => php_serialize php php_binary wddx igbinary 

【问题讨论】:

  • "pecl install igbinary" 对我有用(php 7.4)

标签: php macos caching memcached mamp


【解决方案1】:

Igbinary 是标准PHP serializer 的替代品,标准PHP serializer 通常会消耗大量时间和空间以文本表示形式存储数据。由于支持该扩展,因此在使用 memcached 或类似的基于内存的存储(例如 Redis)时可以节省大量资金,因为所有 PHP 数据结构都以紧凑的二进制形式存储。

我处理它的问题发生了,因为有两个 PHP 版本,一个使用 CLI 支持 igbinary(例如 drush 使用),另一个使用 Apache/MAMP 没有 igbinary

$ /Applications/MAMP/bin/php/php5.6.10/bin/php -i | grep igbinary
igbinary support => no

因此,由于某种原因,某些对象是使用带有igbinary 的 PHP 缓存的,然后在没有该支持的情况下,PHP 无法对其进行反序列化。

MAMP 似乎没有为他们的 PHP 包提供 igbinary 支持,因此解决方案包括:

  • 扩展需要手动编译并加载到 MAMP (--enable-memcached-igbinary),
  • 在 PHP CLI 中禁用 igbinary(不推荐),这样它就不会与 Apache 冲突,
  • 继续重启memcached,例如brew services restart memcached (OS X)
  • 使用支持 igbinary 的 PHP 内置服务器,例如:php -S localhost:8888

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 2014-06-30
    • 2016-02-08
    相关资源
    最近更新 更多