文章目录
前言
redis 如何实现分布式锁
要解决的问题:
- 互斥性:
- 安全性:自己加锁,自己开锁
- 死锁:
- 容错:别的客户端宕机了,也能释放锁,获得锁
一、redis 实现分布式锁?
set nx locknx lockname
1.setnx + expire
代码如下(示例):
setnx key keyname # set not exist 锁
expir key 2 # 2秒后释放锁
这种操作违背了原子性。可以操作1结束了,操作2卡住了
2.set key value [ex seconds][px milliseconds][nx][xx]
redis 2.6以上
ex : 过期时间为秒
px: 过期时间为毫秒
nx: 键不存在时操作
xx: key存在时操作
代码如下(示例):
set lock1 1234 ex 10 nx
# 10秒后还可以再执行
set lock1 1234 ex 10 nx
该处使用的url网络请求的数据。