莲花网站,房天下房官网,牙医工具网站建设课程设计报告,招商网站建设定做一#xff0c;redis-事务是否拥有原子性 Redis的单条命令是保证原子性的#xff0c;但是redis事务不能保证原子性 Redis事务本质#xff1a;一组命令的集合。----------------- 队列 set set set 执行 -------------------事务中每条命令都会被序列化#xff0c;执行过…一redis-事务是否拥有原子性
Redis的单条命令是保证原子性的但是redis事务不能保证原子性 Redis事务本质一组命令的集合。----------------- 队列 set set set 执行 -------------------事务中每条命令都会被序列化执行过程中按顺序执行不允许其他命令进行干扰。一次性
顺序性
排他性
Redis事务没有隔离级别的概念
Redis单条命令是保证原子性的但是事务不保证原子性
Redis事务操作过程
二 Redis事务操作过程 开启事务multi命令入队执行事务exec 所以事务中的命令在加入时都没有被执行直到提交时才会开始执行(Exec)一次性完成。
127.0.0.1:6379 multi # 开启事务
OK
127.0.0.1:6379 set k1 v1 # 命令入队
QUEUED
127.0.0.1:6379 set k2 v2 # ..
QUEUED
127.0.0.1:6379 get k1
QUEUED
127.0.0.1:6379 set k3 v3
QUEUED
127.0.0.1:6379 keys *
QUEUED
127.0.0.1:6379 exec # 事务执行
1) OK
2) OK
3) v1
4) OK
5) 1) k32) k23) k1取消事务(discurd)
127.0.0.1:6379 multi
OK
127.0.0.1:6379 set k1 v1
QUEUED
127.0.0.1:6379 set k2 v2
QUEUED
127.0.0.1:6379 DISCARD # 放弃事务
OK
127.0.0.1:6379 EXEC
(error) ERR EXEC without MULTI # 当前未开启事务
127.0.0.1:6379 get k1 # 被放弃事务中命令并未执行
(nil)
事务错误 代码语法错误编译时异常所有的命令都不执行 127.0.0.1:6379 multi
OK
127.0.0.1:6379 set k1 v1
QUEUED
127.0.0.1:6379 set k2 v2
QUEUED
127.0.0.1:6379 error k1 # 这是一条语法错误命令
(error) ERR unknown command error, with args beginning with: k1, # 会报错但是不影响后续命令入队
127.0.0.1:6379 get k2
QUEUED
127.0.0.1:6379 EXEC
(error) EXECABORT Transaction discarded because of previous errors. # 执行报错
127.0.0.1:6379 get k1
(nil) # 其他命令并没有被执行代码逻辑错误 (运行时异常) **其他命令可以正常执行 ** 所以不保证事务原子性 127.0.0.1:6379 multi
OK
127.0.0.1:6379 set k1 v1
QUEUED
127.0.0.1:6379 set k2 v2
QUEUED
127.0.0.1:6379 INCR k1 # 这条命令逻辑错误对字符串进行增量
QUEUED
127.0.0.1:6379 get k2
QUEUED
127.0.0.1:6379 exec
1) OK
2) OK
3) (error) ERR value is not an integer or out of range # 运行时报错
4) v2 # 其他命令正常执行# 虽然中间有一条命令报错了但是后面的指令依旧正常执行成功了。
# 所以说Redis单条指令保证原子性但是Redis事务不能保证原子性。