Redis事务
Redis事务
概念
Redis支持事务 —— 一个请求中执行多个命令
操作
通过 MULTI 和 EXEC/DISCARD 来实现。MULTI 开启一个事务,然后命令加如一个队列,然后 EXEC 命令执行全部
区别 (Reids VS 关系型 )
Redis事务和关系型数据库 (Oracle) 是不一样的。
- 关系型数据库:
- (安全) 事务是原子操作。要么全部执行成功,要么全部执行失败
- Redis:
- (危险) 不能保证命令执行成功。EXEC命令之后命令依次执行,若有命令失败则其他命令依然会被执行
- (安全) 事务执行过程中,其他客户端的请求不会被插入到事务的命令序列中
使用
基本使用
> MULTI # 进入事务模式
OK
(TX)> SET k1 v1
QUEUED # 不是OK而是Queued,表示命令被放入到队列里了。# 此时命令未被执行,其他终端无法通过 `GET k1` 获取到k1
(TX)> SET k2 v2
QUEUED
(TX)> EXEC
1) OK # 执行成功。此时其他终端可以通过 `GET k1` 获取到k1
2) OK
中途失败
感觉这里不是很安全……可能是为了性能考虑的妥协吧
> MULTI
OK
(TX)> INCR k3 # k3是3
QUEUED
(TX)> INCR k4 # k4是"v4",字符串类型,待会会失败
QUEUED
(TX)> INCR k5 # k5是5
QUEUED
> EXEC
1) (integer) 4
2) (error) ERR value is not an integer or out of range # 事务中某个命令失败并不影响其他
3) (integer) 6
链接到当前文件 0
没有文件链接到当前文件