传统事务的特性
- 原子性
- 一致性
- 隔离性:事务之间互不干扰
- 持久化:一旦事务提交,无法修改
Redis事务机制
- MULTI、EXEC、DISCARD和WATCH命令是Redis事务功能的基础。Redis事务允许在一次单独的步骤中执行一组命令,并且可以保证如下两个重要事项:
- Redis会将一个事务中的所有命令序列化,然后按顺序执行。Redis不可能在一个Redis事务的执行过程中插入执行另一个客户端发出的请求。这样便能保证Redis将这些命令作为一个单独的隔离操作执行
- 在一个Redis事务中,Redis要么执行其中的所有命令,要么什么都不执行。因此,Redis事务能够保证原子性。EXEC命令会触发执行事务中的所有命令
事务的用法
- MULTI (开启)用于标记事务块的开始
- EXEC (执行)在一个事务中执行所有先前放入队列的命令,然后恢复正常的连接状态
- DISCARD (回退)清除所有先前在一个事务中放入队列的命令,然后恢复正常的连接状态
- WATCH 当某个事务需要按条件执行时,就要使用这个命令将给定的键设置为受监控的
- UNWATCH 清除所有先前为一个事务监控的键
- 集群状态下支持事务,但是不支持跨节点和跨槽
操作
- 输入命令ps -ef|grep redis查看所有的redis事务,如果redis的后年有cluster则为集群,不要选即可
- 进入一个单机版的redis客户端,使用命令redis-cli -p 10192
- 输入命令multi,进入事务,返回ok
- 开启事务之后,输入的命令会放到一个队列,而不是立刻执行
- 输入命令结束之后,输入命令exec执行命令
- 会执行所有队列里面的命令
- 而使用DISCARD,里面的命令不会执行