缓存计数器

2 篇文章 0 订阅

是在一次比较偶然的情况下,可能是页面卡顿或者网络延迟,发生了重复提交事件,原因是:按钮的loading效果没出来。 经过了优化,或者是给按钮加disable,是可以解决这个问题的。

上面都是前端页面防止重复提交的解决方法。

但是,可能有比较极端的情况下,前端没check住重复提交。那后端呢,用什么办法来防止。

可以利用缓存,以redis为例,key可以根据实际业务命名。

一、set缓存

1.  setIfAbsent(key, value),如果返回true,可以继续执行。执行完,del(key)。

2. setIfAbsent(key, value),如果返回false,报错“不能重复提交”。

 

二、缓存计数器

long count = increment(key, 1);

if (count == 1) {

//执行后续代码。执行完,del(key)。

}

if (count > 1) {

//报错“不能重复提交”。

}

除此之外, 缓存计数器还可以用在很多场景下,比如:

1.  1分钟不能给重复手机号发多次短信:

expire(key, 60, TimeUnit.SECONDS);  //设置有效期一分钟

2. 1天只能发100条短信

expire(key, 1, TimeUnit.DAYS);  //设置有效期一天

 

重要一点,Redis incr 操作具有原子性,所以不用担心并发问题。

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值