[redis] 记录使用spring执行redis的自增操作incr失败

   项目上要用统计一个业务动作每天的执行次数,设计上就是存储在redis中。 但是初始化第一次执行后却无法再继续统计,每次报redis的序列化失败,手动去reids上查看key的存储情况,发现存储的value实际是一个序列化后的字符串。

   redis的incr自增操作必须要保证存储的value是数字或者数字的字符串形式,如果是序列化后的数据则无法转换为数字(不知道反序列化方式)。

  看到这个序列化就估摸着是redisTemplate的问题,看代码验证,由于统计第一次时使用的是 redisTemplate.opsForValue.setIfAbsent ( key, 1),而这个方法内部会对value做序列化。所以后面的incr都失败了。修改方案就是直接使用 redisTemplate.opsForValue.increment(key, 1) 来初始化第一次。

    increment(key, 1) 不会对value序列化。

  

posted @ 2021-07-08 10:39  朝花不夕拾  阅读(882)  评论(0编辑  收藏  举报