zoukankan      html  css  js  c++  java
  • Redis事务

    Redis事务处理

    众所周知,事务是指“一个完整的动作,要么全部执行,要么什么也没有做”。

    在聊redis事务处理之前,要先和大家介绍四个redis指令,即MULTIEXECDISCARDWATCH。这四个指令构成了redis事务处理的基础。

    1.MULTI用来组装一个事务;

    2.EXEC用来执行一个事务;

    3.DISCARD用来取消一个事务;

    4.WATCH用来监视一些key,一旦这些key在事务执行之前被改变,则取消事务的执行。

    127.0.0.1:6379> multi                      //标记事务开始

    OK

    127.0.0.1:6379> incr user_id           //多条命令按顺序入队

    QUEUED

    127.0.0.1:6379> incr user_id

    QUEUED

    127.0.0.1:6379> incr user_id

    QUEUED

    127.0.0.1:6379> ping

    QUEUED

    127.0.0.1:6379> exec                      //执行

    1) (integer) 1

    2) (integer) 2

    3) (integer) 3

    4) PONG

    在上面的例子中,我们看到了QUEUED的字样,这表示我们在用MULTI组装事务时,每一个命令都会进入到内存队列中缓存起来,如果出现QUEUED则表示我们这个命令成功插入了缓存队列,在将来执行EXEC时,这些被QUEUED的命令都会被组装成一个事务来执行。

    对于事务的执行来说,如果redis开启了AOF持久化的话,那么一旦事务被成功执行,事务中的命令就会通过write命令一次性写到磁盘中去,如果在向磁盘中写的过程中恰好出现断电、硬件故障等问题,那么就可能出现只有部分命令进行了AOF持久化,这时AOF文件就会出现不完整的情况,这时,我们可以使用redis-check-aof工具来修复这一问题,这个工具会将AOF文件中不完整的信息移除,确保AOF文件完整可用。

    WATCH本身的作用是“监视key是否被改动过”,而且支持同时监视多个key,只要还没真正触发事务,WATCH都会尽职尽责的监视,一旦发现某个key被修改了,在执行EXEC时就会返回nil,表示事务无法触发。

    127.0.0.1:6379> set age 23

    OK

    127.0.0.1:6379> watch age         //开始监视age

    OK

    127.0.0.1:6379> set age 24         //EXEC之前,age的值被修改了

    OK

    127.0.0.1:6379> multi

    OK

    127.0.0.1:6379> set age 26

    QUEUED

    127.0.0.1:6379> get age

    QUEUED

    127.0.0.1:6379> exec             //触发EXEC

    (nil)                                          //事务无法被执行

    Redis并不支持回滚功能。

  • 相关阅读:
    【转载】C++指针随想
    微信小程序实现电子签名
    js数组常用方法
    css文本两端对齐
    js判断某个数组中是否包含另一个数组
    react 限制小数点位数
    原生js 操作class 原生js获取父元素
    转发: JS中的call()和apply()方法和区别 --小白变色记
    fail2Ban ubuntu
    VSCode 搭建 Vue项目 lite-server
  • 原文地址:https://www.cnblogs.com/allenhu320/p/11339845.html
Copyright © 2011-2022 走看看