Redis分布式锁

一、命令

1、加锁 setnx key value

setnx name aaa

2、设置过期时间 expire key time 

expire name 10

3、释放锁 del key

del name 

4、加锁过程设置过期时间 set key value nx ex time

set key name nx ex 10

 

 二、防止锁被误删(1)

1、描述

a先抢到锁,上锁,操作一半服务器卡了,卡顿超过过期时间锁被自动释放,这个时候b拿到了锁,上了锁,操作了一半,a反应过来了,操作完毕,开始释放锁,这个时候就把b的锁给误删了。

 2、解决方案

加上的时候设置的那个值UUID,含义是本次操作的操作id,如果发现不是自己的UUID就不释放。

三、防止锁被误删(2)

1、描述

a先抢到锁,上锁,操作完成,比较UUID一样,正要删除,这个时候超过过期时间锁被自动释放,这个时候b拿到了锁,上了锁,操作了一半,a把锁删了。

 2、解决方案

使用LUA脚本,判断uuid释放一样,一样则删除,不一样就不删除。

$script = "if redis.call('get’, KEYS[1]) == ARGV[1] then return
redis.call(' del’,KEYS[1]) else return 0 end" ;
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值