自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(172)
  • 收藏
  • 关注

原创 Tauri 2.x 系列(十):测试、日志、调试与性能——让桌面应用可验证、可观测

用户看到什么;API 返回什么稳定错误码;日志是否包含 trace ID、组件、阶段和耗时;是否创建残留进程、端口或临时文件;是否可以重试;重启应用后数据是否仍一致。只断言 HTTP 500 不足以证明故障处理正确。fill:#333;important;important;fill:none;fill:#333;stroke:red;important;important;important;important;important;important;fill:red;

2026-08-27 07:51:13 72

原创 Tauri 2.x 系列(九):安全模型——Capabilities、Permissions、Scope 与 CSP

EMS 当前save_file已校验文件名和父目录,并使用 Rust 写入;会规范化现有路径并确认它是目录。这比直接执行 shell 好,但仍可进一步收紧为领域操作。return Err("导出内容超过 4 MiB 限制".into());if!return Err("文件名不合法".into());.path().map_err(|_| "无法确定应用数据目录")?;std::fs::create_dir_all(&root).map_err(|_| "无法创建导出目录")?;

2026-08-27 07:50:30 71

原创 Tauri 2.x 系列(八):与其他语言结合——Sidecar、服务、FFI 与插件的选择

把 EMS Simulate 的 Python sidecar 经验抽象为通用多语言方法,在 Python、Go、C/C++、Node.js、.NET 或既有服务之间选择合理边界,并用语言中立协议控制版本、错误、超时、取消和测试。:已阅读,理解 Tauri IPC、sidecar、localhost 和应用生命周期。Go/C++/Node.js/.NET 代码为可替换边界示例,不代表 EMS 当前额外打包了这些运行时。最后复核日期:2026-08-26。

2026-08-27 07:49:32 77

原创 Tauri 2.x 系列(七):Tauri + Python 后台——Sidecar 的打包、通信与生命周期

把 EMS Simulate 现有 Python/FastAPI/SQLAlchemy/协议业务可靠封装为随应用分发的 sidecar,解决解释器依赖、产物命名、动态端口、健康检查、日志、重启、退出和安装后资源定位。:已阅读,理解 Tauri IPC、状态、系统 API 和数据目录。最后复核日期:2026-08-26。为了避免只讲零散 API,本系列统一使用我开发并持续维护的。

2026-08-27 07:48:20 16

原创 Tauri 2.x 系列(六):本地文件、配置与数据库——构建可靠的离线数据层

以 EMS Simulate 的 SQLite/MySQL、点表、SCL、配置、日志和 sidecar 资源为例,正确区分安装资源与运行数据,并建立可迁移、可恢复、跨 MSI/MSIX/deb/AppImage 的本地数据层。:已阅读,理解路径、dialog、capability 与 Python sidecar。最后复核日期:2026-08-26。为了避免只讲零散 API,本系列统一使用我开发并持续维护的。

2026-08-27 07:47:33 185

原创 Tauri 2.x 系列(五):调用系统 API——官方插件、Rust crate 与原生能力

掌握 Tauri 调用系统能力的三条路径,并以 EMS Simulate 的浏览器打开、目录打开、文件选择和保存为主线,扩展到通知、剪贴板、全局快捷键、Shell 和平台原生 API。:已阅读,理解 capability、command 和应用生命周期。最后复核日期:2026-08-26。为了避免只讲零散 API,本系列统一使用我开发并持续维护的。

2026-08-27 07:46:48 146

原创 Tauri 2.x 系列(四):窗口、菜单、托盘与应用生命周期——做出真正的桌面体验

在 EMS Simulate 中建立主窗口、报文窗口、菜单和系统托盘的统一生命周期,正确处理显示、隐藏、关闭、明确退出、单实例唤醒和后台进程清理。:已阅读,理解 Tauri Builder、Command、Event 和 Rust 状态。最后复核日期:2026-08-26。为了避免只讲零散 API,本系列统一使用我开发并持续维护的。

2026-08-27 07:44:38 201

原创 Tauri 2.x 系列(三):IPC、状态与异步并发——设计稳定的前后端契约

正确选择 Command、Event、Channel、HTTP/WebSocket 与 Rust 状态;建立可演进的请求、响应、错误、进度和取消协议;避免 UI 阻塞、事件乱序、监听泄漏和后台状态失真。:已阅读和,理解 Promise、JSON 和基础异步编程。最后复核日期:2026-08-26。为了避免只讲零散 API,本系列统一使用我开发并持续维护的。

