最近做了一个多人竞拍的小功能  因为以前没做过 所以踩了很多坑

用的是 mysql + php + redis 实现的竞拍功能


这里先说一下踩得第二个坑

redis  的原因  真是欲哭无泪  解决完一个 还有一个


其实是先发现的这个 但是没办法复现 就丢上去了执行了

之后偶然把这个问题复现了

先说一下是什么问题吧 

php 捕获的异常提示是PHP Fatal error: Uncaught RedisException: read error on connection



很多人都说是 PHP-FPM的超时时间是1s钟,也就是说如果PHP程序执行超过1s钟就会中断,另外由于Redis是单线程的,

所以如果一个请求的时间太久就会造成Redis假死状态,接收不了其他请求,继而就会造成PHP程序连接报错。(这段话是我复制过来的)

说是设置php 超时时间   redis 超时时间  为-1就解决了

但没解释为什么  怎么就超时了  怎么验证超时时间可以解决


所以我才自己写的  不一定对  不一定能解决你的问题  但验证了我的问题  也解决了

redis keys * 

这个操作我现在是不能容忍的  这尼玛 什么都不知道你就查  太浪费时间了

就是这个操作 造成了 (PHP Fatal error: Uncaught RedisException: read error on connection)

我们服务器设置的默认超时时间10秒  但是这了命令的执行时间超过了10秒

服务器数据也比较多吧  没用的数据也挺多的 


当然 解决办法还是设置 redis 超时时间  但有些时候我们要弄清 为什么会出现这个问题  这个才是重要的

setOption(Redis::OPT_READ_TIMEOUT,-1);

用了这么久的redis,难道他是单线程的这个知识点都不知道吗(这是领导说我的,确实不知道 现在知道了)

debug sleep 20     //这句话能帮助你复现

你可以自己复现一下  来验证




非学,无以致疑;非问,无以广识