标签 memcache 下的文章

CentOS6.5安装为PHP安装memcached扩展

PHP环境版本

CentOS6.5的PHP版本为5.6.21通过yum方式安装的, memcache扩展已经通过yum 方式安装好了

首先需要下载并安装libmemcached

因为memcached扩展是基于libevent的事件处理的, 首先需要安装libmemcached
下载地址
解压并安装:

tar zxf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18
./configure --prefix=/usr/local/libmemcached --with-memcached//注意:--with-memcached这个选项一定要加上
make
make install

注意:如果需要适用sasl, 也可以在安装libmemcahced前安装cyrus-sasl-devel:

yum install cyrus-sasl-devel

安装memcached扩展

首先下载memcached扩展, 下载地址
解压并安装:

tar zxf memcached-2.2.0.tgz
cd zxf memcached-2.2.0
phpize
./configure --with-php-config=/usr/bin/php-config --disable-memcached-sasl --with-libmemcached-dir=/usr/local/libmemcached
make
make test
make install

注意:如果不使用--disable-memcached-sasl安装过程中会提示

error 'configure: error: no, sasl.h is not available. Run configure with --disable-memcached-sasl to disable this check '

至此php的memcached扩展安装完毕, 重启php-fpm 即可生效。

关于PHP的Memcache扩展get方法返回数据格式为serialize的问题

问题描述

这两天网站页面中城市名称显示的地方不正常,但是有些地方也正常。调用城市代码用了Memcache缓存,扩展是Memcache。 经过调试后发现调用城市数据的时候有些城市数据返回的是:

string(398) "a:18:{s:2:"id";i:4;s:4:"name";s:6:"重庆";s:5:"alias";s:9:"chongqing";s:4:"bjdx";s:2:"cq";s:4:"type";i:1;s:8:"parentid";i:0;s:8:"haschild";i:1;s:4:"path";s:1:"4";s:6:"domain";s:9:"chongqing";s:5:"quhao";s:3:"023";s:6:"chepai";s:29:"渝A,渝B,渝C,渝F,渝G,渝H";s:5:"color";s:6:"0000FF";s:5:"cs_id";i:35;s:5:"level";i:4;s:5:"class";i:1;s:10:"bdcitycode";i:132;s:6:"status";i:1;s:7:"version";i:1;}"
string(398) "a:18:{s:2:"id";i:4;s:4:"name";s:6:"重庆";s:5:"alias";s:9:"chongqing";s:4:"bjdx";s:2:"cq";s:4:"type";i:1;s:8:"parentid";i:0;s:8:"haschild";i:1;s:4:"path";s:1:"4";s:6:"domain";s:9:"chongqing";s:5:"quhao";s:3:"023";s:6:"chepai";s:29:"渝A,渝B,渝C,渝F,渝G,渝H";s:5:"color";s:6:"0000FF";s:5:"cs_id";i:35;s:5:"level";i:4;s:5:"class";i:1;s:10:"bdcitycode";i:132;s:6:"status";i:1;s:7:"version";i:1;}"

这个问题是memcache->get返回的数据没有经过unserialize处理,就直接返回了,所以导致页面中$array['key']调用的时候显示异常。

目前仍旧无法分析出来具体原因, 先记录下来以后再分析。目前可以确定如下情况:

  • 最近没有升级过服务器和相关服务;
  • 缓存设置的地方是正常的;
  • 只有部分城市出现过问题;
  • 重启过memcached服务, 并不解决问题;
  • PHP版本5.4.45