2026-08-27 07:41:47 163

原创 Tauri 2.x 系列(二):项目结构与前端框架——Vue、React 如何成为桌面前台

理解 Tauri 与前端构建工具之间的契约;掌握 Vue 3/React 的桌面能力接入、事件清理和浏览器兼容;看懂 EMS Simulate 的“loading bundle + FastAPI 托管 Vue”双层前端结构。:已阅读,熟悉 Vue 或 React 的组件生命周期。最后复核日期:2026-08-26。为了避免只讲零散 API,本系列统一使用我开发并持续维护的。

2026-08-27 07:39:54 301

原创 Tauri 2.x 系列(一):架构全景与最小闭环——从 WebView 到 EMS 后台

理解 Tauri、WebView、Rust Core、Python sidecar 与操作系统的职责边界;完成一次可观察、可失败、可定位的前端 → Rust → Python → FastAPI 最小闭环。:会使用 TypeScript 和命令行,能读懂基础 Rust/Python;不要求预先掌握 Tauri。版本来自项目锁文件与本机工具链,最后复核日期:2026-08-26。为了避免只讲零散 API,本系列统一使用我开发并持续维护的。

2026-08-27 07:39:05 344

原创 DNP3 系列(十四):安全认证与演进——SAv5、TLS、威胁模型与未来

1993 年开放的 DNP3 是为可信专网设计的——当时没有安全考虑:攻击者接入通信网报文注入伪造遥控命令重放攻击重放抓包的分闸命令中间人篡改改写遥测值/品质位拒绝服务洪泛/畸形帧后果:误分合闸、设备损坏后果:调度误判、状态污染后果:失去监控能力14.2.2 核心机制SAv5 在应用层加认证,不加密数据(加密交给 TLS):14.2.3 认证交互时序从站主站从站主站#mermaid-svg-4J36DL75FxOCho25{font-family:"trebuchet ms",verdana,ari

2026-08-26 08:21:48 70

原创 DNP3 系列(十三):工程实战——点表设计、网络部署与协议网关

具备实际工程部署和问题排查能力,掌握点表设计、北美 SCADA 网络架构、DNP3 ↔ IEC 104 / Modbus 网关设计,能在北美项目与国内调度体系间架桥。前置知识:Part 6(对象组速查)、Part 8(机制)、Part 9(控制)、Part 11(开发)。

2026-08-26 08:21:12 245

原创 DNP3 系列(十二):测试与工具链——模拟器、Wireshark 与一致性测试

摘要:本文系统介绍了DNP3协议开发与测试的全流程工具链,涵盖抓包分析、模拟器联调、一致性测试等关键环节。重点内容:1)使用Wireshark进行协议报文深度解析与异常诊断;2)基于pydnp3构建可编程模拟器实现自动化测试框架;3)区分一致性测试(标准符合性)与互操作性测试(设备兼容性)的差异。通过工具组合与测试方法学,开发者可高效验证DNP3协议实现的正确性与鲁棒性,解决"实验室通过但现场异常"的典型工程问题。

2026-08-26 08:20:08 200

原创 DNP3 系列(十一):开发实现——基于 opendnp3 的 Outstation 与 Master

只打印;// 遥信// pair.value.flags = 品质位// 遥测// 其他类型(DoubleBitBinary/Counter/OctetString...)同理,可空实现// ...

2026-08-26 08:18:58 523

原创 DNP3 系列(十):文件传输与扩展对象——G70-G74、虚拟终端与私有对象

DNP3文件传输机制与扩展对象体系摘要 DNP3协议内置高效文件传输功能(G70-G74对象组+功能码25-31),支持固件升级、故障录波(COMTRADE)、日志传输等场景,相较IEC 104具有显著优势。其核心流程包括OPEN协商参数、分块传输(G71)、校验(AUTHENTICATE)和CLOSE,支持断点续传。扩展能力方面: Octet String(G110)作为通用字节容器承载非标数据; 私有对象(G83-G93)实现厂商扩展,但需警惕互操作性问题; 设备对象(G80-G82)提供设备属性与能力

2026-08-26 08:18:03 140

