redis 事务

华为OD面试八股真题 - 操作系统相关 - 2 华为OD技术面,操作系统相关八股真题提供详细解答,这篇博客主要涉及于进程和线程相关知识点 阅读详情

redis的事务可以分为两步,定义事务和执行事务。使用multi命令开启一个事务,然后把要执行的所有命令都依次排上去。这就定义好了一个事务。此时使用exec命令来执行这个事务,或使用discard命令来放弃这个事务。

MULTI

开启事务

EXEC

执行事务

  127.0.0.1:9001> multi 
    OK
    127.0.0.1:9001> set a 1
    QUEUED
    127.0.0.1:9001> set a 1 1
    QUEUED
    127.0.0.1:9001> set a 2
    QUEUED
    127.0.0.1:9001> exec
    1) OK
    2) (error) ERR syntax error
    3) OK
    127.0.0.1:9001> get a
    "2"

DISCARD

取消事务

127.0.0.1:9001> multi 
OK
127.0.0.1:9001> set a 3
QUEUED
127.0.0.1:9001> DISCARD
OK
127.0.0.1:9001> get a
"2"

WATCH

监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

场景:你可能希望在你的事务开始前,你关心的key不想被别人操作,那么可以使用watch命令来监视这些key,如果开始执行前这些key被其它命令操作了则会取消事务的。也可以使用unwatch命令来取消对这些key的监视。

由于WATCH命令的作用只是当被监控的键值被修改后阻止之后一个事务的执行,而不能保证其他客户端不修改这一键值,所以我们需要在EXEC执行失败后重新执行整个函数。

127.0.0.1:9001> watch a
OK
127.0.0.1:9001> set a 3
OK
127.0.0.1:9001> multi
OK
127.0.0.1:9001> set a 4
QUEUED
127.0.0.1:9001> exec
(nil)
127.0.0.1:9001> get a
"3"

执行EXEC命令后会取消对所有键的监控,如果不想执行事务中的命令也可以使用UNWATCH命令来取消监控。

127.0.0.1:9001> watch a
OK
127.0.0.1:9001> set a 4
OK
127.0.0.1:9001> unwatch
OK
127.0.0.1:9001> multi
OK
127.0.0.1:9001> set a 5
QUEUED
127.0.0.1:9001> exec
1) OK
127.0.0.1:9001> get a
"5"

redis事务具有以下特点:

1、如果开始执行事务前出错,则所有命令都不执行

2、一旦开始,则保证所有命令一次性按顺序执行完而不被打断

3、如果执行过程中遇到错误,会继续执行下去,不会停止的

4、对于执行过程中遇到错误,是不会进行回滚的

很显然,这并不是我们通常认为的事务,因为它连原子性都保证不了。保证不了原子性是因为redis不支持回滚,不过它也给出了不支持的理由。

不支持回滚的理由:

1、redis认为,失败都是由命令使用不当造成

2、redis这样做,是为了保持内部实现简单快速

3、redis还认为,回滚并不能解决所有问题

基于物联网技术设计的微型消防小车控制系统(STM32+ESP8266局域网)(181) 基于物联网技术的小微型消防车控制系统。通过远程控制功能,用户能够灵活操作消防车的行驶,方便快速抵达火灾现场。环境感知功能实时采集烟雾浓度、温湿度信息,为灭火决策提供科学依据。火源定位功能采用自动和手动两种模式,准确迅速地定位火源,并通过报警提示用户。灭火功能则根据火源定位结果,自动或手动启动干粉灭火器进行高效灭火。这些功能的结合实现了对小型火灾的全面应对,提升了消防效率与安全性,减少了火灾带来的损失。通过本项目的设计与实现,为消防领域提供了一种创新且实用的解决方案。 阅读详情

相关推荐

【scp】Windows 下scp报错 bad permissions

Windows 下使用 SSH 连接报 Bad owner or permissions on C:\\Users\\Administrator/.ssh/config 错误问题解决 C:\Users\Administrator>scp -P 66666 D:\1111.pdf zzd@58.213.45.xx:/home/zzd/ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING:...

走在搬砖的路上! 4154

说说你对Redis事务的理解

