memcache 删除键值的一个bug

今天在linux系统下使用PHP的memcache模块调用memcache时,在执行delete发现一个问题,系统提示:

PHP Notice:  Memcache::delete(): Server 192.168.10.131 (tcp 11211) failed with: CLIENT_ERROR bad command line format.  Usage: delete <key> [noreply]
但同时我在本地windows系统下使用同样的方法,却一切正常。后来在网上搜索了一下(有搜索引擎真好),发现,memcache服务端版本>=1.4.3的delete方法与之前的版本有调整,因此有这个问题。最好解决是把linux下的memcache服务端版本改为1.4.2版本的。
以下是找到资料的说明,以便大家参考:
 
memcache 这个 PECL 扩展的 2.2.5 稳定版本有一个错误,导致在向 memcached 1.4.3 调用 delete 方法时返回 false。
用 -vvv 模式运行 memcached 将显示出为什么 delete 调用失败:
CLIENT_ERROR bad command line format.  Usage: delete <key> [noreply]
简单修改一下,在这个 PECL 扩展的 memcache.c 这个文件的 1494 行的 mmc_delete() 函数中。把 command_len 修改为下面这样:
command_len = spprintf(&command, 0, “delete %s”, key);
去掉了弃用的第 3 个参数,然后 delete 就可以工作了。
再提示一下改动前的代码:
//  command_len = spprintf(&command, 0, “delete %s %d”, key, time);
修改完成后,重新编译出 memcache.so 即可。

相关文章

发表评论

返回顶部