原创 DNP3 系列(九):时间同步与控制操作——延迟测量、SBO、CROB 与冻结

精通 DNP3 的时间同步流程与全部控制操作——延迟测量、时钟同步、SBO/直接操作、CROB 控制码、冻结系列、冷热重启。前置知识:Part 4(功能码)、Part 5(对象模型)。示例帧带真实 CRC。

2026-08-26 08:16:41 238

原创 DNP3 系列(八):通信机制——Class 轮询、Unsolicited 与事件缓冲

DNP3交互机制核心摘要(150字) DNP3协议通过主从轮询实现数据同步,含两类核心轮询:完整性轮询(5-15分钟读取Class 0全量静态数据)和事件轮询(1-5秒扫描Class 1/2/3事件)。从站通过IIN位标识待读事件,主站智能调整优先级(Class 1>2>3)。事件缓冲分级管理,溢出时丢弃最旧事件并触发完整性轮询兜底。支持Unsolicited主动上报(需CONFIRM确认),实现毫秒级关键事件推送。多主站场景下事件缓冲共享,广播模式用于全站指令。交互设计平衡实时性与可靠性,事件缓冲和完整性

2026-08-26 08:10:59 158

原创 DNP3 系列(七):事件与时间对象——事件组、CTO 与时标体系

摘要: DNP3协议通过事件对象组(如G2/G4/G31)高效记录变位信息,支持绝对时间(6B,1970基准)和相对时间(2B,偏移CTO)两种时标。**核心机制CTO(公共时标)**通过共享时间基准显著节省带宽(10事件减少57%开销)。事件触发条件包括遥信变位、遥测越限等,依赖时钟同步保证SOE(事件顺序记录)的毫秒级精度。与IEC 104相比,DNP3时标基准(1970 vs 1984)和编码方式不同,网关需注意转换。下篇将探讨Class轮询与事件缓冲管理。 关键词: DNP3事件对象、CTO机制、时

2026-08-26 08:09:56 356

原创 DNP3 系列(六):静态数据类型速查——输入/输出/计数器/模拟量对象组

DNP3静态对象组速查表摘要 本文提供了DNP3协议中关键对象组的完整速查表,涵盖二进制输入(G1/G3)、二进制输出(G10)、计数器(G20/G22)和模拟量输入(G30/G33)等核心对象组。重点内容包括: 二进制输入的单双点编码及品质位解析(G1V1/G3V1) 计数器特殊品质位(ROLLOVER/DISCONTINUITY)及冻结机制 模拟量输入的定标值与浮点值选择策略(V1/V3) 各对象组的变化版本适用场景与典型应用 特别强调工程应用要点:品质位(ONLINE)验证、双点状态识别、计数器溢出处

2026-08-18 23:34:03 161

原创 DNP3 系列(五):对象模型与寻址——对象头、限定词与编码格式

