redis事务的概念
1.事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
2.事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
help @transactions
#redis事务相关方法
DISCARD -
summary: Discard all commands issued after MULTI
since: 2.0.0
#提交事务
EXEC -
summary: Execute all commands issued after MULTI
since: 1.2.0
#开启事务
MULTI -
summary: Mark the start of a transaction block
since: 1.2.0
UNWATCH -
summary: Forget about all watched keys
since: 2.2.0
#事务监控
WATCH key [key ...]
summary: Watch the given keys to determine execution of the MULTI/EXEC block
since: 2.2.0
测试事务操作
1.MULTI - EXEC
MULTI - OK #开启事务
set k1 aa - QUEUED #把操作加入队列
set k2 bbb - QUEUED #把操作加入队列
exec #提交,同时执行了两个操作
1) OK
2) OK
2.同时进行事务操作
如下图,最后的执行结果是怎么样的呢?
结论:不管开启事务的顺序,以先提交的事务为准,最后k1被删除,1号进程get k1失败,代码可以根据此图自行补全= =
3.WATCH
如果发现k1被更改,就会撤回事务,产生的后果client捕获后自行处理
事务操作的应用场景
可以类比mysql事务,场景很多。比如上一节的案例中,我们可以使用事务,将发布订阅、sorted_set写入和数据库写入作为一个事务处理。