基本语法
- MULTI
- 开启事务, 后续的命令会被加入到同一个事务中
- 事务中的操作会发给服务端, 但是不会立即执行, 而是放到了该事务的对应的一个队列中, 服务端返回QUEUED
- EXEC
- 执行EXEC后, 事务中的命令才会被执行
- 事务中的命令出现错误时, 不会回滚也不会停止事务, 而是继续执行
- DISCARD
- 取消事务, 事务队列会清空, 客户端退出事务状态
$ redis-cli 127.0.0.1:6379> set user1 zs # 设置string类型的键 user1 OK 127.0.0.1:6379> type user1 # 查看user1类型 string 127.0.0.1:6379> multi # 开启事务 OK 127.0.0.1:6379> set age 20 # 设置string类型的键 age, 事务中的操作不会立即执行, 只是入列 QUEUED 127.0.0.1:6379> hset user1 name zs # 设置hash类型的键 user1, 由于user1已存在, 且为string类型, 所以在该命令真正执行时会报错, 此处仅为入列 QUEUED 127.0.0.1:6379> set height 1.8 # 设置string类型的键 height OK 127.0.0.1:6379> exec # 提交事务, 即使部分操作失败, 不回滚且继续执行 1) OK 2) (error) WRONGTYPE Operation against a key holding the wrong kind of value 3) OK
不要误导老子,这就不是事务,只是把代码堆在一起,一起执行罢了
代码示例
from redis import StrictRedis # 创建redis客户端 redis_client = StrictRedis() # 创建管道对象 默认会开启事务 pipe = redis_client.pipeline() # pipe的后续操作会被放入事务中 不会立即执行 a = pipe.set('name', 'zhangsan') b = pipe.get('name') # 提交事务 提交才会执行事务中的命令 c = pipe.execute() print(a) print(b) print(c)
注意点:
- 创建管道后, 默认会开启事务
- 放入事务中的命令在执行
execute
方法后才会执行