DNP3对象模型精要: DNP3通过**对象组(Group)+变化(Variation)**二维寻址体系组织数据,核心结构包括: 对象头(1B组+1B变化+1B限定词+范围字段),限定词决定寻址方式(0x08连续范围/0x06前缀索引/0x09打包计数); 三种数据视图:静态对象(当前值)、事件对象(带时标变化)、冻结对象(快照); 编码优化:前缀寻址(事件数据稀疏索引)与打包格式(G1V0每字节8个遥信)。典型应用如: 读遥测浮点值(G30V3+Q=0x08); 事件响应(G2V2+Q=0x06+前缀索引

2026-08-18 23:33:23 188

原创 DNP3 系列(四):应用层框架——报文结构、功能码与 IIN

摘要:本文解析DNP3协议应用层报文结构,包含应用控制字(AC)、功能码(FC)、对象头及数据体的组成,重点分析AC中的FIR/FIN/CON/UNS位和SEQ序号机制。功能码部分涵盖主从站通信的请求/响应指令全集(如READ/WRITE/UNSOLICITED RESPONSE等),并详细说明2字节IIN内部指示字的位定义与排障价值(如CLASS事件标志、设备故障状态等)。通过Read Class 1轮询实例演示请求-响应配对过程,强调应用层序号(SEQ)匹配原则及IIN在诊断中的关键作用,为后续对象模型

2026-08-18 23:32:39 237

原创 DNP3 系列(三):伪传输层——分段、重组与可靠传输

摘要: DNP3协议通过伪传输层解决链路层250字节限制与应用层大报文传输的矛盾。该层在链路层与应用层间插入4字节传输头(含FIN/FIR/CON标志及模16序号SEQ),将应用数据分段为≤246字节的块,通过链路层传输。接收端按序号重组报文,异常时丢弃缓冲。确认机制分方向:主站→从站依赖链路层逐帧ACK,从站→主站通过CON位触发应用层确认。与IEC 104不同,DNP3伪传输层独立于底层介质(支持串口/TCP/UDP),但序号空间小(模16)且需自行处理超时重组。其设计体现了80年代协议对传输无关性的追

2026-08-18 23:31:54 204

原创 DNP3 系列(二):数据链路层——FT3 帧结构与 CRC 校验

本文介绍了DNP3协议数据链路层的核心知识,包括FT3帧结构、控制字语义和FCB/FCV机制。FT3帧由起始字(0x0564)、长度、控制字、地址字段、CRC校验和用户数据组成,用户数据最大250字节,完整帧最长292字节。控制字区分主站/从站方向,包含功能码和帧计数位(FCB)。FCB机制通过交替翻转实现重发检测,确保数据可靠性。典型交互包括链路建立(RESET/TEST)、数据传输(CONFIRMED)和异常处理(NACK)。文章通过真实报文示例和时序图,详细解析了帧结构和通信流程。

2026-08-18 23:31:11 219

原创 DNP3 系列(一):标准全景——从北美 SCADA 到 IEEE 1815

摘要:DNP3与IEC 104的差异与北美电力选择 DNP3是北美电力系统的核心通信协议,起源于1986年Westronic公司,参考了IEC 60870-5草案,但采用独立技术路线。其成功归因于开放免费(DNP用户组规范)、适应性强(支持多行业)及内置高级功能(如文件传输和分事件类轮询)。与IEC 104相比,两者链路层相似(FT3帧+CRC),但传输层、数据模型和事件机制迥异,无法直接互通。北美选择DNP3的关键在于:1)免费标准降低小规模配电公司成本;2)早期厂商推动形成生态;3)支持分布式网络需求。

2026-08-18 23:30:27 184

原创 TDengine C++ 系列(12):生产实战与排障——端到端落地

摘要: 本文系统化整合了基于TDengine的C++ EMS能量管理系统开发全流程,涵盖数据采集、存储、告警、查询等核心模块的端到端串联。针对生产环境常见故障(写入失败、查询超时等),提出三层取证(错误码/日志/监控)的排障决策树,并结合真实案例库提供快速定位方法。详细对比2.x→3.x迁移的语法差异、客户端适配与数据验证策略,强调灰度发布与回滚机制。最后给出全系列终验清单,包括集群部署、批量写入、流计算、订阅消费等核心场景的回归测试方法,帮助开发者独立交付高可靠的时序数据平台。

2026-08-12 08:13:06 192

原创 TDengine C++ 系列(11):性能模型与调优——从测量到优化

摘要:本文系统化构建TDengine性能优化方法论,提出可复现的基准测试流程与调优决策树。核心内容包括:1)建立写入/查询性能模型,分解路径开销(如写入瓶颈主要来自批量大小、乱序数据、WAL配置等);2)制定标准化基准测试模板,强调单变量实验纪律与taosBenchmark交叉验证;3)分析关键参数(如buffer、wal_level、vgroups)的优化空间与代价;4)通过工程案例(如采集端批量优化、乱序治理)展示调优效果;5)总结常见误区(如盲目改配置、混淆安全与性能参数)。最终形成"测量驱动"的优化

2026-08-12 08:12:16 272

原创 TDengine C++ 系列(10):监控、安全与运维工具

建立生产可观测性(taosKeeper + TDinsight),掌握用户权限与 TLS 安全配置,熟练使用运维工具集。:Part 9(集群架构);会用 Docker 与 Grafana。taosKeeper;Grafana(TDinsight 面板);taos CLI。

2026-08-12 08:11:27 252

原创 TDengine C++ 系列(9):集群架构与高可用——从单机到多节点

理解 3.x 集群架构(mnode/vnode/qnode/snode 与 vgroup 多副本),能完成集群部署、故障演练与数据安全规划。:Part 1(组件与链路)、Part 2(vgroup 分布);会用 Docker。Docker Compose 多节点编排;taos CLI。

