Redis不仅支持众多的数据结构,还支持事务,在这里会介绍Redis事务的使用,及其事务相关的命令介绍使用。
1、Redis事务可以一次执行多个命令
2、Redis事务就是一次性,顺序性,排他性的执行一个队列中的一系列的命令
3、Redis不保证原子性
4、Redis中,单条命令是原子执行的,但是事务不保证原子性,且没有回滚的概念。事务中任意命令执行失败,其余的 命令仍会执行。
5、Redis事务是没有隔离级别的概念
6、批量操作在发送exec命令前被放入队列,并不会实际执行,也就不存在事务内的查询要看到事务里的更新,事务外查询不能看到
事务命令
Redis的事务机制
将批量操作的命令放入到队列缓存,在执行exec命令之后才会进入到事务执行,事务中任意命令执行失败,其余命令依然被执行
在事务执行过程中,其他客户端提交的命令请求是不会被插入到事务执行命令的序列中
一个事务从开始到执行主要是三个阶段:
1、开启事务:multi
2、命令入队列...
3、执行事务:exec
在执行exec之前,所有的命令在事务队列中,并没有直接被执行,只有发起执行命令才会执行
正常事务执行
放弃事务:discard
如果放入事务队列中的命令错了可以放弃事务的执行,使用discard命令队列中的所有命令都不会执行
执行时异常
执行时异常,如果事务队列中存在错误的语法,在事务执行的时候,其他命令都可以正确执行,错误的命令抛出异常
编译时异常
编译时异常(命令错误),事务中所有的命令都不会被执行
watch命令
watch命令可以监视一个或者多个key,如果在事务执行之前key被其他命令所修改,那么事务将被打断。
可以当做乐观锁的使用
正常执行成功
多个客户端操作k1值,使用watch当做乐观锁使用
使用watch监视k1,在库客户端1开启事务后,在客户端2执行修改k1操作,通过watch监控k1数据,发现数据被修改,在客户端1事务执行exec后,事务未成功执行
总结:
Redis中事务执行分为三个阶段,开始事务(multi)、命令入队、执行事务(exec),
redis是无法回滚,如果发现事务中某一个命令有问题,只能结束掉整个事务(discard)
有时事务在执行的时候不希望被别的事务干扰可以使用watch方法