• <Redis> 入门三 事务


    Redis事务是什么

      1.可以一次执行多个命令,本质是一组命令的集合。

      2.一个事务中的所有命令都会被序列化,按顺序串行化执行而不会被其他命令插入,不许加塞。

        意味着redis在事务执行的过程中,不允许另一个客户端发出请求,保证了隔离性。

      3.在一个redis事务中,不能保证原子性,下面案例会说明。

    Redis事务可以做什么

      一个队列中,一次性,按顺序,排他的执行一组命令

    Redis事务命令

    怎么使用

    1.multi,exec简单的使用

    multi : 开启事务

    每次输入命令不会马上执行,而是返回queued,表示命令已给服务器接收并且暂时保存起来

    exec : 执行事务

    2.出现错误的情况

    2.1 运行错误

    首先插入了string 类型的 key 为 k1 的数据,之后又插入了 set 类型的 key为 k1 的数据,

    那么在这组命令执行前,redis是无法发现这种非语法错误的

    调用exec后,redis执行,会报出错误信息,但是正确的语句依然会被执行。

    所以可以看出,事务的操作不是原子性的(要么都成功,要么都失败)

    2.2 语法错误

    在插入的时侯,语法发生错误,redis会检测出来

    当执行exec时,所有的操作都会被取消

    所有语法错误的时侯,redis是满足原子性的

    Redis事务不支持回滚功能,需要使用者自己收拾烂摊子

     3.watch的使用

     一旦其中有一个键被修改(或删除),之后的事务就不会执行。

    监控一直持续到exec命令(事务中的命令是在exec之后才执行的,所以在multi命令后可以修改watch监控的键值)。

     3.1 在multi前改变数值

    先设置了 no1 的值为 10,调用watch 监控 no1

    在事务执行前,修改了no1的值

    执行事务,发现事务执行失败

     3.2 在multi中改变值

    在事务外监控av的值,开启事务multi

    改变监控的值,并设置新值,事务执行成功

    可以看出multi后改变监控的值是可以的,因为执行了exec后,watch就失效了

     3.3 再举个例子

    4.discard使用

     

  • 相关阅读:
    How does Android, PHP, SQL, JSON, and Remote Databases work together?
    Gson Json
    Protocol Android
    AsyncTask、多线程及线程通信
    线程-Android
    HTTP请求-Android
    Make Your First Android App
    Git版本控制软件结合GitHub从入门到精通常用命令学习手册
    正向代理设置
    vscode 调试 react 项目
  • 原文地址:https://www.cnblogs.com/mapleins/p/10169482.html
Copyright © 2020-2023  润新知