拨浪鼓项目分布式锁实现

架构实现:SpringAop+Redis

实现目的:为了防止同一用户对目标接口指定时间范围内的多次请求。(防止重复请求)  

实现前提:用户登录成功以后需要将用户信息保存到HttpSession中,以备在SpringAop中使用。

实现原理:

    1、自定义注解。标注了自定义注解的接口将会被限制重复访问。

            

    2、配置自定义注解。在SpringAop中对自定义的注解设为切入点,并通过环绕的方式对切入点前后做业务处理。

            

    3、切入点之前的操作:

            ①通过HttpSession获取当前登录用户的信息

            ②加锁:将当前用户名和执行的方法名联合作为redis唯一key,UUID作为当前key的唯一值,注解中的lockTime作为数据失效时间,存入redis。

                

            ③存入redis:根据唯一key查询是否存在,存在则说明为重复请求;不存在则插入数据。

                

4、切入点之后的操作:

            ①解锁:根据唯一key和clientId进行解锁

                

            ②redis:根据唯一key查询redis,若无数据则属于失效自动解锁;获取到数据并且clientId相同则根据key删除数据,完成解锁。

                

                                                                                                                                                                                                                                                                                                                                                                                       written  by  Raysen

                                                                                                                                                                                                                                                                                                                                                                                       2021/1/15