我遇到问题的场景
废话少说下面是我的环境配置
系统 => Centos7.2 结果来自 uname -a
命令
PHP => 7.1.25 结果来自 php -v
命令
PHP的Redis扩展 => 4.2.0 结果来自 php --ri redis
命令
Redis服务端 => 3.0.3 (阿里云的云数据库Redis版本) 截图结果来自 redis命令中 info
命令
详细过程
我在正常的业务代码中使用Redis,在使用incrByFloat命令操作成功后我前往redis查看设置的结果,这个结果让我很意外
这个结果是在redis命令行获取的结果,如果用php使用redis扩展获取相同的key也是这个结果,
但是我发现在redis命令行设置相同的值却没有上面的异常情况 例如
incrbyfloat key_name 1.20
我一直在想为什么会出现这种情况呢?
排查
开始时我怀疑是在PHP中数据的类型问题,所以各种转换类型,都不好使!
继续在网上找答案:发现了一个好用的redis命令 MONITOR
这个命令可以实时打印出redis接收到的命令,不看不知道,一看吓一跳!
"INCRBYFLOAT" "key_name" "这里是具体数值 后面就已经是各种零了"
我在本地又搭建了一个更高版本的redis服务端,还是出现了同样的问题!
于是我又搭建了一个和阿里云一样版本的服务端,还是出现了同样的问题!
到这里我发现只要通过PHP的redis扩展操作redis服务端就会出现上面的问题。使用redis-cli的命令行就没有这个问题。看来问题不是出在redis服务端,而是php的redis扩展的问题!
所以我又去PECL下载了一个低版本的redis扩展,然而各种错误没装上【?】
所以我又看了网上的一些文章(然而这个问题的结果少之又少 没有对我有什么帮助)。
我又去github克隆了一个更高的版本装上 结果问题就解决了,使用redis命令实时查看,发现的数据也正常了,再次用命令行查看数值也正常了,难道这的是PHP扩展的问题?到这里我不甘心,又装回了原来的扩展,发现问题也没有了。到这里我有些迷糊了,我猜是在一开始安装redis扩展时有什么错误没有及时处理掉,最后导致了这种问题。
不过到最后还是解决了,我也留下这篇文章希望能够向遇到此问题的朋友提供一些帮助,嘿嘿