1、数据库的事务隔离级别和事务传播机制

【Spring】事务和事务的传播机制 将一组操作封装在一起执行,要么全部成功,要么全部失败。 阅读详情

事务的隔离级别(Isolation Level) 和 传播机制(Propagation Behavior) 是 Java 后端开发中处理数据库事务的两个核心概念。它们虽然都与“事务”有关,但解决的问题完全不同:


✅ 一、事务隔离级别(Isolation Level)

📌 1. 什么是事务隔离级别?

事务隔离级别是数据库层面的概念,用于控制多个并发事务之间的可见性和影响程度,主要解决的是“并发读写”带来的数据一致性问题。

💡 简单说:它决定“一个事务能不能看到另一个事务未提交/已提交的数据”。


📌 2. 四种标准隔离级别(SQL-92标准)

隔离级别脏读(Dirty Read)不可重复读(Non-repeatable Read)幻读(Phantom Read)加锁策略
READ UNCOMMITTED✅ 允许✅ 允许✅ 允许无锁或极少锁
READ COMMITTED❌ 禁止✅ 允许✅ 允许读已提交数据加锁
REPEATABLE READ❌ 禁止❌ 禁止✅ 允许(MySQL默认解决)行锁 + Gap Lock(MySQL)
SERIALIZABLE❌ 禁止❌ 禁止❌ 禁止表锁或范围锁,串行执行

⚠️ 注意:不同数据库对隔离级别的实现略有差异。比如 MySQL 的 REPEATABLE READ 默认通过 MVCC + Next-Key Lock 解决了幻读问题。


📌 3. 三大并发问题详解

(1)脏读(Dirty Read)

事务A读取了事务B未提交的数据,事务B回滚 → 事务A读到了“不存在”的数据。

✅ 示例:

事务B:UPDATE account SET balance = 100 WHERE id = 1; (未提交)
事务A:SELECT balance FROM account WHERE id = 1; → 读到100
事务B:ROLLBACK;
→ 事务A读到的数据是“脏数据”

(2)不可重复读(Non-repeatable Read)

同一个事务内,两次读取同一行数据,结果不一致 → 因为其他事务提交了修改。

✅ 示例:

事务A:SELECT balance FROM account WHERE id = 1; → 100
事务B:UPDATE account SET balance = 200 WHERE id = 1; COMMIT;
事务A:SELECT balance FROM account WHERE id = 1; → 200 (变了!)

(3)幻读(Phantom Read)

同一个事务内,两次执行相同的范围查询,结果集行数不同 → 因为其他事务插入/删除了数据。

✅ 示例:

事务A:SELECT * FROM orders WHERE user_id = 100; → 返回3条
事务B:INSERT INTO orders (user_id) VALUES (100); COMMIT;
事务A:SELECT * FROM orders WHERE user_id = 100; → 返回4条(出现“幻影”行)

🧠 记忆口诀:

  • 脏读 → 读到别人“没提交”的数据
  • 不可重复读 → 同一行数据前后读不一致
  • 幻读 → 同一个查询,多/少了几行

📌 4. 如何设置隔离级别?

✅ 在数据库中设置(MySQL 示例):

-- 查看当前会话隔离级别
SELECT @@transaction_isolation;

-- 设置当前会话隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

✅ 在 Spring 中设置(推荐):

@Transactional(isolation = Isolation.READ_COMMITTED)
public void transferMoney() {
    // ...
}

⚠️ 注意:Spring 设置的隔离级别最终要数据库支持,否则可能被忽略或报错。


✅ 二、事务传播机制(Propagation Behavior)

📌 1. 什么是事务传播机制?

事务传播机制是 Spring 框架层面的概念,用于控制一个带有 @Transactional 的方法被另一个事务方法调用时,事务应该如何“传播”或“行为”。

💡 简单说:它决定“方法A调用方法B时,B用哪个事务?是挂起?加入?还是新建?”


📌 2. 七种传播行为(Spring 定义)

