zoukankan      html  css  js  c++  java
  • (Redis基础教程之十) 如何在Redis中运行事务

    介绍

    Redis是一个开源的内存中键值数据存储。Redis允许您计划一系列命令,然后一个接一个地运行它们,这一过程称为_transaction_。每个事务都被视为不间断且隔离的操作,以确保数据完整性。在执行事务块时,客户端无法运行命令

    本教程介绍了如何执行和取消交易,还包括一些与交易通常相关的陷阱的信息。

    如何使用本指南

    本指南以备有完整示例的备忘单形式编写。我们鼓励您跳至与您要完成的任务相关的任何部分。

    本指南中显示的命令已在运行Redis版本4.0.9的Ubuntu 18.04服务器上进行了测试。要设置类似的环境,您可以按照我们的指南如何在Ubuntu 18.04上安装和保护Redis的步骤1进行操作。我们将通过使用Redis命令行界面运行它们来演示这些命令的行为。请注意,如果您使用其他Redis界面(例如Redli),则某些命令的确切输出可能会有所不同。redis-cli

    另外,您可以提供一个托管的Redis数据库实例来测试这些命令,但是请注意,根据数据库提供者所允许的控制级别,本指南中的某些命令可能无法按所述方式工作。要配置DigitalOcean托管数据库,请遵循我们的托管数据库产品文档。然后,您必须 安装Redli 设置TLS隧道才能通过TLS连接到托管数据库。

    Running Transactions

    multi命令告诉Redis开始事务块。在执行exec命令之前,所有后续命令都将排队等待。

    以下命令形成一个事务块。第一个命令启动事务,第二个命令设置一个包含值的字符串的键1,第三个命令将值增加1,第四个命令将其值增加40,第五个返回字符串的当前值,最后一个返回执行事务块:

    multi
    set key_MeaningOfLife 1
    incr key_MeaningOfLife
    incrby key_MeaningOfLife 40
    get key_MeaningOfLife
    exec

    运行后multiredis-cli将使用响应以下每个命令QUEUED。运行exec命令后,它将分别显示每个命令的输出:

    Output1) OK
    2) (integer) 2
    3) (integer) 42
    4) "42"

    事务块中包含的命令按排队顺序依次运行。Redis事务是_原子的_,这意味着要么处理事务块中的每个命令(意味着它被视为有效命令并排队等待执行),要么不执行。但是,即使命令成功排队,执行时它仍然可能产生错误。在这种情况下,事务中的其他命令仍然可以运行,但是Redis将跳过导致错误的命令。有关更多详细信息,请参见了解事务错误的部分。

    Canceling Transactions

    要取消交易,请运行discard命令。这样可以防止任何先前排队的命令运行:

    multi
    set key_A 146
    incrby key_A 10
    discard
    
    
    OutputOK

    discard命令将连接恢复到正常状态,该状态告诉Redis像往常一样运行单个命令。您需要multi再次运行以告知服务器您正在开始另一笔交易。

    Understanding Transaction Errors

    某些命令可能无法排队,例如语法错误的命令。如果尝试对语法错误的命令进行排队,则Redis将返回错误。

    下面的事务创建了一个名为的键key_A,然后尝试将其增加10。但是,incrby命令中的拼写错误导致并导致错误并关闭了该事务:

    multi
    set key_A 146
    incrbuy key_A 10
    
    
    Output(error) ERR unknown command 'incrbuy'

    如果exec在尝试将命令与类似语法错误的命令放入队列后尝试运行命令,则会收到另一条错误消息,告知您事务已被丢弃:

    exec
    
    
    Output(error) EXECABORT Transaction discarded because of previous errors.

    在这种情况下,您需要重新启动事务块并确保正确输入每个命令。

    一些不可能命令可能的队列,例如运行incr在仅包含字符串的密钥。由于该命令在语法上是正确的,因此,如果您尝试将其包含在事务中,则Redis不会返回错误,也不会阻止您运行exec。在这种情况下,将执行队列中的所有其他命令,但不可能的命令将返回错误:

    multi
    set key_A 146
    incrby key_A "ten"
    exec
    
    
    Output1) OK
    2) (error) ERR value is not an integer or out of range

    有关Redis如何处理事务内部错误的更多信息,请参阅关于此主题官方文档

    Conclusion

    本指南详细介绍了许多用于在Redis中创建,运行和取消事务的命令。如果您想在本指南中概述其他相关的命令,参数或过程,请在下面的评论中提出疑问或提出建议。

    有关Redis命令的更多信息,请参阅关于如何管理Redis数据库的系列教程。

    1. 如何在ubuntu18.04上安装和保护redis
    2. 如何连接到Redis数据库
    3. 如何管理Redis数据库和Keys
    4. 如何在Redis中管理副本和客户端
    5. 如何在Redis中管理字符串
    6. 如何在Redis中管理list
    7. 如何在Redis中管理Hashes
    8. 如何在Redis中管理Sets
    9. 如何在Redis中管理Sorted Sets
    10. 如何在Redis中运行事务
    11. 如何使Redis中的Key失效
    12. 如何解决Redis中的问题
    13. 如何从命令行更改Redis的配置
    14. Redis数据类型简介 作者:分布式编程 出处:https://zthinker.com/ 如果你喜欢本文,请长按二维码,关注 分布式编程 .分布式编程
  • 相关阅读:
    物联网浪潮之下如何从 0 到 1开启智能化硬件开发?
    安卓开发工程师应该这样快速使用机智云APP开源框架
    hdu 1246
    UVa202
    CodeForces
    热身经验被打脸总结大会感想
    多重背包的二进制优化
    背包问题+欧拉筛法
    HDU 1106
    HDU 1215
  • 原文地址:https://www.cnblogs.com/daichangya/p/12958637.html
Copyright © 2011-2022 走看看