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

Redis系列之事务

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

Redis系列之事务

Redis事务 事务简介

什么是事务

redis执行指令过程中,多条连续执行的指令被干扰,打断,插队

redis事务就是一个命令执行的队列,将一系列预定义命令包装成一个整体,当执行时一次性按照添加顺序依次执行,中间不会被打断或干扰

  • Redis单条命令保存是原子性的,但事务不保证原子性
  • Redis没有隔离级别的事务(所有命令在事务中并没有被直接执行,只有发起执行命令才会执行 Exec)

事务特征:一次性、顺序性、排他性

事务基本操作

事务命令

  • 开启事务

    multi

    设定事务的开启位置,此指令执行后,后续的所有指令均加入到事务中

  • 执行/提交事务

    exec

    设定事务的结束位置,同时执行事务,与multi成对出现

注意:加入事务的命令暂时进入到任务队列中,并没有立即执行,只有执行exec命令才开始执行

  • 取消事务

    discard

    种植当前事务的定义,发生在multi之后,exec之前

事务的工作流程

开启事务(multi)
命令入队(XXX命令)
执行(exec)

127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set tx1 test1
QUEUED
127.0.0.1:6379(TX)> set tx2 test2
QUEUED
127.0.0.1:6379(TX)> exec  执行事务  /  discard 放弃事务,上述命令不执行
1) OK
2) OK

事务中两种异常

  • 1.编译性异常也就是语法错误(入队命令有问题),则所有事务中的命令都不执行
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)> getset
(error) ERR wrong number of arguments for 'getset' command  # 放入一个错误命令
127.0.0.1:6379(TX)> set k3 v3
QUEUED
127.0.0.1:6379(TX)> exec
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> keys *
(empty array)   命令都未执行
  • 2.运行时异常,则其他命令执行,错误命令抛出异常
127.0.0.1:6379> set k1 "v1"  #字符串
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> incr k1   # 累加 构造错误:对一个string型+1
QUEUED
127.0.0.1:6379(TX)> set k2 v2
QUEUED
127.0.0.1:6379(TX)> exec
1) (error) ERR value is not an integer or out of range  # 第一个命令报错
2) OK   # 第二个命令正常执行
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/284604.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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