2026-08-12 08:10:32 342

原创 TDengine C++ 系列(8):流式计算与最新值缓存——库内实时处理

摘要 本文介绍了如何利用TDengine的流计算(CREATE STREAM)和Read Cache功能构建实时统计系统。主要内容包括: 核心能力对比:流计算用于结果落库(降采样/统计),TMQ用于事件推送,Read Cache实现最新值毫秒查询。 流计算语法:通过INTERVAL定义时间窗口,PARTITION BY分组计算,STREAM_OPTIONS配置触发策略,结果自动写入目标表。 Read Cache机制:通过cachemodel参数控制LAST/LAST_ROW查询是否走内存缓存,实现最新值秒级

2026-08-11 23:48:45 70

原创 TDengine C++ 系列(7):数据订阅 TMQ——实时消费 TDengine 数据

文章摘要(149字) TDengine的TMQ模型以topic(库/超级表/SQL查询)为消息源,通过consumer group实现分布式消费,支持at-least-once语义。C++实现需手动提交offset,避免重复消费需业务层幂等处理。核心步骤:创建topic→配置消费者→轮询消息→处理并提交。与Kafka不同,TMQ直接监听数据库WAL,无需独立消息系统。示例演示了变位告警和越限过滤场景,强调分区与vgroup的关系,以及同步提交的可靠性。适用实时数据同步、事件驱动等场景,避免轮询开销。

2026-08-11 23:45:13 106

原创 TDengine C++ 系列(6):高性能写入——参数绑定、批量与 Schemaless

TDengine 高性能写入实践:参数绑定与批量写入 核心目标 掌握使用 taos_stmt 进行参数绑定与批量写入,设计高吞吐写入架构,并通过量化数据选择最优写入策略。 关键发现 性能瓶颈分析: 逐条 INSERT 存在三大性能杀手:网络 RTT、SQL 解析和 WAL 落盘 批量写入可将固定开销分摊到多行,实现数量级吞吐提升 最佳实践: 推荐使用 taos_stmt 参数绑定(吞吐最高) 典型批量大小:数百到数千行/批 默认 WAL 级别为 1(安全与性能平衡) 性能影响因素: 乱序写入会导致吞吐下降一

2026-08-11 23:44:13 140

原创 TDengine C++ 系列(5):C/C++ 连接器——连接管理与查询 API

掌握taos.h全貌,能正确管理连接生命周期,用同步/异步方式查询并处理结果集与错误。:Part 1(3.x API 事实)、Part 4(查询 SQL);C++17 RAII 与智能指针。C++17;CMake;Docker(服务端)。

2026-08-11 23:43:33 399

原创 TDengine C++ 系列(4):时序查询——窗口聚合、插值、连接与时序函数

本文介绍了TDengine SQL的时序扩展功能,重点讲解了如何高效处理时间窗口聚合、插值和对齐连接查询。主要内容包括: 时序查询核心:遵循"时间范围→窗口切分→计算"的流程,强调时间范围对性能的关键影响。 典型查询示例: 时间窗口聚合(如5分钟负荷曲线) 标签切片统计(按设备/站点分组) 滑动窗口与数据填充 状态窗口(开关持续时长) 插值处理(低频数据升采样) 对齐连接(设备数据对比) 执行机制: 通过EXPLAIN分析查询计划 时间范围裁剪是性能关键 详细说明窗口边界、时区和填充策略 时序函数分类: 聚

2026-08-11 23:42:44 226

原创 TDengine C++ 系列(3):TDengine SQL 基础——DDL/DML 与数据写入

摘要: 本文深入解析TDengine的DML操作(INSERT/UPDATE/DELETE)核心语义与实现机制,针对时序数据场景中的乱序写入、重复覆盖、数据修正等典型问题提供解决方案。通过taos CLI和C++代码示例演示四种INSERT形态(多行、多表、指定列、自动建表),揭示时间戳重复时的覆盖规则、乱序写入的性能代价,以及UPDATE/DELETE的时序限制。重点指出生产中的实践要点:幂等写入设计、乱序优化策略、数据生命周期管理(keep/trim机制),并通过ems-lab项目提供可验证的语义测试集

2026-08-11 23:41:50 237

原创 TDengine C++ 系列(2):数据模型与建模——四遥数据该建几张表

