为了确保多个操作的原子性,一个成熟的数据库通常都会提供事务支持,Redis中也提供了相应的方法,但是不停与传统数据库,Redis的事务极其简单,同时和传统数据的事务相比也有一定的缺失,Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:
- 批量操作在发送 EXEC 命令前被放入队列缓存。
- 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
- 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
尝试使用Redis事务执行一串命令
上述图片可以看到,在执行exec时,set和get指令才会一起同时执行并返回结果。
下面尝试使用Redis事务执行报错的指令:
可以看到在Redis事务中,单挑指令报错的时候并不会影响其他指令的执行。
Redis还提供了Discard方法,类似于传统数据库中的rollback,可以放弃事务中所有的指令的执行。
从上述可以看到,之前建立的Redis事务中的指令没有执行并且再次调用exec的时候也会提示报错