我们知道在 redis
中,有一个排他锁,set ... nx
,但是这个锁有一个问题是,有可能造成所有请求阻塞在等待这个锁上。
如果是允许同时执行的,比如秒杀,是可以有多个请求成功的,那么可以尝试一下 redis 的乐观锁。
如何使用
- 利用 redis 的 watch 功能,监控这个 redis key 的状态值。
- 获取 redis key 的值
- 创建 redis 事务
- 修改这个 key 的值
- 执行这个事务,如果 key 的值被修改过则回滚,key 不修改。(如果没修改过,则执行成功)
示例
事务执行
1 | ➜ ~ redis-cli |
如果事务执行成功,exec 会返回 OK,如果执行失败,则会返回 nil。我们可以根据这个返回值来判断事务是否执行成功。