看redis文档时,看到一个官方示例,就是使用redis来实现资源锁,思路简单实用


实现方式


1

加锁


使用SET命令实现


SET 资源名 '随机tokenNX EX 最大锁定秒数


以要锁定的资源名为KEY


随机token相当于密码,解锁时用到


NX 只有key不存在时,才会设置key的值


EX 设置key的过期时间,单位秒


执行成功的话会返回“OK”,所以可以用这个命令来判断是否得到了目标资源,成功得到的话也就锁定了此资源


2

解锁


客户端加锁之后,如果没有主动释放,会在过期时间之后自动释放,防止资源被某用户长期占用


客户端也可以通过DEL命令来释放锁,删除KEY时要验证token,来保证谁设置的key,谁才能删除,防止被别人误删


用Redis实现锁机制的简单方法_java


需要注意的是,不要用这种方式来实现redis分布式锁