栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

redis事务

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

redis事务

事务

事务本质:一组命令的集合一块执行!

一个事务中的所有命令都会被序列化,在事务执行过程中,会按照顺序执行。

由于它们会在一个队列中一并执行,叫一致性

它会按照顺序执行,所以叫顺序性

事务它在执行过程中,不允许别人干扰的,叫排他性

redis单条命令是保存原子性,但是事务是不保证原子性
redis事务没有隔离级别的概念,就不会出现关系型数据库的幻读,不可重复读,脏读等
所有的命令在事务中,并没有直接被执行!只有发起执行命令的时候才会执行

redis的事务包含三个阶段

开启事务(multi)命令入队(…)执行事务(exec) 正常执行事务

127.0.0.1:6379> multi  #开启事务
OK
# 命令入队
127.0.0.1:6379(TX)> set k1 v1
QUEUED
127.0.0.1:6379(TX)> set k2 v2
QUEUED
127.0.0.1:6379(TX)> get k2
QUEUED
127.0.0.1:6379(TX)> set k3 v3
QUEUED
127.0.0.1:6379(TX)> exec  #执行事务
1) OK
2) OK
3) "v2"
4) OK

放弃事务
127.0.0.1:6379> multi  #开启事务
OK
127.0.0.1:6379(TX)> set k1 v1
QUEUED
127.0.0.1:6379(TX)> set k2 v2
QUEUED
127.0.0.1:6379(TX)> set k4 v4
QUEUED
127.0.0.1:6379(TX)> discard  #取消事务
OK
127.0.0.1:6379> get k4  #事务队列中命令都不会被执行
(nil)

编译型异常

代码有问题!命令有错!事务中所有的命令都不会被执行!

127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set k1 v1
QUEUED
127.0.0.1:6379(TX)> set k2 v2
QUEUED
127.0.0.1:6379(TX)> set k4 v4
QUEUED
127.0.0.1:6379(TX)> discard
OK
127.0.0.1:6379> get k4
(nil)
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set k1 v1
QUEUED
127.0.0.1:6379(TX)> set k2 v2
QUEUED
127.0.0.1:6379(TX)> set k3 v3
QUEUED
127.0.0.1:6379(TX)> getset k3  #错误的命令
(error) ERR wrong number of arguments for 'getset' command
127.0.0.1:6379(TX)> set k4 v4
QUEUED
127.0.0.1:6379(TX)> set k5 v5 
QUEUED
127.0.0.1:6379(TX)> exec   #执行事务报错
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get k5  #所有的命令都不会被执行
(nil)

运行时异常

1/0,如果事务队列中存在语法性,那么执行命令的时候,其他命令是可以正常执行,错误命令抛出异常

127.0.0.1:6379> set k1 "v1"
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> incr k1
QUEUED
127.0.0.1:6379(TX)> set k2 v2
QUEUED
127.0.0.1:6379(TX)> set k3 v3
QUEUED
127.0.0.1:6379(TX)> get k3
QUEUED
127.0.0.1:6379(TX)> exec
1) (error) ERR value is not an integer or out of range   #虽然第一条命令报错,但是依然后面正确的命令执行成功!
2) OK
3) OK
4) "v3"
127.0.0.1:6379> get k2 
"v2"
127.0.0.1:6379> get k3
"v3"
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/749422.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号