看redis文档时,看到一个官方示例,就是使用redis来实现资源锁,思路简单实用
实现方式
1
加锁
使用SET命令实现
SET 资源名 '随机token' NX EX 最大锁定秒数
以要锁定的资源名为KEY
随机token相当于密码,解锁时用到
NX 只有key不存在时,才会设置key的值
EX 设置key的过期时间,单位秒
执行成功的话会返回“OK”,所以可以用这个命令来判断是否得到了目标资源,成功得到的话也就锁定了此资源
2
解锁
客户端加锁之后,如果没有主动释放,会在过期时间之后自动释放,防止资源被某用户长期占用
客户端也可以通过DEL命令来释放锁,删除KEY时要验证token,来保证谁设置的key,谁才能删除,防止被别人误删
需要注意的是,不要用这种方式来实现redis分布式锁