Redis 事务(transaction)提供了一种将多个命令打包为一个单一的原子操作执行的机制。在 Redis 中,事务确保一组命令按顺序执行,并且在事务执行期间不会被其他客户端的命令干扰。

wupanP的博客 539

Hi3559AV100制作ext4文件系统和烧录emmc

1、首先生成所需文件系统,见本博客<Hi3559AV100文件系统制作cramfs>。 2、使用工具生成EXT4文件系统 ./make_ext4fs -s -l 96M rootfs_hi3559av100.ext4 ./rootfs 3、烧录文件系统 mw.b 0x82000000 ff 0x12C00000;tftp 0x82000000 STM_...

阿Sir问道 7033

Redis之事务的实现

Redis事务和数据库的事务严格意义来说是不一样的,Redis的事务是通过一组命令的集合,Redis事务提供了一种将多个命令请求打包,然后一次性的、按顺序的执行多个命令的机制,并且在事务执行期间,服务器不会中断事务而去执行其他客户端的命令请求,它会将事务中的所有命令都执行完毕,然后才去执行其他客户端的命令请求。 Redis 通过 MULTI(标记一个事务块的开始) 、 EXEC(执行) 、DISCARD(放弃执行事务块内的所有命令)和 WATCH(乐观锁) 四个命令来实现事务功能。一个事务从开始到结束通常会

程铭程铭你快成名的博客 1万+

激光SLAM总结——Fast LIO / Fast LIO2 / Faster LIO

激光SLAM总结——Fast LIO / Fast LIO2 / Faster LIO 在之前的工作中有接触过LOAM,最近在工作中又接触到Faster LIO相关的工作,于是想着对Fast LIO / Fast LIO2 / Faster LIO这一系列工作进行一个简单的总结,以加深自己对激光SLAM算法的理解,之前总结过的一些和激光SLAM算法相关的博客还有,感兴趣的同学可以一起学习讨论: 激光SLAM总结——VLOAM / LIMO算法解析 激光SLAM总结——LIO-Mapping / LIOM /

weixin_44580210的博客 1万+

CST入门——0. 安装CST Studio Suite 2022

安装CST Studio Suite 2022详细操作步骤

plmxu34的博客 6万+

redis——事务

Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证: 批量操作在发送 EXEC 命令前被放入队列缓存。 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。 一个事务从开始到执行会经历以下三个阶段: 开始事务。 命令入队。 执行事务。 以下是一个事务的例子, 它先以M...

少说,多做。 4501

rk3588 适配音频解码芯片 ALC5616

在 RK3588 的高性能方案中,选择 **ALC5616**(来自 Realtek 瑞昱)通常意味着项目更侧重于**音频性能的稳定性**以及**全球供应链的通用性**。

weixin_35723192的博客 142

详解Redis之事务

详解Redis的事务,包括概念,特性,常用命令及使用演示。

. 1万+

不提交也不释放的事务,数据库连接还有可能被复用

摘要 实验发现Spring事务管理下,未提交事务的数据库连接池连接仍可被复用,这与传统认知相悖。通过配置HikariCP连接池(最大2连接)并设计测试接口,观察到未提交事务的连接会被后续请求复用。这可能导致GTID错误(当MySQL开启GTID且混用事务/非事务表时)以及数据修改丢失问题。研究揭示了Spring事务管理机制与连接池交互的特殊行为,对高并发系统设计具有重要启示。

蔡定努 174

概率的接力:拆解大模型“预测下一个词“的底层逻辑

大模型的智能不在于它拥有了意识,而在于它用纯数学的架构,将人类语言的复杂结构压缩为可计算的向量轨迹与概率接力。当我们不再将其拟人化为"思考者",而是视作高维条件概率引擎时,才能真正驾驭它。预测下一个词,从来不是终点,而是起点。未来的核心竞争力,属于那些能洞察其统计本质、善用其模式生成能力,并以人类理性与事实为锚点的协作者。词元的轨迹终会止步于上下文窗口,但对技术底层的清醒认知,才是跨越幻觉、走向真实智能的基石。

AI浩 328

【Redis】事务

【Redis】事务

m0_72563041的博客 998

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Redis事务

Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

javaJasonjava的博客 1139

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

