在 Redis 中,事务(Transaction)是一组命令的集合,可以作为一个单独的操作来执行,保证这组命令要么全部执行成功,要么全部执行失败,具有原子性。在 Redis 中,事务是通过 MULTI、EXEC、DISCARD 和 WATCH 这几个命令来实现的。
Redis事务的基本流程如下:
- 使用 MULTI 命令标记事务的开始。
- 在 MULTI 和 EXEC 之间,逐个添加需要执行的命令。
- 使用 EXEC 命令提交事务,Redis 会执行事务中的所有命令。如果 EXEC 成功,则返回事务中所有命令的执行结果;如果其中有任何一个命令执行失败,则整个事务会被回滚。
- 如果在 MULTI 和 EXEC 之间使用 DISCARD 命令取消事务,事务中的所有命令都不会被执行。
Redis事务的特点和要点:
- 原子性:Redis事务具有原子性,事务中的所有命令要么全部执行成功,要么全部失败。
- 隔离性:Redis事务默认是串行执行的,即事务中的命令在执行期间不会被其他客户端的命令打断。
- 持久性:事务提交后的结果会被持久化到磁盘上,即使发生了断电等异常情况,Redis也可以保证事务的执行结果不会丢失。
- WATCH命令:可以使用 WATCH 命令监视一个或多个键,如果在事务执行之前这些键被其他客户端改动了,事务就不会被执行。
Watch监控的基本用法
- 使用 WATCH 命令可以监视一个或多个键,例如:WATCH key1 key2 key3。
- 在调用 MULTI 命令后,Redis 会开始监视这些键。
- 在执行 EXEC 命令前,通过调用 GET 或其他命令来检查被 WATCH 的键是否被修改过。
- 如果被 WATCH 的键在执行 EXEC 命令前被修改,Redis 将取消该事务的执行,返回给调用方一个表示事务已中止的标识。
ps:以下是我整理的java面试资料,密码是obht,感兴趣的可以看看。最后,创作不易,觉得写得不错的可以点点关注!
链接:https://www.yuque.com/u39298356/uu4hxh?# 《Java面试宝典》