REDIS基础事务操作

REDIS事务操作

前置知识

什么是事务?
  • 一般来讲,事务是具有ACID特性的

在这里插入图片描述

  • 事务:一般是指一系列指令的集合
    • 原子性:事务是一个最小的操作单位,不可分割
    • 一致性:事务总是会从一个状态转换到另外一个状态,中间不会发生任何失掉信息的理解,即前后状态是一致的
    • 隔离性: 事务之间的操作是相互隔离的,相互不会影响彼此之间的操作
    • 持久性: 事务一旦被提交,且会被一直储存在数据库中

REDIS事务

  • 但是在redis中,按照原本的事务定义(是一系列指令的集合),是不具备原子性质的,这其实也是redis本身的命令特征来导致的结构,使用一系列指令操作来对数据库进行操作,没有明确的逻辑限制,这也是非关系数据库的一些特点,但是对于redis来说,单个命令是具有原子性的

  • 当指令进行集合的时候,如果单个指令语句出现错误,在运行时异常的时候,是不会完全影响整体其他事务操作的,也就是单个出错抛出异常,但是其他正确的语句是仍然会执行的

    ​ 当语法首先能够通过时,但是其中逻辑操作错误,redis是检测不到的,所以这个时候事务提交是完全正确的,但是逻辑操作出现错误是不会影响其中其他指令操作的

    • 127.0.0.1:6379> multi
      OK
      127.0.0.1:6379(TX)> set someonget dongqing
      QUEUED
      127.0.0.1:6379(TX)> set wangwu push
      QUEUED
      127.0.0.1:6379(TX)> set getone outofthis
      QUEUED
      127.0.0.1:6379(TX)> incr getone
      QUEUED
      127.0.0.1:6379(TX)> exec
      1) OK
      2) OK
      3) OK
      4) (error) ERR value is not an integer or out of range
      127.0.0.1:6379> get wangwu
      "push"
      127.0.0.1:6379> 
      
      
  • 当在编译异常(编码异常时)时候,则会出现整体事务的影响操作

    • 出现异常时提交操作

      当出现语法异常的时候,你的整体事务都是无法提交的

    • 127.0.0.1:6379> multi
      OK
      127.0.0.1:6379(TX)> set jack jocker
      QUEUED
      127.0.0.1:6379(TX)> set no kongwo
      QUEUED
      127.0.0.1:6379(TX)> set push getsomething
      QUEUED
      127.0.0.1:6379(TX)> setget push
      (error) ERR unknown command 'setget', with args beginning with: 'push' 
      127.0.0.1:6379(TX)> exec
      (error) EXECABORT Transaction discarded because of previous errors.
      127.0.0.1:6379> get push
      (nil)
      127.0.0.1:6379> 
      
      

事务的创建理解:如下

事务的生命周期(重点理解)

  1. 创建(开始)一个事务
  2. …指令集
  3. 结束一个事务(取消一个事务)

redis还是不同于mysql中的事务操作,mysql事务里面还是存在一些回滚操作,但是redis中就不存在这类的理解

官网的理解

这里只进行基础的几大操作,关于unwatch 以及watch后面锁机制会详细去理解

在这里插入图片描述

  • multi 事务的开始
    • 注:事务一旦被创建了,左侧的redis命令端口就会出现一个TX(事务缩写),注意,所见即所得
    • 本人还是不太喜欢所见即所得,真正的内涵永远都是蕴含着表面之下的,如何理解才是必要的
127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set dongqing jack
QUEUED
127.0.0.1:6379(TX)> set fbcd queen
QUEUED
127.0.0.1:6379(TX)> set no1 king
QUEUED
127.0.0.1:6379(TX)> set no2 ace
QUEUED
127.0.0.1:6379(TX)> exec
1) OK
2) OK
3) OK
4) OK
127.0.0.1:6379> mget dongqing fbcd no1 no2
1) "jack"
2) "queen"
3) "king"
4) "ace"
127.0.0.1:6379> keys *
1) "no2"
2) "no1"
3) "fbcd"
4) "dongqing"
127.0.0.1:6379> 

  • discard 事务的取消操作
127.0.0.1:6379> multi 
OK
127.0.0.1:6379(TX)> set queen queen
QUEUED
127.0.0.1:6379(TX)> set toget thefirstone
QUEUED
127.0.0.1:6379(TX)> discard
OK
127.0.0.1:6379> get queen
(nil)
127.0.0.1:6379> 

```=

.0.0.1:6379(TX)> set toget thefirstone
QUEUED
127.0.0.1:6379(TX)> discard
OK
127.0.0.1:6379> get queen
(nil)
127.0.0.1:6379> 

欢迎关注我的频道,我是一名爱生活的程序员:),随时更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值