PHPredis擴展中incr的一個坑

之前在開發的時候,是用incrBy沒有注意很多,只知道他可以加一個整數。
突然有一天,端傳進來一個浮點數。
這時候出現問題了。incrBy會把浮點數轉爲整數,會截斷浮點數。比如1.23會轉爲1.98也會轉爲1。

所以。數據就會出現問題。

當我用redis直連的時候,如果插入一個浮點數。會報錯。但是用PHP操作,不會報錯。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

當我以爲問題解決的時候,我發現了另一個問題。
當這個數初始值爲小數的時候,無論incrBy加的是一個整數還是浮點數都會報錯。並且,值沒有任何變化。

當這個數字初始值是整數的時候,incrBy會把浮點數強轉爲整數並且存儲進去。

PHP是弱類型語言,而redis是用強類型語言C語言實現的。中間的轉換如果類型不同會出現強轉。會出現缺失的問題。

有兩個建議:
第一個,用incrBy的時候無論傳進來數字是什麼,一定要強轉爲int。
第二個,直接用incrByFloat進行原子加操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章