今天在对PHP应用程序增加缓存时,发现很容易造成set数据失败的情况,打印错误日志显示为:SERVER HAS FAILED AND IS DISABLED UNTIL TIMED RETRY
在csdn的一篇博文中有一些分析:http://blog.csdn.net/tankles/article/details/7208988
但这个分析与php场景不一样,当memcached重启后,笔者发现在php-fpm的场景下最好也重启下php-fpm,要不然会导致php-fpm的进程在调用memcached模块的set方法时认为memcached是失败的。这里的原因我想应该和memcached的长连接在php-fpm进程下的机制有关,当memcached重启后,php-fpm的长连接状态已经非正常,除非php-fpm自然退出,要不然始终会保留错误的连接资源,导致set和get的失败。笔者发现此问题也同样存在于redis的长连接中。