最近做了一个多人竞拍的小功能 因为以前没做过 所以踩了很多坑
用的是 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 //这句话能帮助你复现
你可以自己复现一下 来验证
https://blog.csdn.net/qq_35336004/article/details/80923425