什么是防抖:
一是防用户手抖,二是防网络抖动。
在Web系统中,表单提交是一个非常常见的功能,如果不加控制,容易因为用户的误操作或网络延迟导致同一请求被发送多次,进而生成重复的数据记录。
要针对用户的误操作,前端通常会实现按钮的loading状态,阻止用户进行多次点击。而对于网络波动造成的请求重发问题,仅靠前端是不行的。
为此,后端也应实施相应的防抖逻辑,确保在网络波动的情况下不会接收并处理同一请求多次。
理想的防抖组件或机制,应该具备以下特点:
-
逻辑正确,也就是不能误判;
-
响应迅速,不能太慢;
-
易于集成,逻辑与业务解耦;
-
良好的用户反馈机制,比如提示“您点击的太快了”
分布式下如何做:
一使用共享缓存,二使用分布式锁。
常见的分布式组件有Redis、Zookeeper等,但结合实际业务来看,一般都会选择Redis,因为Redis一般都是Web系统必备的组件,不需要额外搭建。
Redis缓存方式:设置一个缓存锁键,用于在执行 SET 命令时设置键值对的时候,如果键不存在则进行设置,如果键已经存在,则不进行设置。
Redisson分布式需要一个额外依赖,引入方式
Redisson的核心思路就是抢锁,当一次请求抢到锁之后,对锁加一个过期时间,在这个时间段内重复的请求是无法获得这个锁。