Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wushizhenking
advanced-java
提交
d3c4fbee
A
advanced-java
项目概览
wushizhenking
/
advanced-java
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
advanced-java
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
d3c4fbee
编写于
4月 30, 2020
作者:
Y
Yang Libin
提交者:
GitHub
4月 30, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
docs: update distributed-lock-redis-vs-zookeeper.md
上级
0efe1201
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
7 addition
and
8 deletion
+7
-8
docs/distributed-system/distributed-lock-redis-vs-zookeeper.md
...distributed-system/distributed-lock-redis-vs-zookeeper.md
+7
-8
未找到文件。
docs/distributed-system/distributed-lock-redis-vs-zookeeper.md
浏览文件 @
d3c4fbee
...
...
@@ -17,19 +17,18 @@
#### redis 最普通的分布式锁
第一个最普通的实现方式,就是在 redis
(ps:since 2.6.12版本) 里使用
`SET`
命令和该命令的NX和(PX或EX)选项创建一个 key,这样就算加锁。(ps:不能使用SETNX和EXPIRE来实现分布式锁,因为这两个命令没在一个事务里,如果需要使用2.6.12版本之前的redis实现分布式锁,需要将SETNX和EXPIRE放到一个事务里,例如可以将这两个命令放到一个lua脚本执行)
第一个最普通的实现方式,就是在 redis
里使用
`SET key value [EX seconds] [PX milliseconds] NX`
创建一个 key,这样就算加锁。其中:
-
`NX`
:表示只有
`key`
不存在的时候才会设置成功,如果此时 redis 中存在这个
`key`
,那么设置失败,返回
`nil`
。
-
`EX seconds`
:设置
`key`
的过期时间,精确到秒级。意思是
`seconds`
秒后锁自动释放,别人创建的时候如果发现已经有了就不能加锁了。
-
`PX milliseconds`
:同样是设置
`key`
的过期时间,精确到毫秒级。
比如执行以下命令:
```
r
SET
resource_name
my_random_value
NX
PX
30000
SET
resource_name
my_random_value
PX
30000
NX
```
执行这个命令就 ok。
-
`NX`
:表示只有
`key`
不存在的时候才会设置成功。(如果此时 redis 中存在这个 key,那么设置失败,返回
`nil`
)
-
`EX 30`
:意思是 30s 后锁自动释放。别人创建的时候如果发现已经有了就不能加锁了。
-
`PX 30000`
:意思是 30s 后锁自动释放。别人创建的时候如果发现已经有了就不能加锁了。
释放锁就是删除 key ,但是一般可以用
`lua`
脚本删除,判断 value 一样才删除:
```
lua
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录