表的列必须对齐 TDengine 不允许同一张表的记录有不同列数(不像 MongoDB 那样灵活)。没有值的列必须显式设为 NULL: -- ❌ 错误:列数不匹配(遥测表 9 列) INSERT INTO d_0001 VALUES (NOW, 35.1, 34.9, 35.0, 5.1, 5.0, 5.2); -- ✅ 正确:显式补 NULL INSERT INTO d_0001 VALUES (NOW, 35.1, 34.9, 35.0, 5.1, 5.0, 5.2, NULL, NULL); 4. 虚

2026-08-11 23:41:14 211

原创 TDengine C++ 系列(1):全景与最小闭环——从时序数据到第一个 C++ 读写

本文摘要: 本文探讨了时序数据库TDengine的核心特性与应用场景。针对EMS(能量管理系统)中千亿级时序数据存储的痛点,分析了MySQL等传统数据库的局限性,并阐述了时序数据的三大要素(时间戳、指标、标签)。重点介绍了TDengine的架构设计,包括其组件构成(taosd、taosAdapter等)和数据处理链路,强调了写入路径的优化(WAL→内存表→落盘)和查询效率的关键因素(时间范围裁剪)。通过Docker快速搭建验证环境,并展示了C++实现的最小读写闭环示例,包括建库、建表、写入和查询操作。全文为

2026-08-11 23:39:45 259

原创 Redis 系列(十二):性能、观测与生产排障——从慢查询到故障决策树

本文系统总结了Redis性能问题的观测手段与排障方法论,围绕三个典型线上问题场景展开。文章提出五维度观测体系:INFO全局指标、SLOWLOG慢查询、CLIENT LIST连接分析、MONITOR实时监控(慎用)和latency延迟监控,并详细说明各工具的使用方式和关键指标。针对常见性能问题(命令延迟、内存增长、连接暴涨等),给出了对应的指标检查清单和根因分析。在客户端治理方面,重点强调了连接池配置、超时重试机制及异步客户端的注意事项。最后构建了可视化的排障决策树,并通过大key阻塞案例演示完整排查流程。文

2026-08-11 08:11:14 276

原创 Redis 系列(十一):高可用(二)——Redis Cluster 集群

本文介绍了Redis Cluster的核心原理与实战要点: 分片机制:通过16384个哈希槽解耦逻辑与物理节点,支持动态扩缩容; 请求路由:智能客户端利用MOVED/ASK重定向实现透明访问,需注意跨槽操作限制(CROSSSLOT)和hash tag的版本兼容性; 高可用:集群内置主从切换能力,故障影响范围仅限单个分片; 选型建议:数据量/写QPS未超单机时优先采用哨兵+主从,避免集群的跨槽约束。 验证环境显示hash tag在特定版本可能失效,强调上线前必须用CLUSTER KEYSLOT实测确认功能。

2026-08-11 08:10:34 271

原创 Redis 系列(十):高可用(一)——主从复制与哨兵

Redis主从复制与哨兵机制解析 核心内容摘要: 主从复制通过全量同步(RDB)+增量同步(repl_backlog)实现数据冗余与读扩展,异步复制带来数据延迟,需关注replicationid/offset机制和一致性边界(延迟、过期键、持久化要求)。 哨兵系统实现自动故障转移:监控→主观下线→客观下线(quorum)→选举Leader→提升从库→通知客户端。典型切换耗时5-8秒,期间存在写入不可用窗口。 脑裂防护通过min-replicas-to-write配置,在网络分区时牺牲可用性保证数据一致性,需

2026-08-10 07:28:42 96

原创 Redis 系列(九):分布式锁与限流——用 Redis 做并发治理

本文探讨了Redis在分布式锁和限流场景下的核心实现与边界问题。分布式锁需满足SET NX EX原子操作、持有者标识和Lua原子释放三要素,主从切换可能导致锁失效,Redlock存在争议,建议结合业务幂等作为兜底。限流部分对比了固定窗口、滑动窗口和令牌桶三种算法,分析各自优缺点及适用场景。文章通过实验验证边界条件,并给出工程实践建议:分布式锁减少竞争+业务幂等兜底+监控告警。最后展示了shop-lab项目中锁与限流的三层封装实现及测试用例。

2026-08-10 07:27:47 165

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除