未验证 提交 d3c4fbee 编写于 作者: Y Yang Libin 提交者: GitHub

docs: update distributed-lock-redis-vs-zookeeper.md

上级 0efe1201
...@@ -17,19 +17,18 @@ ...@@ -17,19 +17,18 @@
#### redis 最普通的分布式锁 #### 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 ```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 一样才删除: 释放锁就是删除 key ,但是一般可以用 `lua` 脚本删除,判断 value 一样才删除:
```lua ```lua
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册