传播行为含义适用场景
REQUIRED(默认)如果当前存在事务,则加入;否则新建最常用,适用于大多数业务方法
SUPPORTS如果当前存在事务,则加入;否则以非事务方式执行查询类方法,不强制要求事务
MANDATORY必须在事务中运行,否则抛异常强一致性操作,如扣库存
REQUIRES_NEW总是新建事务,挂起当前事务(如果存在)日志记录、发消息,需独立提交
NOT_SUPPORTED以非事务方式执行,挂起当前事务调用外部服务、耗时操作
NEVER不能在事务中运行,否则抛异常明确禁止事务的场景
NESTED如果当前存在事务,则嵌套执行(保存点);否则等同 REQUIRED部分失败可回滚,整体可继续

📌 3. 重点传播行为详解

✅ REQUIRED(默认)

@Transactional
public void methodA() {
    methodB(); // methodB 也 @Transactional → 加入 methodA 的事务
}

@Transactional
public void methodB() { ... }

→ A 和 B 在同一个事务中,B 出错 → A 也会回滚。


✅ REQUIRES_NEW(独立事务)

@Transactional
public void methodA() {
    methodB(); // methodB 新开事务,A 挂起
    // 即使 B 提交了,A 回滚也不会影响 B
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void methodB() { ... }

→ 常用于:记录操作日志、发送通知,即使主事务失败,日志也要保留。

⚠️ 注意:REQUIRES_NEW 要求被调用方法必须是 代理对象调用(不能 this.methodB(),必须通过 Spring 注入的对象调用)。


✅ NESTED(嵌套事务)

@Transactional
public void methodA() {
    try {
        methodB(); // 嵌套事务,设置保存点
    } catch (Exception e) {
        // 可回滚到保存点,不影响后续操作
    }
    methodC();
}

@Transactional(propagation = Propagation.NESTED)
public void methodB() { ... }

→ 支持部分回滚,但数据库必须支持保存点(Savepoint),如 MySQL InnoDB。


✅ 三、隔离级别 vs 传播机制 —— 区别总结

维度隔离级别(Isolation)传播机制(Propagation)
所属层面数据库层面Spring 框架层面
解决问题并发事务之间的数据可见性方法调用时事务的创建/加入/挂起行为
配置位置数据库 / @Transactional(isolation=…)@Transactional(propagation=…)
影响范围所有并发事务的交互行为方法调用链中的事务上下文传递
是否依赖数据库是(不同数据库实现不同)否(Spring 控制,但部分行为如 NESTED 依赖数据库)

🧩 一句话总结:

  • 隔离级别 → 控制“别人改的数据我能不能看到”
  • 传播机制 → 控制“我这个方法要不要新开事务、加入现有事务”

✅ 四、实际开发中的注意事项

⚠️ 1. 隔离级别注意事项

  • 不要盲目使用 SERIALIZABLE:虽然最安全,但性能极差,容易锁表。
  • MySQL 默认 REPEATABLE READ,已解决幻读(Next-Key Lock),适合大多数场景。
  • READ COMMITTED 更适合高并发 OLTP 系统(如订单、支付),避免长事务锁住数据。
  • 修改隔离级别前,务必测试并发场景,避免死锁或性能下降。

⚠️ 2. 传播机制注意事项

✅ 必须通过代理调用

@Service
public class OrderService {

    @Autowired
    private OrderService self; // 自己注入自己(获取代理对象)

    @Transactional
    public void createOrder() {
        // ❌ 错误:this.saveLog() → 不走代理,事务传播失效!
        // ✅ 正确:self.saveLog() → 走代理,传播行为生效
        self.saveLog();
    }

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void saveLog() { ... }
}

🔧 替代方案:使用 AopContext.currentProxy()(需开启 expose-proxy)

✅ REQUIRES_NEW 的异常处理

@Transactional
public void methodA() {
    try {
        methodB(); // REQUIRES_NEW,独立提交
    } catch (Exception e) {
        // 如果这里捕获异常,A 不回滚,B 已提交 → 数据可能不一致!
        log.error("methodB failed but already committed!");
    }
}

→ 如果 B 是扣库存,A 是下单,B 成功提交后 A 失败 → 库存扣了但订单没生成 → 数据不一致!

✅ 解决方案:

  • 不要轻易捕获 REQUIRES_NEW 方法的异常
  • 或者改用 NESTED(支持回滚到保存点)

✅ NESTED 的数据库支持

  • MySQL InnoDB ✅ 支持 Savepoint
  • Oracle ✅ 支持
  • 某些数据库或驱动 ❌ 不支持 → 会退化为 REQUIRED

⚠️ 3. 事务失效常见场景(重点!)

场景原因解决方案
this 调用带 @Transactional 的方法没有经过 Spring 代理注入自己 / 使用 AopContext
方法不是 publicSpring AOP 默认只代理 public 方法改为 public
异常被捕获未抛出Spring 默认只对 RuntimeException 回滚@Transactional(rollbackFor = Exception.class)
数据库不支持事务(如 MyISAM)引擎问题改用 InnoDB
传播行为配置错误(如 NOT_SUPPORTED 中写数据)无事务保护检查传播行为是否合理

✅ 五、最佳实践建议

🎯 1. 隔离级别选择建议

  • 90% 场景使用数据库默认(MySQL → REPEATABLE READ)
  • 高并发更新场景 → 改为 READ COMMITTED(减少锁竞争)
  • 报表/统计类 → 可用 READ UNCOMMITTED(允许脏读,换性能)

🎯 2. 传播机制选择建议

  • 默认用 REQUIRED
  • 独立提交操作(日志、消息)→ REQUIRES_NEW
  • 需部分回滚 → NESTED(确认数据库支持)
  • 查询方法 → SUPPORTS 或 NOT_SUPPORTED

🎯 3. 事务方法设计原则

  • 保持事务短小(避免长事务锁表)
  • 避免在事务中调用远程服务、发邮件、上传文件
  • 事务方法中不要捕获异常“吃掉”(除非明确处理)
  • 使用 @Transactional(timeout = 5) 设置超时,避免死锁

✅ 六、实战案例:电商下单场景

@Service
public class OrderService {

    @Autowired
    private OrderService self;

    @Transactional
    public void createOrder(Order order) {
        // 1. 扣库存(要求强一致)
        reduceStock(order);

        // 2. 创建订单
        saveOrder(order);

        // 3. 记录日志(即使下单失败,日志也要保留)
        self.logOrderAction(order.getId(), "ORDER_CREATED");

        // 4. 发送消息(独立事务)
        self.sendMessage("OrderCreated", order.getId());
    }

    @Transactional(propagation = Propagation.MANDATORY)
    public void reduceStock(Order order) {
        // 必须在事务中运行,否则抛异常
    }

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void logOrderAction(Long orderId, String action) {
        // 独立提交,不受主事务影响
    }

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void sendMessage(String event, Long orderId) {
        // 发送MQ消息,独立事务
    }
}

✅ 总结

概念作用关键点
隔离级别控制并发事务间的数据可见性脏读、不可重复读、幻读;数据库支持是关键
传播机制控制方法调用时事务的创建与传播行为REQUIRED(默认)、REQUIRES_NEW(独立)、NESTED(嵌套)最常用
区别一个管“数据能不能看”,一个管“事务怎么传”层面不同,互不替代,需配合使用
注意事项代理调用、异常处理、数据库支持、事务范围避免事务失效,保持短事务,合理选择级别和传播行为

📌 最后提醒:事务不是万能的,设计不当反而会导致性能瓶颈或数据不一致。理解原理 + 多测试 + 监控慢SQL和死锁,才是王道!

如需具体场景的事务配置案例(如“用户注册+初始化账户+发欢迎邮件”),欢迎继续提问!

浅谈Spring中的事务及事务传播机制 Spring事务传播机制定义了:多个包含了事务的方法在相互调用时,事务是如何在这些方法间进行传递的。 阅读详情

相关推荐

【事务隔离级别和传播机制】

【事务隔离级别和传播机制】

学无止境 516

数据库事务的四种隔离级别

数据库事务的隔离级别有4种,由低到高分别为Read uncommitted(读未提交) 、Read committed (读已提交)、Repeatable read (重复读)、Serializable (序列化)。读现象是在多个事务并发执行时,在读取数据方面可能碰到的问题。包括脏读、不可重复读、幻读。脏读:读到了脏数据,即无效数据。不可重复读:是指在数据库访问中,一个事务内的两个相同查询却返回了不同数据。幻读:指同一个事务内多次查询返回的结果集不一样,比如增加了行记录。

bug世界 6万+

cmw500 lte非信令测试_WiFi信令测试在研发过程中的作用

  1、关于信令测试的故事  2016年的某天,某著名网络产品公司技术负责人致电寻求技术支持:我们的无线路由器遇到了一个困惑:我们某款路由器应用于实际WiFi网络中时,WiFi终端接入非常困难。但是我们使用测试工具检测此路由器,它的所有物理射频指标都非常优异。不知道是为什么?  我来到了测试现场看到:WiFi路由器受控于芯片公司的测试工具,其WiFi发射机指标在非信令测试仪上显示:无论功率、EVM...

weixin_39662263的博客 3924

事务的隔离级别以及传播机制的详细讲解

在 Spring 项⽬中使⽤事务,⽤两种⽅法⼿动操作和声明式⾃动提交,其中后者使⽤的最多,在⽅法上添加 @Transactional 就可以实现了。设置事务的隔离级别 @Transactional(isolation = Isolation.SERIALIZABLE),Spring 中的事务隔离级别有 5 种。设置事务的传播机制 @Transactional(propagation = Propagation.REQUIRED),Spring 中的事务传播级别有 7 种。

m0_57248981的博客 3086

2025年(第十一届)全国大学生统计建模大赛论文及选题分析

基于数据驱动决策:整个研究围绕给定的洪水灾害相关数据进行深入挖掘和分析,从数据清洗、特征分析、模型建立到最终预测,每一步都以数据为基础,通过对数据的有效利用来揭示洪水灾害发生的相关规律和特征,为洪水灾害的风险评估和预测提供依据,符合数据引领未来决策的理念。实际应用导向:洪水灾害是现实中严重影响人类生命财产安全和社会经济发展的重要问题,本研究旨在实现对洪水灾害的预测,其成果可直接应用于防洪减灾工作,如洪水预警、风险评估与区划等,对实际防灾减灾工作具有重要的指导意义,体现了以数据为支撑服务实际应用的特点。

qq_52590045的博客 1万+

20、自定义用户窗体:从创建到使用

本文详细介绍了在Excel VBA中创建和使用自定义用户窗体的完整过程,涵盖从窗体设计、控件添加与属性设置,到事件处理程序编写及宏调用的各个环节。通过实际示例讲解了如何实现文本大小写转换和员工信息录入等功能,并深入解析了常用控件的属性与事件机制。同时提供了控件命名规范、快捷键使用、布局技巧等实用建议,帮助读者构建高效、交互性强的VBA用户界面。

h0i1j2k3l的博客 131

Spring事务传播机制和隔离级别

Spring事务传播机制和隔离级别

皓亮君的博客 7787

概念解析 | 雷达动态范围

这里存在一个动态范围的问题:强雷达发射信号和弱目标反射信号存在非常大的功率差异,比如传统的脉冲多普勒雷达动态范围可达90dB以上。随着上述技术的发展,预计未来十年雷达接收机动态范围将达到120dB以上,届时雷达的监视能力将得到极大增强。简单来说,雷达动态范围越大,表示接收机噪声越低,对强信号过载保护能力越强,就越能检测到弱信号目标。此外,部分新概念雷达对动态范围提出新的需求,如被动雷达动态范围需大于100dB。当前,随着阵列雷达和数字雷达技术的发展,对雷达接收机动态范围提出了更高要求。

NLOS的博客 1050

数据库之事务隔离级别详解

儿子某一天去消费,花了8千元,然后他的父亲去查看他今天的消费记录(全表扫描,儿子事务开启),看到确实是花了8千元,就在这个时候,儿子花了1万买了一部电脑,即新增INSERT了一条消费记录,并提交。但是转账时父亲不小心按错了数字,按成10万/月,该钱已经打到儿子的账户,但是事务还没有提交,就在这时,儿子去查看自己的储蓄卡,发现转多了9万,以为凭空多了9万非常高兴。事务的隔离性是指在并发执行的多个事务中,每个事务的执行互不影响,每个事务都有自己独立的空间进行操作。儿子看到的是父亲还没提交事务时的数据。

qq_39939541的博客 1万+

2026软考中级-软件设计师笔记(送最新视频教程)

核心口诀:运控存输输(运算器、控制器、存储器、输入、输出)例题(2019年上半年):核心公式:数字签名流程:数字证书作用:死锁4个必要条件:死锁判断公式:处理策略:程序设计语言的四大核心成分:顺序表操作(时间复杂度):链表操作(时间复杂度):核心思想:频率高的字符用短编码,频率低的用长编码 → 最小化总编码长度构造步骤(贪心算法):前提:有序表(升序/降序) 步骤:时间复杂度:O(log₂n) 例:查找中核心思想:用哈希函数将关键字映射到存储位置 哈希冲突:不同关键字映射到同一位置 → 用链地址法或开放定址

36万+

双馈风机并网系统宽频振荡机理与抑制方法研究

双馈风机并网系统宽频振荡分析与抑制 摘要:本文研究了双馈风机(DFIG)接入弱电网引发的宽频振荡问题。通过建立DFIG并网系统阻抗模型,分析了锁相环带宽、电流环带宽等参数对阻抗特性的影响。研究揭示了DFIG与电网阻抗交互导致交截频率处相位差超过180°的振荡机理。提出基于锁相环优化的阻抗重塑抑制策略,采用电压补偿和陷波器改善系统稳定性。仿真结果表明,该方法能有效降低相位差约10°-168°,显著抑制宽频振荡。代码实现了阻抗建模、稳定性分析和抑制策略验证,为工程应用提供了理论依据。

huanghm88的专栏 319

并发下的事务处理

事务保障。是软件行业必需要做的事情。非常多金融公司,就是因为事务处理不得当而倒闭。 我们都知道,事务有四大特性:ACID。即:原子性、一致性、隔离性、持久性。 四大特性 原子性 事务是数据库的逻辑单位,事务总包含的诸操作那么所有运行。要么都不运行。 ps:原子操作能保证线程安全。非原子操作就是线程不安全,通过使用锁或其它非阻塞方式实现某个时间仅仅能有一个线程操作同...

weixin_30526593的博客 105

生信技能53 - WisecondorX自动化批量npz转换和reference构建

wiseconrdoX分析CNV适用于CNVseq、NIPT和WGS等项目。

LittleComputerRobot的博客 465

Spring 事务和事务传播机制

NESTED 是如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行,所以说 A 和 B 不是同一个事务,那么当 B 的一个方法出现异常时进行回滚,另一个 A 调用的方法是不受影响的,也印证了这两个不是同一个事务,确实是创建了一个嵌套事务。一个事务的操作流程包括了,开启事务,执行事务操作,提交事务或回滚事务,对于回滚事务来说,如果程序在执行过程中出现了错误,那么此时就需要执行回滚事务。此时就是无论 A 有没有事务, B 都新创建事务,所以当 B 的一个方法有异常时,是不会影响其他方法的。

2202_76097976的博客 6728

【大模型】DeepSeek + Coze 打造个人专属AI智能体使用详解

DeepSeek + Coze 打造个人专属AI智能体使用详解

congge 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Spring事务和事务传播机制(2)

❤️❤️❤️Spring + Spring MVC + MyBatis_冷兮雪的博客-优快云博客在Spring框架中,事务管理是一种用于维护数据库操作的一致性和完整性的机制。Spring事务管理提供了灵活的方式来处理事务,包括事务的创建、提交、回滚以及事务的传播行为。Spring事务和事务传播机制(1)_热爱编程的林兮的博客-优快云博客2、Spring 中设置事务隔离级别。

冷兮雪的博客 3089

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Spring中事务的隔离级别和传播机制

@Transactional详解之事务隔离级别及事务传播机制

关关的博客 2598

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【Spring Boot】掌握 Spring 事务:隔离级别与传播机制解读与应用

本期讲解了关于MySQL事务的隔离级别回顾,以及spring的事务隔离级别以及事务传播机制,分别从概念和代码进行了演示~~~

GGBond778的博客 2641

Spring事务七大传播机制与五个隔离级别

Spring事务七大传播机制与五个隔离级别

延宝小白马的博客 1万+

【Spring 事务】事务隔离级别与事务传播机制:从理论到业务落地实操

本文聚焦 Spring 事务的隔离级别与传播机制两大核心内容:先解析 MySQL 的 4 种隔离级别(读未提交到串行化)及对应并发问题,再说明 Spring 对其的 5 种抽象配置;接着详解事务传播机制的 7 种规则(含默认的 REQUIRED、独立事务 REQUIRES_NEW 等),结合用户注册 + 日志记录的实战场景,演示不同传播机制的执行效果。重点对比 REQUIRED 与 NESTED 的差异 —— 前者全事务回滚,后者支持局部回滚,通过代码示例与结果分析,解决业务数据一致性问题。

独断万古他化的博客 6681

Spring事务和事务传播机制

本章介绍了Spring 事务与事务传播机制,与MySQL中的事务有相同之处,也有不同之处

matexiang的博客 1953

Spring事务及其传播机制

在数据库的时候我们就接触过事物这一概念,简单说事务是一组操作的集合, 是一个不可分割的操作.事务会把所有的操作作为一个整体, 一起向数据库提交或者是撤销操作请求. 所以这组操作要么同时成功, 要么同时失败,事物出现的场景一般都为,操作两个或者多个方法是,需要这些方法要么同时进行要么同时失败.例如银行卡存取钱,我通过ATM机存取钱的时候,后端的数据系统肯定是要进行同步操作的,总不能我通过ATM机取或存了钱,但是由于事故我钱存取了,但是后端数据库却没有变化,这个时候就是"事务"的登场了.

weixin_74352792的博客 5193

数据库事务隔离级别与Spring传播行为深度解析

摘要:本文深入剖析数据库事务隔离级别与Spring传播行为的技术原理与实战应用。通过电商支付、批量处理等真实案例,揭示事务管理的核心难点:脏读、不可重复读、幻读等并发问题,以及死锁、性能下降等常见陷阱。文章对比了四种隔离级别(READ UNCOMMITTED到SERIALIZABLE)的实现机制与性能差异,详解Spring七种传播行为的工作流程,提供源码级分析。针对企业级场景,给出支付系统、批量处理等典型场景的优化方案,包括事务拆分、异步处理等技巧,并配套监控配置与故障排查方法。最后总结出"事务军

七夜zippoe的博客 2635

spring事务隔离级别、传播机制以及简单配置

一、spring支持的事务声明方式 1.  编程式事务  当系统需要明确的,细粒度的控制各个事务的边界,应选择编程式事务。 2.  声明式事务  当系统对于事务的控制粒度较粗时,应该选择申明式事务,通过<tx>标签和<aop>切面形式在xml中进行配置。 3.  无论你选择上述何种事务方式去实现事务控制,spring都提供基于门面设计模式的事务管理器供选择,如下是sp...

不积跬步 无以至千里 3万+

数据库事务4种隔离级别及7种传播行为

一:数据库的事物隔离级别与传播行为总结: 脏数据   脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据(Dirty Data),依据脏数据所做的操作可能是不正确的。 不可重复读   在一个事务...

适恒 1万+
上一篇: 从一个 HTTP 请求的视角出发进行系统性性能优化
下一篇: 5、spring-boot-starter-cache 介绍和在 Spring Boot 中集成使用
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值