原理:基于切片编程用评论方式实现redis锁
代码如下。
依赖关系:
ependencygroupidorg.redis son/groupidartifactidredisson/artifactidversion3.7.3/version/dependency注释代码
@target({elementtype.method} ) retention ) retention policy.runtime inherited public @ interfaceredislock )/** /** * long expire () default 1800L; time单元time unit () default TimeUnit.SECONDS; }切面级,其中的业务执行是定制异常类,可以自己实现
@ aspect @ componentpublicclassredislockaspect { @ autowiredprivateredissonclientredissonclient; privatestaticfinalstringredis _ prefix=' redis son _ lock : '; @around('@annotation(redislock ) ) publicobjectaround ) proceedingjoinpoint,RedisLock redisLock ) ) stringkoing strourd rock rlock=redissonclient.get lock (redis _ prefixlockname ' : ' key ); rock.expire(redislock.expire )、redisLock.timeUnit ); 布尔型b=假; try { //未能锁定后立即返回b=rlock.trylock(0,TimeUnit.SECONDS ); if(b ) { return joinPoint.proceed; } else { thrownewbusinessexception ('当前页面上有人正在操作。 请稍后再试.'); } catch (业务案例) thrownewbusinessexception ) e.geterrormessage ); }catch(throwablee ) { throw new BusinessException ('当前页面上有人正在操作。 请稍后再试. '; } finally { //锁定if(b ) { rLock.unlock ); } }使用方法