缓存计数器

博客介绍了前后端防止重复提交的方法。前端可通过优化按钮loading效果或添加disable属性解决。后端以Redis为例,可使用set缓存或缓存计数器,如setIfAbsent判断、increment计数。缓存计数器还适用于短信发送限制场景,且Redis incr操作具原子性,无并发问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

是在一次比较偶然的情况下,可能是页面卡顿或者网络延迟,发生了重复提交事件,原因是:按钮的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 操作具有原子性,所以不用担心并发问题。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值