当前位置: 首页 > java >正文

redis-----事务

Redis 事务是一组命令的集合,它可以保证这些命令要么全部执行,要么全部不执行,从而确保数据操作的原子性。

Redis 事务主要通过以下几个命令实现:

  1. MULTI:标记一个事务块的开始
  2. EXEC:执行所有在事务块内的命令
  3. DISCARD:取消事务,放弃执行事务块内的所有命令
  4. WATCH:监视一个或多个键,如果在事务执行前这些键被其他命令修改,事务将被打断

watch要在MULTI之前使用

1.Redis 事务的基本流程:

127.0.0.1:6379> MULTI       # 开始事务
OK
127.0.0.1:6379> SET a 1     # 命令入队
QUEUED
127.0.0.1:6379> SET b 2     # 命令入队
QUEUED
127.0.0.1:6379> GET a       # 命令入队
QUEUED
127.0.0.1:6379> EXEC        # 执行事务
1) OK
2) OK
3) "1"

2.事务的特点:

  • 原子性:事务中的所有命令要么全部执行,要么全部不执行
  • 隔离性:事务执行过程中,不会被其他客户端发送的命令干扰
  • 没有回滚:如果事务中的某个命令执行失败,其他命令仍然会继续执行(这与传统数据库事务不同)

3.使用 WATCH 实现乐观锁:

127.0.0.1:6379> WATCH balance  # 监视balance键
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> INCR balance 100
QUEUED
127.0.0.1:6379> EXEC  # 如果balance在WATCH后被修改,会返回nil
1) (integer) 200

4.注意事项:

  1. Redis 事务不支持传统数据库的回滚机制,如果某个命令执行失败,其他命令仍会继续执行
  2. 事务中的命令会按顺序执行,不会被其他客户端的命令插入(开启事务后,事务中的命令会存放在客户端本地的事务队列中,其他客户端的命令会被 Redis 单线程立即处理(除非当前正在执行阻塞命令)。通过事件循环机制逐个处理命令。当本地客户端exec开始执行事务时,,Redis 会将事务队列中的所有命令一次性取出并按顺序执行,执行期间会阻塞其他客户端的命令)
  3. WATCH 命令可以实现乐观锁,适合并发场景下的数据安全操作
  4. 事务执行期间,Redis 会阻塞其他客户端的请求,因此事务不宜包含过多命令

Redis 事务适合简单的原子性操作,对于复杂的事务需求,可能需要结合其他机制来实现。

http://www.xdnf.cn/news/20386.html

相关文章:

  • SDRAM-08 数据手册解读
  • python系列之综合项目:智能个人任务管理系统
  • HTML标签之超链接
  • 《UE5_C++多人TPS完整教程》学习笔记48 ——《P49 瞄准偏移(Aim Offset)》
  • 【LeetCode热题100道笔记】二叉搜索树中第 K 小的元素
  • Flink-新增 Kafka source 引发状态丢失导致启动失败
  • 2.2 Web和Http
  • 从0死磕全栈第五天:React 使用zustand实现To-Do List项目
  • MySQL事务日志类型及作用解析
  • Eigen中Eigen::Affine3d和Eigen::Isometry3d详解
  • 得物前端二面面经总结
  • LeetCode_数学
  • 解析、创建Excel文件的开源库OpenXLSX介绍
  • ES06-SpringData集成
  • Valgrind检测内存泄漏入门指南
  • ClickHouse 中的物化列与物化视图
  • SpringBoot01-配置文件
  • 未来教育行业的 Go 服务开发解决方案与实践
  • 【PyTorch实战:Tensor】4、NumPy与PyTorch Tensor指南:深度学习中的数据操作与转换
  • Python基础(①⑧Queue)
  • 机床夹具设计 +选型
  • 持续集成和持续交付 (CI/CD) 工具——Jenkins
  • `objdump`与`addr2line`工具详解
  • 新服务器初始化:Git全局配置与SSH密钥生成
  • 【Canvas与图标】古铜色“HTML”图标
  • eclipse 安装 lombok
  • 【基础-单选】下列哪一项不属于ArkUI组件的公共事件?
  • JVM调优总结
  • ECharts Gallery:Apache官方数据可视化模板库,助你快速制作交互图表并实现深度定制
  • 微服务的编程测评系统22-项目部署结束