一次小开发,不设置Redis key 的Bug

在一次开发中,有个redis key 用于统计参数人数,代码大概是这么写的,

1.参与活动,逻辑里有类似如下,每次参与,redis 记录参与人数+1

ValueOperations<String,Integer> valueOperations = redisTemplate.opsForValue();
Integer count = valueOperations.get("xxxxxxxxx_count");

valueOperations.set("xxxxxxxxx_count",count==null?1:count+1,600,TimeUnit.SECONDS);

2.参与成功后的展示页面

ValueOperations<String,Integer> valueOperations = redisTemplate.opsForValue();
Integer totalPerson = valueOperations.get("xxxxxxxxx_count"); // 用于统计xxx参与人数
if (totalPerson == null){
    totalPerson = xxxxxService.selectCount();    // redis key 不存在的话就去查数据库。
    valueOperations.set("xxxxxxxxx_count",totalPerson);
}

在线上跑一直没有问题,其中redis 的key 虽然只设置了10分钟过期,但是一直有人参与 或 访问方法 2,所以key 一直

存在,(这里即使redis key 刚好过期了,如果刚好有人访问 2 ,值又重新从数据库读取,并设置到了redis 中)

所以导致了这个问题 上线好几天都一直没发现,直到下一次的停机上线 , 问题最终浮出水面了。


解决办法就是:

找不到key ,从数据库重新读取。

Key 不设置过期,或者足够长( 比如我这个功能只上线 30天 ,key 过期时间就设置 30多天,不然到时候忘记清理,

redis 数据会越积越多),





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值