事务


原子性:要么成功,要么失败

一次性:一组命令的集合一次执行

顺序性:入队过程,会按照顺序执行

排他性:执行事务的时候不能被其他东西打扰

Redis单条命令保存原子性,但是事务不保证原子性

Redis事务没有隔离级别的概念,所有的命令在事务中并没有直接被执行。只有发起执行命令的时候才会被执行

  • 开启事务(multi)
  • 命令入队
  • 执行事务 (exec)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
multi  # ok

set k1 v1 # queued

set k2 v2 # queued

exec
# output :
[
{
"value": "PONG"
},
{
"value": "PONG"
},
...
]

每次执行完事务需要重新开启事务才能做新的事务

放弃事务

1
2
3
4
5
multi # ok 
set 1 1 # queued
set 2 2 # queued
discard # ok
exec # output : ERR EXEC without MULTI

异常

  • 编译型异常

    代码有问题,命令有错

    事务中的所有命令都不会执行

  • 运行型异常

    事务队列中存在语法性

    那么在执行命令的时候,其他ming’ling