Redis事务

基本语法

  • 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

ACID

  • 原子性
    • 不支持
    • 不会回滚并且继续执行
  • 隔离性
    • 支持
    • 事务中命令顺序执行, 并且不会被其他客户端打断 (先EXEC的先执行)
    • 单机redis读写操作使用 单进程单线程
  • 持久性
    • 支持, 但相比Mysql, redis数据易丢失
  • 一致性
    • 不支持
from redis import StrictRedis

#创建redis客户端
redis_client = StrictRedis()

#创建管道对象,开启事务
pipe = redis_client.pipeline()

a = pipe.set('name','zhangsan')
b = pipe.get('name')

pipe.execute()

注意点:

  • 创建管道后, 默认会开启事务
  • 放入事务中的命令在执行 execute方法后才会执行

 

posted @ 2020-06-17 20:54  Tracydzf  阅读(163)  评论(0编辑  收藏  举报