【2023】Redis事务

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 【2023】Redis事务

1.什么是Redis事务

Redis事务是一组命令的集合,这些命令要么全部执行,要么全部不执行。它们被视为一个单独的操作单元,要么完全成功,要么完全失败。

Redis事务可以用来实现ACID属性(原子性、一致性、隔离性、持久性)。

ACID是一组属性的缩写:

1️⃣:原子性,是指一个Redis事务中的所有操作要么全部完成,要么全部不完成;

2️⃣:一致性是指在事务开始和结束时,数据库的状态必须是一致的;

3️⃣:隔离性是指多个事务之间的操作是相互独立的,不会相互干扰;

4️⃣:持久性是指事务的操作必须被持久化到磁盘上,即使在发生故障时也能恢复数据库状态。

Redis事务通常用于以下几个方面:

1️⃣: 批量操作:使用事务可以将多个操作放在同一批次中执行,以减少网络延迟和服务器负载。这在需要执行多个操作来更新相同数据集的情况下特别有用。

2️⃣:原子性:在事务中执行的所有操作要么全部执行成功,要么全部失败回滚。这种原子性保证了在并发环境下的数据一致性。

3️⃣:锁定操作:事务可以获得锁定某些键,以确保在整个事务执行期间该键不被其他客户端修改。

4️⃣:消息队列:使用Redis事务队列可以将多个命令作为一个原子操作处理,从而在保证数据一致性的同时实现消息队列功能。

总之,Redis事务提供了一种灵活的方式来执行多个操作,保证数据的一致性、并发性和可靠性。

2.Redis事务相关命令

  • multi:开始一个新的redis事务
  • exec:执行一个或多个命令(作为事务结束)
  • discard:放弃当前事务,回滚所有已执行命令
  • commit:提交当前redis事务,确保所有命令执行或不执行是一个整体

3.Redis事务相关示例

通过multi创建一个事务:

  • 普通方式创建一个键值对,返回结果为“OK”
127.0.0.1:6379> set age 20
OK
  • 通过事务方式创建
127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set name 'zhangsan'
QUEUED
127.0.0.1:6379(TX)> get name
QUEUED
127.0.0.1:6379(TX)> set id 001
QUEUED
127.0.0.1:6379(TX)> exec
1) OK
2) "zhangsan"
3) OK

通过multi创建一个事务,事务内执行三条命令,返回结果均为QUEUED,exec会执行事务,并返回该事务内所有执行结果。

通过discard命令撤销事务中的操作:

127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set name1 'yyang'
QUEUED
127.0.0.1:6379(TX)> set age1 24
QUEUED
127.0.0.1:6379(TX)> discard
OK
127.0.0.1:6379> get name1
(nil)
127.0.0.1:6379> get age1
(nil)

事务内操作要么全都做,要么全不做。

通过multi开始一个事务,里面执行两次set,在执行撤销命令后,用get查找键发现是空。

4.Redis持久化与事务持久性关系

Redis持久化是指将Redis数据存储到磁盘上,以保证在重启Redis服务器或发生故障时能够恢复数据库状态。Redis持久化可以使用RDB和AOF两种持久化策略之一,其中RDB持久化使用二进制日志记录数据,而AOF持久化使用追加日志记录数据。

事务持久性是指将一组命令的执行结果存储到磁盘上,以确保在发生故障时能够恢复这些命令的执行结果。事务持久性是通过在每个事务开始和结束时使用SAVE和BGSAVE命令来实现的,这些命令会将事务的执行结果存储到数据库中。

在Redis事务中,如果所有命令的执行都是原子性的,那么所有操作的执行结果都会被自动保存到磁盘上,即使在发生故障时也能恢复事务的执行结果。因此,事务持久性可以通过使用Redis持久化来实现。但是,如果某个命令的执行结果不是原子性的,那么在发生故障时可能无法恢复这些命令的执行结果,因此需要使用事务持久化。

因此,在使用Redis时,建议同时使用Redis持久化和事务持久化,以确保在发生故障时能够恢复数据库状态和命令执行结果。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
7月前
|
NoSQL Redis 数据库
10- 你们用过Redis的事务吗 ? 事务的命令有哪些 ?
```markdown Redis事务包括MULTI、EXEC、DISCARD、WATCH四个命令。虽具备事务功能,但在实际开发中使用较少。 ```
80 7
|
7月前
|
NoSQL Redis 数据库
什么是Redis的事务?
Redis事务提供原子性和顺序性,确保命令按顺序执行且不被打断。核心概念包括原子性、顺序性、隔离性和持久性。关键指令有MULTI、EXEC、DISCARD和WATCH,用于事务的开始、执行、取消和监视。这保障了命令的完整性,防止并发操作导致的数据不一致。
61 2
|
2月前
|
缓存 NoSQL Redis
Redis 事务
10月更文挑战第18天
31 1
|
7月前
|
缓存 NoSQL 数据处理
Redis事务悄然而至:命令的背后故事
Redis事务悄然而至:命令的背后故事
60 0
|
7月前
|
NoSQL Redis
Redis事务:保证数据操作的一致性和可靠性
Redis事务:保证数据操作的一致性和可靠性
124 0
|
4月前
|
负载均衡 NoSQL 算法
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
这篇文章是关于Java面试中Redis相关问题的笔记,包括Redis事务实现、集群方案、主从复制原理、CAP和BASE理论以及负载均衡算法和类型。
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
|
3天前
|
NoSQL Redis
Redis事务长什么样?一文带你全面了解
Redis事务是一组命令的有序队列,通过MULTI、EXEC、WATCH和DISCARD等命令实现原子性操作。事务中的命令在EXEC执行前不会实际运行,而是先进入队列,确保所有命令要么全部成功,要么全部失败。此外,Redis还支持Lua脚本实现类似事务的操作,通常更简单高效。事务适用于购物车结算、秒杀活动、排行榜更新等需要保证数据一致性的场景。
13 0
|
2月前
|
SQL 分布式计算 NoSQL
大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务
大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务
30 2
|
2月前
|
NoSQL 关系型数据库 MySQL
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
本文全面阐述了Redis事务的特性、原理、具体命令操作,指出Redis事务具有原子性但不保证一致性、持久性和隔离性,并解释了Redis事务的适用场景和WATCH命令的乐观锁机制。
399 0
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
|
4月前
|
NoSQL 关系型数据库 Redis
Redis6入门到实战------ 九、10. Redis_事务_锁机制_秒杀
这篇文章深入探讨了Redis事务的概念、命令使用、错误处理机制以及乐观锁和悲观锁的应用,并通过WATCH/UNWATCH命令展示了事务中的锁机制。
Redis6入门到实战------ 九、10. Redis_事务_锁机制_秒杀