PHP操作Redis使用incrByFloat 造成小数位数异常问题

我遇到问题的场景

废话少说下面是我的环境配置
系统 => Centos7.2 结果来自 uname -a 命令
在这里插入图片描述
PHP => 7.1.25 结果来自 php -v 命令
在这里插入图片描述
PHP的Redis扩展 => 4.2.0 结果来自 php --ri redis 命令
PHP操作Redis使用incrByFloat 造成小数位数异常问题_第1张图片
Redis服务端 => 3.0.3 (阿里云的云数据库Redis版本) 截图结果来自 redis命令中 info命令
PHP操作Redis使用incrByFloat 造成小数位数异常问题_第2张图片

详细过程

我在正常的业务代码中使用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扩展时有什么错误没有及时处理掉,最后导致了这种问题。

不过到最后还是解决了,我也留下这篇文章希望能够向遇到此问题的朋友提供一些帮助,嘿嘿

你可能感兴趣的:(开发环境)