7. Redis 事务
创建时间:2025-10-26 10:47
长度:1318
浏览:0
评论:0
Redis事务一次可以执行多条命令,按照命令的顺序进行串行化执行,执行命令的时候不允许其他命令插入,不许加塞。(保证原子性)
一个 Redis 事务从开始(MULTI)到执行(EXEC)的过程,这段时间内所有的命令都会被序列化、入队,在EXEC 命令被调用时
一次性、按顺序地执行。
开始事务、命令入队、执行事务
Redis 事务可以通过以下四个命令来实现:
- MULTI:它标记了一个事务块的开始。MULTI 命令之后的所有命令不会立即执行,而是缓存在服务器的一个事务队列中,然后当 EXEC命令被调用时一次性、按顺序地执行。
 - EXEC:它标记事务的提交,它的作用是触发服务器执行所有在 MULTI 之后入队的命令。
 - DISCARD:如果客户端在 MULTI 之后决定取消事务,那么它可以调用 DISCARD 命令来做这件事。调用DISCARD 之后,服务器会清空事务队列,并将客户端的状态从事务状态调整回非事务状态。
 - WATCH key [key ..]:WATCH 命令用于在执行事务前监控一个或多个键,以此来达到乐观锁的效果。如果在调用 EXEC命令执行事务之前,有其他客户端抢先对任何一个被监视的键进行了替换、更新、删除等操作,那么当客户端尝试执行事务时,服
 
务器将返回一个错误,客户端可以在这时选择重试事务或者放弃事务。
注意:Redis 的事务不支持回滚,即如果事务执行过程中出现错误,Redis 只是简单地止执行后续的命令,但是不会回滚已经执,行的命令。
Redis 的事务虽然简单,但是由于其原子性,通常足够应对绝大部分需要使用事务的场景。
一个事务的演示
huangcy@macBook ~ % redis-cli
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> SET name huangcy
QUEUED
127.0.0.1:6379(TX)> SET age 18
QUEUED
127.0.0.1:6379(TX)> GET name
QUEUED
127.0.0.1:6379(TX)> get age
QUEUED
127.0.0.1:6379(TX)> EXEC
1) OK
2) OK
3) "huangcy"
4) "18"
127.0.0.1:6379>watch命令
WATCH 是 Redis的一个事务命令,它为 Redis提供了乐观锁(Optimistic Locking)的功能。这使得你可以在执行事务时添加一种并发控制机制。
秒杀业务就是通过Redis的watch命令来实现乐观锁实现功能
在 Redis 中,WATCH 命令可以用来监视一个或多个 key,如果在事务执行之前这些key 的值发生了改变,那么事务将会被打断。
注意:一旦执行了 EXEC 或 DISCARD 命令,所有的 WATCH 监控都会被取消。
工作流程
1. WATCH 一个或多个 key。
2.创建事务,即发送^MULTI命委。
3.发送一系列的命令。
4. 执行事务,即发送 EXEC命令。此时,如果任何被WATCH 的key 自你开始 WATCH 以来已被其他客户端更改,那么 EXEC将失败,事务被打断。