百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

(Redis基础教程之十) 如何在Redis中运行事务

mhr18 2024-11-02 12:01 24 浏览 0 评论

介绍

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

运行后multi,redis-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/ 如果你喜欢本文,请长按二维码,关注 分布式编程 .

相关推荐

使用 Docker 部署 Java 项目(通俗易懂)

前言:搜索镜像的网站(推荐):DockerDocs1、下载与配置Docker1.1docker下载(这里使用的是Ubuntu,Centos命令可能有不同)以下命令,默认不是root用户操作,...

Spring Boot 3.3.5 + CRaC:从冷启动到秒级响应的架构实践与踩坑实录

去年,我们团队负责的电商订单系统因扩容需求需在10分钟内启动200个Pod实例。当运维组按下扩容按钮时,传统SpringBoot应用的冷启动耗时(平均8.7秒)直接导致流量洪峰期出现30%的请求超时...

《github精选系列》——SpringBoot 全家桶

1简单总结1SpringBoot全家桶简介2项目简介3子项目列表4环境5运行6后续计划7问题反馈gitee地址:https://gitee.com/yidao620/springbo...

Nacos简介—1.Nacos使用简介

大纲1.Nacos的在服务注册中心+配置中心中的应用2.Nacos2.x最新版本下载与目录结构3.Nacos2.x的数据库存储与日志存储4.Nacos2.x服务端的startup.sh启动脚...

spring-ai ollama小试牛刀

序本文主要展示下spring-aiollama的使用示例pom.xml<dependency><groupId>org.springframework.ai<...

SpringCloud系列——10Spring Cloud Gateway网关

学习目标Gateway是什么?它有什么作用?Gateway中的断言使用Gateway中的过滤器使用Gateway中的路由使用第1章网关1.1网关的概念简单来说,网关就是一个网络连接到另外一个网络的...

Spring Boot 自动装配原理剖析

前言在这瞬息万变的技术领域,比了解技术的使用方法更重要的是了解其原理及应用背景。以往我们使用SpringMVC来构建一个项目需要很多基础操作:添加很多jar,配置web.xml,配置Spr...

疯了!Spring 再官宣惊天大漏洞

Spring官宣高危漏洞大家好,我是栈长。前几天爆出来的Spring漏洞,刚修复完又来?今天愚人节来了,这是和大家开玩笑吗?不是的,我也是猝不及防!这个玩笑也开的太大了!!你之前看到的这个漏洞已...

「架构师必备」基于SpringCloud的SaaS型微服务脚手架

简介基于SpringCloud(Hoxton.SR1)+SpringBoot(2.2.4.RELEASE)的SaaS型微服务脚手架,具备用户管理、资源权限管理、网关统一鉴权、Xss防跨站攻击、...

SpringCloud分布式框架&amp;分布式事务&amp;分布式锁

总结本文承接上一篇SpringCloud分布式框架实践之后,进一步实践分布式事务与分布式锁,其中分布式事务主要是基于Seata的AT模式进行强一致性,基于RocketMQ事务消息进行最终一致性,分布式...

SpringBoot全家桶:23篇博客加23个可运行项目让你对它了如指掌

SpringBoot现在已经成为Java开发领域的一颗璀璨明珠,它本身是包容万象的,可以跟各种技术集成。本项目对目前Web开发中常用的各个技术,通过和SpringBoot的集成,并且对各种技术通...

开发好物推荐12之分布式锁redisson-sb

前言springboot开发现在基本都是分布式环境,分布式环境下分布式锁的使用必不可少,主流分布式锁主要包括数据库锁,redis锁,还有zookepper实现的分布式锁,其中最实用的还是Redis分...

拥抱Kubernetes,再见了Spring Cloud

相信很多开发者在熟悉微服务工作后,才发现:以为用SpringCloud已经成功打造了微服务架构帝国,殊不知引入了k8s后,却和CloudNative的生态发展脱轨。从2013年的...

Zabbix/J监控框架和Spring框架的整合方法

Zabbix/J是一个Java版本的系统监控框架,它可以完美地兼容于Zabbix监控系统,使得开发、运维等技术人员能够对整个业务系统的基础设施、应用软件/中间件和业务逻辑进行全方位的分层监控。Spri...

SpringBoot+JWT+Shiro+Mybatis实现Restful快速开发后端脚手架

作者:lywJee来源:cnblogs.com/lywJ/p/11252064.html一、背景前后端分离已经成为互联网项目开发标准,它会为以后的大型分布式架构打下基础。SpringBoot使编码配置...

取消回复欢迎 发表评论: