Redis——事务实现以及应用场景

news/2025/3/20 19:13:52/

        本文介绍Redis事务相关的原理以及知识点,从redis的常用命令出发,深入理解redis在日常工作中的实际场景使用用法。

本文目录

    • 一、Redis事务简介
    • 二、事务相关命令
    • 三、事务应用场景

一、Redis事务简介

Redis 事务本质上是一个命令队列。用户可以使用MULTI命令开启一个事务块,在这个块内,后续输入的命令不会立即执行,而是被缓存到一个队列中。当调用EXEC命令时,Redis 会按顺序依次执行队列中的所有命令。如果在事务执行过程中发生错误,Redis 默认不会回滚已经执行的命令。不过,从 Redis 2.6.5 版本开始,如果在EXEC执行前发现命令入队错误(命令语法错误),整个事务将不会执行。


二、事务相关命令

1.MULTI:用于开启一个事务块,标志着事务的开始。在执行MULTI之后,Redis 进入事务状态,后续输入的命令将被存入事务队列。

MULTI

2.EXEC:用于触发事务的执行。Redis 会按顺序执行事务队列中的所有命令,并返回每个命令的执行结果。如果在事务执行过程中某个命令失败,会继续执行后续命令,而不会回滚之前已执行的命令。

SET name "redis"
SET age  10
EXEC

如上,SET name "redis"SET age 10两条命令会被依次执行。

  1. DISCARD:用于取消事务。在调用MULTI开启事务后,执行DISCARD会清空事务队列,取消事务的执行,Redis 会退出事务状态。
MULTI
SET name "redis"
DISCARD

原本入队的SET name "redis"命令不会被执行,事务被取消。

  1. WATCHWATCH命令用于为事务提供乐观锁机制。可以监控一个或多个键,在执行EXEC命令时,如果被监控的键在事务开启后被其他客户端修改,那么整个事务将不会执行,并返回(nil)
WATCH name
MULTI
GET name
SET name "redis1"
EXEC

如上,如果在WATCH name之后,EXEC执行之前,name被其他客户端修改,那么GET nameSET name "redis1"这两个命令都不会执行。


三、事务应用场景

要注意,redis中的事务并不能保证强一致性,因为Redis事务在命令执行失败时默认不回滚已执行命令,如果需要实现强一致性需要结合业务逻辑以及WATCH进行实现,所以它只适用于弱一致性场景。

常使用的弱一致性场景:
点赞计数场景:在社交平台中,用户对一篇帖子进行点赞操作。可以使用Redis事务来增加帖子的点赞数,并记录点赞用户的信息,然后通过消息队列进行数据同步持久化。

MULTI​
# 增加帖子点赞数​
INCR post:1:like_count​
# 记录点赞用户​
SADD post:1:likers user:5​
EXEC



← 上一篇 Java进阶——常用类及常用方法详解
记得点赞、关注、收藏哦!
下一篇 Java进阶——数组超详细整理 →

http://www.ppmy.cn/news/1580660.html

相关文章

Sequential Thinking:AI时代的“项目管理革命“——重新定义人类与AI的协作范式

一、从"混沌指令"到"结构化智慧"的跨越 2025年2月,GitHub Copilot Labs发布的最新数据显示,使用Sequential Thinking工具的开发者团队,项目延期率下降67%,需求变更响应速度提升3.2倍。这场悄然发生的效率革命…

TimeGAN:开启时间序列生成新纪元,结合GAN与自回归模型的优势

今天周末,给大家介绍一篇时序数据生成网络TimeGAN,一种用于时间序列生成的新框架,它将无监督GAN方法的多功能性与有监督自回归模型对条件时间动态的控制相结合。通过利用有监督损失和联合训练的嵌入网络,TimeGAN在生成逼真的时间序…

算法刷题记录——LeetCode篇(2) [第101~200题](持续更新)

(优先整理热门100及面试150,不定期持续更新,欢迎关注) 101. 对称二叉树 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true示例 2: 输入&am…

10、基于osg引擎生成热力图高度图实现3D热力图可视化、3D热力图实时更新(带过渡效果)

1、结果 2、完整C代码 #include <sstream> #include <iomanip> #include <iostream> #include <vector> #include <random> #include <cmath> #include <functional> #include <osgViewer/viewer> #include <osgDB/Read…

C++20 线程协调类:从入门到精通

文章目录 1. 初识线程协调2. std::barrier&#xff1a;多线程同步的屏障2.1 核心函数2.2 示例代码2.3 高级用法2.4 适用场景 3. std::latch&#xff1a;一次性同步原语3.1 核心函数3.2 示例代码3.3 高级用法3.4 适用场景 4. std::counting_semaphore&#xff1a;可重用的同步原…

UMA架构下的GPU 显存

GPU 显存 (Graphics Memory) 在大多数现代设备&#xff08;包括 Android 手机、嵌入式设备等&#xff09;上&#xff0c;确实是使用 DDR&#xff08;Double Data Rate SDRAM&#xff09; 类型的内存。 不过&#xff0c;具体实现方式根据硬件架构有所不同&#xff0c;主要分为以…

API 返回的PDF是一串字符,如何转换为PDF文档

当API返回的PDF是以一串字符的形式&#xff08;通常是Base64编码的字符串&#xff09;&#xff0c;你可以将其解码为二进制数据&#xff0c;然后保存为PDF文件。以下是一个简单的Python示例&#xff0c;展示如何将Base64编码的PDF字符串转换为PDF文档&#xff1a; import base…

华为云虚拟化技术

‌华为云底层的虚拟化技术‌是一种将物理资源&#xff08;如服务器、存储设备和网络&#xff09;抽象成虚拟资源的技术。通过这种技术&#xff0c;用户可以将物理资源划分为多个虚拟资源&#xff0c;从而提高资源利用率和灵活性‌1。 华为云底层虚拟化的定义和作用 华为云底层…