pipline(管道)

一. 管道简介

  1. pipeline期间将“独占”链接,多个命令,放到一个pipline(管道中),要么都执行,要么都不执行(是不是有事物的原子性的感觉)

二. redis 中使用管道

  1. Redispipeline(管道)功能在命令行中没有,但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),在修改时发现数据被修改过,就不会修改了。

2. 代码实现(python 为例)

posted @ 2024-06-29 10:09  codegjj  阅读(30)  评论(0)    收藏  举报