title: 【学习之路】Redis事务
draft: true
tags:
- 学习之路
- Redis
categories: - 中间件
- Redis
cover: ‘https://cdn.jsdelivr.net/gh/CodeZixuan/Blog_Images/RedisTransactions/bg.jpg‘
description: Redis事务
abbrlink: ef1044a8
date: 2021-03-13 22:55:50
Reids事务介绍
可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序的串行化执行而不会被其他命令插入,不许加塞
Redis事务相关的命令
- DISCARD:取消事务块内的命令
- EXEC:执行所有事务块内的命令
- MULTI:标记一个事务块的开始
- UNWATCH:取消WATCH命令对所有key的监视
- WATCH key key:监视一个或多个key,如果在事务执行之前这写key,被其他命令所改动,那么事务将会被打断
正常执行
使用MULTI开始事务可以执行添加或者获取操作,不限制语法规则,此时所有操作都是入队并没有真正执行,再次输入EXEC事务执行
放弃事务
使用MULTI开始事务,进行修改操作如果想放弃事务输入DISCARD就会放弃事务所有入队的值将不会被修改
全体连坐
使用MULTI开始事务,进行set操作,如果有些操作出现报错那么EXEC结束事务时也会报错,并且所有事务都不会执行
冤头债主
使用MULTI开始事务,进行操作如果不是直接抛出的错误那么在EXEC结束事务时,会抛出异常,但是其他没有问题的数据可以正常执行
watch监控
Watch指令,类似乐观锁,事务提交时,如果Key的值已被别的客户端改变,整个事务队列都不会执行
通过WATCH命令在事务执行之前监控了多个Keys,倘若在WATCH之后有任何Key的值发生了变化,EXEC命令执行的事务都将被放弃。
总结
- 单独的隔离操作:事务中所有命令都会序列化、按顺序地执行。事务在执行过程中,不会被其他客户端发送古来的命令请求所打断
- 没有隔离级别的概念:列队中的命令没有提交之前都不会实际的被执行。
- 不保证原子性:redis同一个事务中如果有一条命令执行失败,其他后面的命令任然会被执行,不会进行回滚操作