Java利用redis限制频繁操作带来的数据问题
Posted 默慊$
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java利用redis限制频繁操作带来的数据问题相关的知识,希望对你有一定的参考价值。
在项目开发中我们时常会遇到一些前端频繁操作带来的问题,有的时候是误点或者页面卡顿了导致用户以为没有点击重复操作导致出现多次无效请求的现象,这里分享一个Java中利用redis来限制这种现象的方法:
场景:
以 支付场景为例,现有一订单需要去支付,点击支付按钮后因习惯再次点击或者短时间未响应又重复点击会造成多次请求支付接口,造成多次无效请求,也会增加消耗
思路:
redis可以设置过期时间,可以通过存储该订单的唯一标识作为key,设置一定的过期时间,就可以避免在这段时间内重复发起请求,失效的key会通过redis的淘汰策略或定期清除的形式被干掉
上代码:
//防止多次支付提交
//设置redis key前缀,一般为微服务模块名+租户/用户id 例如:order-center:pay:123
String redisKey = ORDER_CENTER_PAY + userDTO.getTenantId();
//根据key前缀和key获取存入的value
String str = (String)redisRepository.get(redisKey, intentionId);
//不为null则是多余的无效请求
if (null!=str) {
return Result.failed("请勿频繁操作,请稍后重试!");
} else {
//为null则是第一次请求,将key前缀和key、value、失效时间(s)放入缓存中
redisRepository.setExpire(redisKey, intentionId, intentionId,10);
}
这样就简单的解决了这个问题,而且redis响应速度快,占用资源少,是很多场景优先考虑的解决方案,希望能帮到大家,用心码字,觉得有用的兄弟麻烦支持下哈!
以上是关于Java利用redis限制频繁操作带来的数据问题的主要内容,如果未能解决你的问题,请参考以下文章