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

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

本文目录

一、Redis事务简介

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

二、事务相关命令

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

bash 复制代码
MULTI

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

bash 复制代码
SET name "redis"
SET age  10
EXEC

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

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

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

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

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

三、事务应用场景

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

常使用的弱一致性场景:

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

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

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

相关推荐
迷失的walker5 分钟前
【Qt C++ QSerialPort】QSerialPort fQSerialPortInfo::availablePorts() 执行报错问题解决方案
数据库·c++·qt
初学者_xuan21 分钟前
零基础新手小白快速了解掌握服务集群与自动化运维(十五)Redis模块-哨兵集群
运维·redis·自动化
程序新视界23 分钟前
什么是OLTP ,MySQL是如何支持OLTP的?
数据库·后端·mysql
pen-ai43 分钟前
【数据工程】14. Stream Data Processing
数据库·oracle
倔强的石头1061 小时前
【金仓数据库】ksql 指南(三) —— 创建与管理表空间和模式
数据库·金仓数据库
金仓拾光集1 小时前
__金仓数据库平替MongoDB:银行存款系统国产化实践__
数据库·mongodb
流烟默1 小时前
MongoDB入门指南基础篇
数据库·mongodb
金仓拾光集1 小时前
_金仓数据库平替MongoDB实战:制造业生产进度管理的国产化升级之路
数据库·mongodb
熊文豪2 小时前
时序数据库选型指南:从大数据视角看高效存储与分析
大数据·数据库·时序数据库
Lisonseekpan2 小时前
为什么要避免使用 `SELECT *`?
java·数据库·后端·sql·mysql·oracle