讲师中心 微信公众号
AI工具推荐 视频效率加速

c# 分布式锁的实现 c# Redis 和 Zookeeper 实现分布式锁的区别

冬芳姑娘_8785

冬芳姑娘_8785

发布时间:2025-12-31 08:09:09

|

448人浏览过

|

来源于php中文网

原创

Redis分布式锁易丢锁因GC或网络抖动致key过期,A恢复后误删B的锁;需UUID+Lua校验value、合理设超时、避免主从异步复制问题。

c# 分布式锁的实现 c# redis 和 zookeeper 实现分布式锁的区别

Redis 分布式锁为什么容易丢锁

Redis 实现分布式锁最常见的是用 SET key value NX PX timeout,但仅靠这一条命令无法应对所有异常场景。比如客户端 A 拿到锁后,在业务执行中发生 GC 停顿或网络抖动,导致 Redis 中的 key 过期被自动删除;此时客户端 B 顺利加锁,A 恢复后仍按原逻辑执行释放操作——它会误删 B 的锁。

  • 必须用唯一标识(如 UUID)作为 value,释放锁时通过 Lua 脚本比对 value 再 DEL,避免误删
  • 锁超时时间不能拍脑袋设,需覆盖「最长可能执行时间 + 网络毛刺余量」,否则频繁过期引发冲突
  • 单节点 Redis 故障会导致锁服务不可用;用 Redis Sentinel 或 Cluster 时,主从异步复制可能导致锁在主节点写入成功、从节点未同步就故障切换,造成重复加锁

Zookeeper 分布式锁依赖临时顺序节点

Zookeeper 的分布式锁本质是利用 EPHEMERAL_SEQUENTIAL 节点和 Watch 机制。每个客户端在指定路径(如 /lock)下创建临时顺序子节点,然后检查自己是否是序号最小的节点:如果是,获得锁;否则监听前一个节点的删除事件。

  • 客户端断连后,ZK 自动删除其创建的临时节点,无需超时机制,天然防死锁
  • ZK 的强一致性(ZAB 协议)保证所有客户端看到的节点状态严格一致,不存在 Redis 主从不一致导致的锁冲突
  • 但 ZK 集群至少需 3 节点,运维成本高;频繁争锁会产生大量 Watch 事件和节点创建/删除,压测时易触发连接数或 ZNode 数量限制

C# 客户端实现的关键差异点

.NET 生态中,StackExchange.Redis 和 Curator(需通过 IKVM 或 .NET Core 兼容层)或 ZooKeeperNetEx 是主流选择。二者 API 抽象层级完全不同:

Browser Session Manager
Browser Session Manager

使用 Playwright 为 jimeng.jianying.com 管理浏览器会话,导入 cookies/localStorage 以自动化视频生成工作流,支持图片上传等功能

下载
  • Redis 锁通常封装为 TryAcquire(string key, string value, int expiryMs) 和 Release(string key, string value),核心是原子 Lua 脚本调用
  • ZK 锁更倾向基于租约(lease)模型,如 InterProcessMutex 类,内部处理重试、Watch 回调、会话重建等,使用者只需 mutex.Acquire() / mutex.Release()
  • Redis 锁失败后一般立即返回 false;ZK 锁默认阻塞等待,可通过 Acquire(timeout) 控制,但超时判定依赖 ZK 会话超时(sessionTimeout),不是应用层计时
// Redis 锁释放 Lua 脚本示例(C# 中通过 Eval 执行)
if redis.call("GET", KEYS[1]) == ARGV[1] then
    return redis.call("DEL", KEYS[1])
else
    return 0
end

选型时真正该看的不是语言而是 SLA

如果业务能容忍秒级锁失效(如定时任务去重),Redis 更轻量、吞吐高;如果涉及资金、库存等强一致性场景,且已有 ZK 基础设施,ZK 的可靠性更可预期。

别忽略部署环境:K8s 里跑 ZK 集群的 Pod 重启、滚动更新、网络分区都会影响会话稳定性;而 Redis 在云上托管服务(如 Azure Cache for Redis)已内置高可用,但得确认其是否支持 WAIT 命令保障写入多数节点。

最容易被跳过的点是锁的粒度——用同一个 key 锁住所有订单 vs 按 order_id 分锁,后者才能真正并发,前者只是串行化。

相关文章

keep
keep

Keep是一款健身安排,无论是想减肥塑形或增肌,还是寻找健身跑步瑜伽计步等训练计划,你可以随时随地选择课程进行训练!权威教练视频教学,健身干货自由分享!有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

2113

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

3394

2023.10.07

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6919

2023.08.02

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6919

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3325

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

4328

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

2945

2025.08.29

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4749

2023.11.02

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

100

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn