Redis事务定义
Redis事务是一次可以执行多个命令,一个事务中所有的命令都会被序列化,在事务执行的过程中会按照顺序执行队列中的命令。
总的来说:Redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令,事务在执行过程中不会被其他客户端发送来的命令打断。
Redis事务特性
Redis事务有如下三大特性:
1.单独的隔离操作
事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
2.没有隔离级别的概念
队列中的命令没有提交之前不会被实际执行,因为事务提交前任何指令都不会被实际执行。
3.不保证原子性
事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚。
Redis事务命令
Redis提供了以下5个基本指令实现事务功能。
1.标记事务开始:MULTI
标记一个事务块的开始,Redis会将后续的命令逐个放入队列中。
示例如下:
2.执行事务:EXEC
执行事务中的所有操作命令,我们可以使用EXEC来提交一个事务,调用完EXEC之后,正确执行的都会返回OK。
示例如下:
3.取消事务:DISCARD
取消事务,放弃执行事务块中的所有命令。
示例如下:
4.监控WATCH
监视一个或多个key,如果事务在执行前,这个key(或多个key)被其他命令修改,则事务被中断,不会执行事务中的任何命令。
示例如下:
5.取消UNWATCH
取消WATCH对所有key的监视。
Redis事务实例
上面谈了Redis事务的特征与具体操作命令,下面一起来看看相关的Redis事务案例,加强对Redis事务的理解。
我们首先为mikechen和ada初始化自己的金额,然后使用MULTI命令显式开启Redis事务,然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令。
# 给mikechen初始化100元 127.0.0.1:6379> set mikechen 100 OK # 给ada初始化100元 127.0.0.1:6379> setada 100 OK # 显式开启事务 127.0.0.1:6379> MULTI OK # 给mikechen增加10元 127.0.0.1:6379(TX)> INCRBY mikechen 10 QUEUED # 给ada减少10元 127.0.0.1:6379(TX)> DECRBYada 10 QUEUED # 执行事务中的所有指令(提交事务) 127.0.0.1:6379(TX)> EXEC 1) (integer) 110 2) (integer) 90
Redis事务优缺点
Redis事务优点:
- 一次性按顺序执行多个Redis命令,不受其他客户端命令请求影响;
- 事务中的命令要么都执行(命令间执行失败互相不影响),要么都不执行(比如中间有命令语法错误);
Redis事务缺点:
- 事务执行时,不能保证原子性;
- 命令入队每次都需要和服务器进行交互,增加带宽;
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》