[Redis][事务]详细讲解

[Redis][事务]详细讲解

SnowK博客 5322

[Redis] Redis事务

🏵️热门专栏:🧊 Java基本语法(97平均质量分)🍕 Collection与数据结构 (92平均质量分)🧀线程与网络(96平均质量分)🍭MySql数据库(93平均质量分)🍬算法(97平均质量分)🍃 Spring(97平均质量分)🎃Redis(97平均质量分)🐰RabbitMQ(97平均质量分)

无需多言 2125

Redis之Redis事务

文章目录一、Redis事务的概念二、Redis事务没有隔离级别的概念三、Redis不保证原子性四、Redis事务的三个阶段五、Redis事务相关命令六、Redis事务使用案例总结 Redis之Redis事务 一、Redis事务的概念 Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。 总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命

weixin_37548768的博客 1万+

Redis 事务

Redis 事务 Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证: 批量操作在发送 EXEC 命令前被放入队列缓存。 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。 一个事务从开始到执行会经历以下三个阶段: 开始事务。 命令入队。 执行事务。 以下是一个事务的例子...

努力奔跑 2万+

redis的事务

redis通过 multi, exec等命令来实现事务功能,是一种在一个事务内,将事务内的多个请求打包,然后一次性、按顺序地执行多个命令,在事务执行期间,服务器而改去执行其他客户端的命令请求,它会将事务中的所有命令都执行完毕,然后才去处理其他客户端的命令请求。

Zj_boring的博客 1776

《Redis》事务

Redis的原子性与事务机制与MySQL有显著差异。Redis事务通过队列实现批量执行命令,不具备回滚机制、隔离性和一致性保证,仅确保命令连续执行。使用MULTI、EXEC、DISCARD等命令管理事务,WATCH命令通过乐观锁机制监控键值变化。Redis事务适用于简单场景如抢票系统,但功能弱于传统数据库事务,无法处理复杂的数据一致性问题,本质上是通过事务队列实现命令的批量执行。

如果需要沟通,可添加微信公众号找我免费答疑 746

【Redis入门到精通八】Redis事务与MySQL事务对比

事务的概念其实就是把一系列操作绑定成一组,让这一组操作能够批量执行,不过在MySQL中有复杂的机制能够保证这一组操作执行并且一定能成功执行,否则就一条也执行不了,但是Redis中的事务就没有这么靠谱,它只负责把操作绑在一起,如果其中有执行失败的操作,事务无法自动回滚。Redis 事务本质上是在服务器上搞了⼀个 "事务队列". 每次客⼾端在事务中进⾏⼀个操作, 都会把命令先发给服务器, 放到 "事务队列" 中(但是并不会立即执行),而是会在真正收到 EXEC 命令之后, 才真正执行队列中的所有操作.

2203_75565612的博客 1110

【redis进阶】Redis 事务

watch 必须搭配事务使用,并且必须在 mutli 之前使用,当执行 watch key 的时候就会给这个 key 安排一个 版本号,版本号可以理解成一个 "整数" 每次在修改的时候,版本号都会 "变大",watch 本质上是给 exec 加了个判定条件,在执行 事务 中命令的时候,此处就会做出判定,判定当前这个 key 的版本号,和最初 watch 的时候记录的版本号 是否 一致!在执行事务的时候,如果某个事务中修改的值,被别的客户端修改了,此时就容易出现数据不一致的问题。

qq_52842680的博客 1029

redis事务

Redis 的事务和 MySQL 的事务概念上是类似的. 都是把⼀系列操作绑定成⼀组. 让这⼀组能够批量执⾏. 但是注意体会 Redis 的事务和 MySQL 事务的区别: - 弱化的原⼦性: redis 没有 "回滚机制". 只能做到这些操作 "批量执⾏". 不能做到 "⼀个失败就恢复到初始状态". - 不保证⼀致性: 不涉及 "约束". 也没有回滚. MySQL 的⼀致性体现的是运⾏事务前和运⾏后 , 结果都是合理有效的, 不会出现中间⾮法状态.

m0_72532428的博客 863
上一篇: redis 常用数据结构
下一篇: redis 管道
lfwer
博客等级 码龄18年 8粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值