pipline(管道)
一. 管道简介
- pipeline期间将“独占”链接,多个命令,放到一个pipline(管道中),要么都执行,要么都不执行(是不是有事物的原子性的感觉)
二. redis 中使用管道
Redis的pipeline(管道)功能在命令行中没有,但redis是支持pipeline的,而且在各个语言版的client中都有相应的实现
1. python 操作管道
import redis
pool = redis.ConnectionPool(host='10.0.0.101', port=6379, password='654321')
conn = redis.Redis(connection_pool=pool)
# 创建pipeline
pipe =conn.pipeline(transaction=True)
# 开启事务
pipe.multi()
pipe.set('name', 'lqz')
# 其他代码,可能出异常(如果在 pipe.multi 和 pipe.execute 之间出现了异常,此过程就会被回滚。)
pipe.set('role', 'nb')
# 提交事务
pipe.execute()
2. redis 原生操作
# 开启事务
multi
set name lqz
set age 18
# 提交事务
exec
三. redis实现“乐观锁”
1. 原生操作
首先设置一个值
set count 6
开启两个窗口进行操作
# 窗口一
watch count # 监听 count, 相当于加了一把乐观锁
multi # 开启事务
decr count # 对 count 进行减 1
exec # 提交事务
# 窗口二
multi
decr count
exec
# 结果:
1. 首先两个窗口都执行到了 decr count。
2. 接下来如果是《窗口一》执行了 exec, 《窗口二》仍然可以执行 exec, 并可以减成功。
3. 接下来如果是《窗口二》执行了 exec, 《窗口一》执行 exec 会不成功, 因为《窗口一》加了乐观锁(watch count),在修改时发现数据被修改过,就不会修改了。

浙公网安备 33010602011771号