decrby的一个坑

需求

  • 随着销售的进行,理财产品的总剩余额度需要进行记录

  • 使用了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需要进行小数操作
坚持原创技术分享,您的支持将鼓励我继续创作!