zoukankan      html  css  js  c++  java
  • redis学习-简单事务

    前言

    redis没有关系型数据库那么强的事务控制。仅可以使用multi、exec、discard等命令实现简单的事务控制。但是事务不会因为操作失败而回滚,也不保证全部成功。(所以≈没卵用)只是单纯的事务内操作顺次提交而已。

    开启事务

    使用multi命令开启事务,开启事务后执行的操作会进入一个队列,事务提交后顺次执行。

    127.0.0.1:6379> multi
    OK
    127.0.0.1:6379> set name zmc
    QUEUED							<==================操作进入队列
    127.0.0.1:6379> set age 18
    QUEUED
    127.0.0.1:6379> set sex male
    QUEUED
    

    提交事务

    使用exec命令提交事务后,从队列中顺次执行操作,并返回执行结果。

    127.0.0.1:6379> multi
    OK
    127.0.0.1:6379> set name zmc
    QUEUED
    127.0.0.1:6379> set age 18
    QUEUED
    127.0.0.1:6379> set sex male
    QUEUED
    127.0.0.1:6379> exec
    1) OK
    2) OK
    3) OK
    127.0.0.1:6379> keys *
    1) "sex"
    2) "age"
    3) "name"
    

    放弃事务

    使用discard命令放弃事务提交后,退出事务状态,且不提交之间的操作。

    127.0.0.1:6379> multi
    OK
    127.0.0.1:6379> set name1 RzZ
    QUEUED
    127.0.0.1:6379> set name2 DT
    QUEUED
    127.0.0.1:6379> discard
    OK
    127.0.0.1:6379> keys *
    1) "sex"
    2) "age"
    3) "name"
    

    事务失败

    1. 失败不回滚

      当一个事务中,某一个操作失败时,redis并不会将已执行的操作进行回滚。

      127.0.0.1:6379> multi
      OK
      127.0.0.1:6379> set addr sz
      QUEUED
      127.0.0.1:6379> incr age
      QUEUED
      127.0.0.1:6379> incr name
      QUEUED
      127.0.0.1:6379> exec
      1) OK
      2) (integer) 19
      3) (error) ERR value is not an integer or out of range	<=============这里执行失败了
      127.0.0.1:6379> keys *
      1) "sex"
      2) "age"
      3) "addr"
      4) "name"
      127.0.0.1:6379> get age
      "19"													<=============但是这两个操作正常提交了
      127.0.0.1:6379> get addr
      "sz"
      
    2. 失败不中断

      事务执行时必然执行完所有操作,即时中间抛出错误,也不影响后面的操作。

      127.0.0.1:6379> exec
      1) (integer) 20
      2) (error) ERR value is not an integer or out of range	<=============这里执行失败了
      3) (integer) 1
      127.0.0.1:6379> get age
      "20"
      127.0.0.1:6379> get addr
      (nil)													<=============但是这个操作正常提交了
      
  • 相关阅读:
    c++语言 运算符重载 使用重载运算符实现类的加法运算
    c++语言 类模板的使用 类模板的实现
    C++语言 通过类模板实现加法计算器
    C++语言 对动物的行为实现多态
    c++语言 友元类和友元方法 将普通函数声明为友元函数
    C++语言 通过构造函数初始化学生信息
    c++语言 静态成员数据和静态方法
    欧拉回路心得
    POJ2965 The Pilots Brothers' refrigerator(枚举)
    HDU1269 迷宫城堡(有向图的强连通分量(scc))
  • 原文地址:https://www.cnblogs.com/bcomll/p/13475345.html
Copyright © 2011-2022 走看看