什么是redis事务机制

👌什么是redis事务机制?

口语化回答

好的,面试官,redis 的事务机制不算是一个像 mysql 一样的正常的事务,只是保证了正常情况下的原子性,一场情况不提供回滚机制。redis 主要是将事务的命令,放在一个队列,一起准备顺序执行。主要是 multi,exec,watch 命令配合使用。使用非常简单,先标记事务开始后,放入命令,再通过 exec 执行即可。以上。

题目解析

实际场景的事务还是用的很少的,这道题也不是特别重点,了解一下 redis 这个事务特性即可。

面试得分点

原子性、不支持回滚、watch 乐观锁

题目详细答案

redis中事务是一组命令的集合,一组命令要么全部执行,要么全部不执行。事务在Redis中是通过流水线(Pipeline)技术实现的,所有命令在执行之前都会被放入一个队列中,直到执行EXEC命令时,所有命令才会按顺序执行。

命令操作

MULTI

MULTI命令用于标记一个事务的开始。执行MULTI后,所有的命令都会被放入一个队列中,而不是立即执行。

1
MULTI

EXEC

EXEC命令用于执行从MULTI命令开始后放入队列中的所有命令。所有命令会按顺序执行,并且在执行过程中不会被其他客户端的命令打断。Redis事务在执行EXEC命令时具有原子性,即所有命令要么全部执行,要么全部不执行。Redis事务并不支持回滚机制。如果在事务执行过程中发生错误,已经执行的命令不会被回滚。

1
EXEC

DISCARD

DISCARD命令用于放弃从MULTI命令开始后放入队列中的所有命令,并且取消事务。

1
DISCARD

WATCH

WATCH命令用于监视一个或多个键,在事务执行之前,如果这些键被其他客户端修改,事务将被中止。WATCH命令通常用于实现乐观锁。这样可以防止事务中的数据竞争问题。

1
WATCH key1 key2

事务的工作原理

事务的执行过程

1、 开始事务:使用MULTI命令开始一个事务。

2、 命令入队:在事务开始之后,所有的命令都会被放入队列中,而不是立即执行。

4、 执行事务:使用EXEC命令执行队列中的所有命令。如果在使用WATCH监视的键在事务执行前被修改,事务将被中止。

4、 放弃事务:使用DISCARD命令可以放弃当前事务队列中的所有命令。

代码示例

1
2
3
4
5
6
7
# 开始事务
MULTI
# 添加命令到事务队列
SET key1 value1
SET key2 value2
# 执行事务
EXEC

如果在事务执行之前,使用WATCH命令监视了某个键,并且该键在事务执行前被修改,事务将被中止:

1
2
3
4
5
6
7
8
9
# 监视键
WATCH key1
# 开始事务
MULTI
# 添加命令到事务队列
SET key1 value1
SET key2 value2
# 执行事务(如果key1在此之前被修改,事务将被中止)
EXEC
 wechat
天生我才必有用