Redis事务
Posted SunnyBigBoy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis事务相关的知识,希望对你有一定的参考价值。
Redis事务
MySQL特性
ACID,是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。
Redis事务本质:一组命令的集合!一个事务的所有的命令都会被序列化,会按照顺序执行!一次性,顺序性,排他性!执行一系列命令!
所有命令在事务中,并没有直接被执行,只有发起执行指令的时候才会执行
Redis 单条命令是保存原子性的,但是事务不保证原子性
Redis事务没有隔离级别的概念
Redis的事务:
- 开启事务(multi)
- 命令入队(.........)
- 执行事务(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> exec
1) OK
2) OK
3) "v1"
4) OK
DISCARD放弃事务,事务中的命令全部不会执行
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set k4 v4
QUEUED
127.0.0.1:6379> DISCARD
OK
127.0.0.1:6379> get k4
(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> set k3 v3
QUEUED
127.0.0.1:6379> getset k3 #错误命令
(error) ERR wrong number of arguments for \'getset\' command
127.0.0.1:6379> set k4 v4
QUEUED
127.0.0.1:6379> set k5 v5
QUEUED
127.0.0.1:6379> exec
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get k2 #所有的命令都不会执行
(nil)
运行时异常(1/0),如果事务队列中存在语法性,那么执行命令的时候其他命令正常执行,错误命令抛出异常
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> incr k1 #字符串不能加1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> exec
1) (error) ERR value is not an integer or out of range #错误信息
2) OK
3) OK
127.0.0.1:6379> get k2 #其他命令执行成功
"v2"
学习参考狂神说java
以上是关于Redis事务的主要内容,如果未能解决你的问题,请参考以下文章