需求
- 随着销售的进行,理财产品的总剩余额度需要进行记录
坑
- 使用了redis进行落地存储,并使用decrby进行递减操作,结果数字到达一定的值以后不进行递减少了
选择理由
- 销售总金额的变化频繁,所以采用redis进行存储
- 用decrby不用get,set依次操作的的理由是把数据的减少操作交给redis操作,内部有事务进行保障
解决方案
- 还是使用decrby进行递减操作,只是金额以分为单位,保证decrby是整数类型
实验(redis终端)
set money 100
decrby money 20
set money 100.01
decrby money 100
结论
- decrby有类型限制,只有整数类型的时候才能进行递减操作
- 文档的描述:如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误
- 导致记录错误的原因是:在销售的过程中,有的用户购买理财产品不是整元数,导致decrby需要进行小数操作