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事务的主要内容,如果未能解决你的问题,请参考以下文章

Redis源代码分析(十七)--- multi事务操作

redis代码解析-事务

Redis事务入门及命令

19 事务 相关操作

19 事务 相关操作

Redis事务入门及命令