- 博客(256)
- 资源 (5)
- 收藏
- 关注
原创 Pod 重启多场景复盘:OOM、日志阻塞、并发 map 读写导致程序崩溃
近期业务Pod频繁重启,经排查发现三类不同根因:一是内核级OOMKill,容器内存超cgroup限制被强制杀掉;二是虚拟设备死循环导致日志同步写阻塞,协程堆积、内存持续上涨;三是Go程序并发map读写冲突引发panic崩溃。通过dmesg、docker inspect、日志堆栈等多层排查,定位问题本质。后续将推行标准化Checklist,强化异步任务ctx.Copy()使用、日志异步化与降级策略,建立内存增速、协程数等监控告警,实现故障闭环治理。
2026-09-11 17:38:31
142
原创 Docker 多容器日志统一查看
方法(xargsgrep适合快速回顾,一次性获取所有容器的近期 panic 信息。方法(xargsgrep适合实时监控,持续跟踪新产生的 panic。这两种方法都已在生产环境中验证有效,简单高效,无需额外安装工具。如果你还使用 Kubernetes,也可以结合kubectl或stern实现类似效果。希望本文能帮助你在排查容器 panic 时节省时间。如有问题,欢迎留言交流!
2026-08-28 15:50:28
224
原创 多人点餐 WebSocket 实时同步:技术方案选型深度分析
不要因为一个 bug 就换掉整个技术栈。Redis Pub/Sub 是多人点餐实时同步的正确工具,问题是代码写错了,把代码修好就行。本文基于真实生产环境事故复盘编写,所有代码均来自实际项目,已脱敏处理。
2026-08-25 11:07:52
335
原创 WebSocket 连接管理器协程(goroutine)泄漏问题:线上事故复盘与定位分析
摘要:本文记录了一次WebSocket长连接服务在用餐高峰期不可用2小时的事故分析过程。事故初期误判为带宽或单机问题,但常规应急手段(扩容、重启、回滚)均无效。事后通过日志和pprof工具定位到根因:Redis Pub/Sub缓冲打满导致连接断开,同时代码存在竞态问题(锁外写入与持锁关闭channel并发引发panic)。进一步分析发现,panic后的无限制协程重拉机制导致协程泄漏(3天内累计创建1600万协程),最终耗尽资源。解决方案包括修复竞态、优化协程管理、完善监控,并沉淀为开发规范以避免类似问题复发
2026-08-24 15:24:18
356
原创 深入理解ClickHouse存储设计:从列式存储三大困惑到与Kafka的设计同源性
本文深入解析ClickHouse列式存储的核心原理,并与Kafka进行对比,揭示高吞吐数据系统的通用设计范式。主要观点如下: 分段局部连续:列式存储并非整列全局连续,而是在数据片段(Part)内部实现列数据连续存储,通过追加新Part和后台合并解决空间问题。 行号自然对齐:同一Part内各列通过行偏移量自动关联,无需冗余存储主键,配合稀疏索引实现高效查询定位。 列存性能优势:通过列裁剪减少IO、向量化过滤和统计元数据剪枝实现快速查询,不依赖传统联合索引。 与Kafka设计对比:两者都采用分段存储、顺序追加、
2026-08-05 10:18:17
428
原创 从对话到资产:我在AI编程中落地“隐性知识沉淀”的完整实践
本文分享了作者通过AI辅助编程时沉淀设计决策的实践经验。作者发现与AI讨论技术方案时的修改意见往往流失,于是设计了一套"实时废气回收"工作流:在每次方案修改时,自动提取背后的设计规则并结构化存储为Markdown表格。这些规则既指导后续开发(如避免冗余结构、优化查询路径),又能驱动测试用例生成,形成"规则沉淀-代码生成-测试验证"的闭环。该方法显著降低了重复沟通成本,提高了代码一致性,并将隐性知识转化为团队资产。作者建议从半自动开始,注重规则场景化表述,并定期维护规则库。目前仍存在规则粒度控制、文件写入权限
2026-06-04 16:56:03
558
5
原创 Docker部署Kafka持久化遇到的各种问题及解决方案
摘要 在使用 docker-compose 部署 Kafka 时,重启后 Topic 和消息丢失的问题源于 broker.id 随机变化和持久化配置不当。未固定 KAFKA_BROKER_ID 会导致数据目录随机生成,消费者组协调失败。解决方案包括:固定 KAFKA_BROKER_ID,显式指定数据目录路径(KAFKA_LOG_DIRS),持久化 ZooKeeper 数据,并正确配置 KAFKA_ADVERTISED_LISTENERS。最终通过调整 docker-compose.yml 实现数据持久化和稳
2026-04-28 10:08:22
466
原创 Kafka Docker 部署持久化避坑指南:解决重启后 Cluster ID 不匹配问题
Kafka Docker 持久化配置问题解决方案 问题现象 重启 Kafka Docker 容器后,Topic 和消息全部丢失 添加数据卷后 Kafka 无限重启,报错 InconsistentClusterIdException 根因分析 仅持久化 Kafka 数据目录而未持久化 ZooKeeper 数据 ZooKeeper 重启后生成新 Cluster ID,与 Kafka 本地存储的旧 ID 不匹配 解决方案 为 ZooKeeper 添加正确的数据卷挂载: volumes: - ./zookeeper
2026-04-28 09:11:42
720
原创 Sqids ID混淆技术深度测试报告:安全性、可靠性与最佳实践
文章摘要 Sqids是一款开源ID混淆库,能将数字ID转换为短字符串。测试验证了其核心特性:确定性加密(同一输入始终输出相同结果)、大规模数据支持(0-5000万次测试无重复)、配置敏感性(字母表变化导致不同结果)以及特殊字符兼容性。测试表明Sqids在编码一致性(1000万次解码100%正确)、唯一性(Map验证无冲突)和安全性(字母表作为密钥)方面表现优异,特别适合需要短ID且保护隐私的场景,如URL缩短或用户ID隐藏。
2026-04-23 16:31:35
410
原创 飞书多维表格进阶:实现“徒弟填表→自动通知师傅→师傅只填自己的数据”
本文介绍如何利用飞书多维表格实现"徒弟提交记录自动通知师傅补充填写"的业务场景。通过人员字段设置、自动化流程配置和精细化权限控制三个关键步骤,实现:1)徒弟提交后自动触发消息通知;2)师傅仅能看到和编辑与自己相关的记录;3)通过表单视图实现定向数据修改。配置过程包括创建人员类型字段、设置条件触发的工作流、配置行级权限等核心操作,最终形成完整的业务闭环。该方法适用于工单分发、绩效考核等需要定向数据流转的企业场景,无需开发即可快速实现数据隔离和自动化提醒功能。
2026-04-23 16:29:34
1444
原创 高并发营销活动系统:乐观锁在奖励次数限制中的完整工程实践
本文探讨了在高并发会员裂变活动中如何实现精确的奖励计数限制。系统采用三层防护机制:1) Kafka消息幂等防止重复消费;2) Redis分布式锁控制用户事件并发;3) PostgreSQL乐观锁(ON CONFLICT)确保邀请人奖励次数不超限。文章详细分析了业务场景、并发挑战,并给出了包含消息预处理、分布式锁获取、事务处理等环节的完整流程设计。核心逻辑通过独立处理每条奖励规则,确保邀请人和被邀请人的奖励发放互不影响,同时利用幂等键和条件更新精确控制奖励计数。这种分层防护体系有效解决了高并发下的数据一致性问
2026-04-17 13:42:09
614
原创 PostgreSQL 高级并发控制:使用 ON CONFLICT DO NOTHING 实现高并发下的奖励计数限制
摘要本文探讨了高并发营销系统中奖励次数限制的实现方案。针对传统模式在并发场景下易出现数据超限的问题,提出基于PostgreSQL的ON CONFLICT DO NOTHING特性的解决方案。通过Go+GORM实战案例,展示了如何利用数据库唯一约束与原子更新构建可靠的奖励计数系统。文章详细解析了该语法的核心语义,设计了包含联合唯一索引的数据模型,并提供了完整的接口实现和并发测试验证。该方案有效解决了"初始化记录"与"原子递增"的竞态问题,确保奖励计数严格遵循业务规则。
2026-04-17 11:26:31
452
原创 飞书多维表格技巧:用“查找引用”实现明细表自动汇总到汇总表
本文介绍了一种利用飞书多维表格实现明细表自动汇总到汇总表的方法。通过"查找引用"字段和工作流配置,当明细表新增或修改徒弟记录时,汇总表能实时更新师傅的汇总数据。实现步骤包括:1)创建明细表和汇总表;2)配置查找引用字段实现数据关联;3)设置工作流确保新增师傅自动创建汇总记录。该方法具有零代码、实时更新、灵活扩展等优势,适用于各类"一对多"数据汇总场景,有效提升数据管理效率。
2026-04-01 10:27:39
1845
原创 委托模式详解
委托模式是一种将职责转移给其他对象的结构型设计模式。它通过定义委托接口,让委托者持有被委托者的引用,实现功能解耦。示例展示了打印机委托和事件处理两种场景,对比了紧耦合实现的弊端:违反开闭原则、职责混乱、难以测试和扩展。委托模式通过面向接口编程和组合,提高了代码的灵活性和可维护性,支持运行时动态替换行为,是Go语言中实现松耦合设计的有效方式。
2026-03-26 10:56:15
462
原创 零运维基础:Kafka Docker完整部署+全链路问题排查实战指南
本文记录了零运维基础的Go开发人员通过SSH部署Kafka 2.3.0的全过程。主要内容包括: 服务器环境准备:创建目录结构并配置权限 编写JAAS认证配置文件实现外网强制账号密码认证 编写docker-compose.yml实现双端口隔离(内网免密9093/外网认证9092) 部署过程中遇到的4类典型问题及解决方案: docker-compose命令不存在 Go客户端连接报错 最终实现Kafka+Docker部署,并配套Kafdrop可视化面板 全文提供完整部署步骤和问题排查思路,适合开发人员参考实现生产
2026-03-26 10:03:04
467
原创 Kafka Docker 部署避坑指南:监听器配置与客户端连接问题深度解析
Kafka Docker部署中监听器配置是关键,本文通过三个版本逐步优化: 初版问题:端口映射不全导致Kafdrop无法连接,需明确映射9092端口并配置监听地址为0.0.0.0 二版问题:内外监听器分离时,Go客户端连接成功但发送消息失败,因Metadata返回的broker地址(kafka:9093)在宿主机无法解析 终版方案: 使用自定义Docker网络 区分内部(kafka:9092)和外部(localhost:9092)监听器 确保Metadata返回地址与客户端环境匹配 核心结论:Kafka监听
2026-03-17 10:44:29
580
原创 Redis SCAN 命令使用指南(华为云Redis版)
摘要:Redis的SCAN命令是KEYS命令的安全替代方案,支持增量式键遍历。它包含SCAN、SSCAN、HSCAN和ZSCAN四个子命令,分别用于遍历键、集合、哈希和有序集合。SCAN具有非阻塞、游标迭代和灵活过滤等优势,适用于动态Key获取、批量数据处理和键空间巡检等场景。华为云Redis建议控制COUNT值在100-1000之间,避免业务高峰期操作,并注意集群版需要遍历所有分片。与KEYS命令相比,SCAN虽可能重复/遗漏,但性能更好且不阻塞服务,是生产环境推荐方案。
2026-03-13 10:14:45
495
原创 解决华为云编译构建“找不到历史CommitID”的坑:克隆深度是关键
摘要: 华为云CodeArts编译构建服务中,使用历史CommitID构建时提示“找不到版本”的常见原因是浅克隆限制。系统默认只拉取最近几次提交(由“克隆深度”参数控制),导致无法识别更早的CommitID。解决方法为调整代码下载配置中的克隆深度值(建议≤25),或改用Tag构建。合理配置此参数可解决构建失败问题,确保历史版本可追溯。(149字)
2026-03-05 15:23:43
245
原创 代码沼泽里的屈原:一个后端工程师的自白
摘要: 在混乱的代码系统中坚持专业操守,如同屈原行吟泽畔,清醒却孤独。面对技术债务,作者提出优化方案却被忽视,转而采取渐进式修复策略,但仍难抵系统腐化。为此总结出“沼泽生存法则”:防御性编程、测试兜底和量化风险,以最小代价维持系统运行。文章强调“课题分离”——系统问题是公司的责任,而个人应坚守代码质量,不为改变环境,只为保持专业尊严。最后指出,若环境长期消耗热情,或许是时候重新评估匹配度;但坚持整洁代码本身,就是对抗熵增的意义。在技术沼泽中,每个保持清醒的开发者都是当代的“代码屈原”。
2026-03-05 13:35:01
578
原创 弹窗缓存重构技术方案
弹窗配置系统缓存优化方案摘要 针对现有缓存架构的缺陷,提出五项优化决策:1)采用Cache-Aside模式,先更新数据库再删除缓存;2)简化缓存键设计,移除城市字段,将匹配逻辑移至内存处理;3)引入customCache工具包封装缓存操作;4)实施双删策略确保一致性;5)优化对象创建方式避免字段遗漏。优化后预计实现Redis内存减少90%、写操作耗时降低70%、代码重复率减少80%,同时保持99%以上的缓存命中率。方案解决了原设计存在的缓存冗余、城市匹配耦合、写操作风险等问题,显著提升系统性能和可维护性。
2026-03-05 13:21:33
473
原创 面向接口编程与单元测试最佳实践
本文探讨了如何通过面向接口编程提高代码可测试性。以StoreThemeConditionChecker为例,分析了直接依赖数据库模型导致的测试痛点:需要准备真实数据库、测试缓慢且不稳定。解决方案是将储值操作抽象为StoreConditionChecker接口,业务代码依赖接口而非具体实现。生产环境使用真实数据库实现,测试环境则通过Mock实现模拟各种场景。这种解耦方式使单元测试变得快速、稳定且隔离,有效解决了代码与外部依赖强耦合的问题,展示了依赖倒置原则在提升测试效率中的实际应用。
2026-03-04 17:11:30
600
原创 golang:Redis Mock 测试模板
本文提供了一个使用redismock/v8库进行Redis单元测试的Go语言模板。主要内容包括: 依赖引入:使用go-redis/redis和redismock/v8库进行Redis操作模拟 核心结构: mockRedis结构体实现Redis接口 测试函数模板包含测试用例表、mock设置和执行验证 测试流程: 创建Redis mock客户端 设置mock预期行为 执行测试方法 验证结果和mock调用情况 使用说明: 替换占位符适配具体业务 支持多种Redis操作模拟 提供并行测试和错误处理建议 该模板适用于
2026-03-04 16:56:21
273
原创 从结对到范式:SDD驱动下的AI协同编程新实践
本文提出SDD(方案驱动开发)协同编程范式,通过结构化流程解决AI编程中的不可靠性问题。核心方法包括:技术方案先行作为开发契约,渐进式代码生成与校验,测试闭环保障质量,高频提交控制风险。实践表明,这种系统化设计能有效应对AI代码暴走、错误累积等问题,将人机协作从即兴模式升级为可信赖的开发流程。文章还提炼了文档契约化、最小化迭代等落地原则,为团队级AI协同提供了方法论支持。
2026-01-22 14:48:13
1173
原创 AI与人协同:开发领域的转型实践与深度思考
本文分享了AI与开发者协同工作的实践经验与思考。作者通过PostgreSQL批量写入优化、企业微信消息推送系统设计等案例,展示了AI在方案设计、代码生成、测试验证等场景中的价值,总结出"发散-收敛-细化"的协同模式。文章指出LLM本质是概率预测器而非理解者,其成功率随任务复杂度呈指数级下降,因此需要构建"人机协同"新范式:通过确定性优先、减少可能性空间、阶段性交付等原则,用系统设计对抗个体不可靠性。最后提出将AI协同从个体扩展到团队层面,打造工具链、建立规范,并探索A
2026-01-22 13:46:59
782
原创 企业知识库解决方案调研文档(模板)
企业知识库解决方案调研摘要 为构建安全高效的企业SOP知识库,调研对比了四类方案: SaaS方案(如HelpLook):部署快但数据在第三方云端,隔离性低; 二开/私有化方案(如Confluence+AI):数据本地化,需开发支持; 开源方案(如FastGPT):自主可控但技术门槛高; 完全自研:安全性最优但研发成本极高。 核心权衡:数据隔离(安全)与实施成本。建议短期试点B/C类方案验证效果,长期视需求逐步转向自研或开源架构。优先保障机密数据安全,同时平衡开发资源与效率。
2025-12-23 11:15:48
425
原创 基于券类型路由的渐进式重构:函数式选项模式与管道模式的完美结合
本文介绍了电商系统中优惠券订单处理的重构实践。原有CreateCouponOrder函数膨胀至200+行,存在代码臃肿、难以测试和扩展等问题。重构采用函数式选项模式与管道模式相结合的策略,通过按券类型路由实现双逻辑并存:高德券走新管道逻辑,其他券保持原有处理。路由层CreateCouponOrderWithRoute识别券类型并分发请求,同时通过选项函数传递已查询数据避免重复操作。原有函数改造后返回选项函数,支持数据复用。管道模式处理高德券时,通过上下文结构传递状态,各步骤实现独立接口,确保业务连续性和风险
2025-12-17 16:54:39
1110
原创 解耦与提效:券订单系统重构全方案(策略+工厂+管道)
本文针对餐饮O2O系统中订单与券管理耦合度过高的问题,提出了一套系统重构方案。原有系统存在逻辑强耦合、流程混乱、事务一致性难保障和扩展性差四大痛点。通过采用策略模式+管道模式+事务策略的混合架构,实现了业务解耦和流程优化。方案包含清晰的分层设计(API/Service/Domain/Model/Enum层)、核心设计模式组合(策略模式封装券逻辑、管道模式编排流程)以及完整的基础定义实现(订单状态、券类型等枚举和请求响应结构体)。重构后系统显著提升了可维护性和扩展性,为多平台券接入提供了标准化解决方案。
2025-11-27 18:10:22
724
原创 基于GMP模型分而治之思想:实现Slice无锁化并发写操作的实践
本文探讨了Go语言中高并发场景下的Slice无锁化写入方案。通过借鉴GMP调度模型的"分而治之"思想,为每个goroutine预分配独立的数组写入位置,避免了传统加锁方式带来的性能瓶颈。方案具有完全无锁、内存安全、高性能等特点,适用于批量数据获取和并行计算等场景。基准测试显示,相比传统加锁方式,无锁化方案性能提升显著。该技术实现简单却效果显著,是解决并发写操作的优雅方案。
2025-11-19 10:19:21
1139
原创 高效批量数据写入:PostgreSQL COPY 协议实战指南
PostgreSQL COPY协议批量数据写入实战指南 摘要:针对PostgreSQL批量写入大量数据时遇到的参数数量限制问题,本文介绍了使用COPY协议的高效解决方案。COPY协议采用二进制格式直接传输数据,避免了SQL解析开销,可实现百万级数据无分片写入,同时保持事务安全和低内存占用。文章详细讲解了COPY协议原理,并提供了Go语言实现代码和完整测试用例,包括数据验证、事务管理和性能对比。相比传统分批插入,COPY协议在20000条数据测试中展现出显著性能优势,具备更低的内存占用和更少的网络请求次数。
2025-11-19 09:04:35
751
原创 分布式事务:可靠事件队列、TCC和SAGAS事务
本文探讨了分布式系统中解决事务一致性的三种方案:可靠事件队列、TCC和SAGA事务。可靠事件队列通过消息中间件实现最终一致性;TCC采用预留资源的方式保证隔离性,但实现复杂;SAGA更适合外部系统场景,将大事务拆分为可补偿的子事务。特别指出SAGA与事件溯源(ES)存在深刻的内在联系:SAGA的事务步骤可建模为不可变事件,其补偿逻辑与ES的"回溯"机制同构。这种架构融合为复杂分布式事务提供了健壮、透明的解决方案,尤其在涉及外部系统时展现出独特优势。
2025-11-12 16:33:23
980
原创 企业微信消息推送系统设计:基于ES(事件溯源思想)解耦规则与任务架构
本文介绍了一种基于事件溯源(Event Sourcing)思想设计的企业微信消息推送系统架构。系统通过将规则与执行任务解耦,采用"任务只增不改"原则,有效解决了传统方案中状态管理复杂、并发冲突等问题。核心设计包含规则管理器、规则调度器和任务调度器三大组件,通过规则表、任务表和发送日志表实现消息推送全流程管理。系统支持立即发送、定时发送和周期发送三种模式,采用乐观并发控制降低分布式锁复杂度,提升了系统的可靠性和可扩展性。数据库表结构中,任务表承担了"事件存储"角色,完整
2025-11-12 13:59:04
1003
原创 优雅地Mock时间:gomonkey实现time.Now()替换的原理与实践
文章摘要:gomonkey库通过函数地址替换实现在单元测试中对time.Now()的无侵入Mock,解决了时间依赖问题。其核心原理是修改函数机器指令,将标准库函数跳转到自定义mock函数。具体实现包括:构建跳转指令、备份原指令、修改机器码。该方案无需改动业务代码,使测试更加稳定可靠,适用于需要控制时间的测试场景。
2025-11-11 14:37:32
260
原创 架构权衡与实践:基于“约束大于规范”的缓存组件封装
文章摘要:本文介绍了一个基于业务需求封装的Redis缓存组件,重点讨论了延时双删机制的应用场景与实现细节。该机制通过两次删除操作(立即删除+延迟删除)应对主从同步延迟导致的数据一致性问题。组件采用缓存穿透防护(设置特殊占位符)、并发控制(singleflight)、指数退避重试等策略,并支持随机化过期时间避免缓存雪崩。代码示例展示了双删策略、错误处理和缓存操作的核心实现,同时探讨了架构设计中复杂度与可靠性的平衡考量。
2025-10-24 16:56:58
406
原创 从golang从GMP模型到分布式架构:无锁化思想的高并发实践
摘要:本文探讨如何借鉴Go语言GMP模型的无锁化思想应对高并发场景。核心思想是通过数据分片和本地缓存将全局竞争转化为局部操作,如将库存分散到多个数据库实例或应用本地内存。针对分布式环境下的扩缩容和故障恢复问题,提出两种方案:中心调度器模式和基于分布式缓存的共享池模式。最终通过分层设计实现高效与可靠的统一,体现了"分而治之"的并发处理智慧。(149字)
2025-10-24 16:17:00
1154
原创 K8s日志查看与程序更新验证指南
本文探讨了在Kubernetes集群中查看Go程序日志和验证服务更新的问题。针对控制台输出不可见的问题,指出应该使用kubectl logs命令而非直接进入容器shell查看。对于验证服务更新,建议通过检查Pod镜像标签、强制重启Deployment、对比程序版本信息等方式确认。文章提供了具体命令示例和排查思路,帮助开发者解决K8s环境下的日志查看和版本验证问题。
2025-08-20 08:48:44
805
原创 Kubernetes 负载均衡现象解析:为何同一批次请求集中于单个 Pod
在Windows本地Kubernetes集群中,通过Traefik和Kubernetes Service实现负载均衡时,发现循环请求会集中路由到同一Pod,间隔后才切换。这主要是由于Kubernetes Service默认启用会话亲和性和HTTP长连接复用机制:1)同一TCP连接内的请求会被固定到同一Pod;2)Traefik仅转发到Service的NodePort,实际负载均衡由Kubernetes Service完成。解决方案需调整会话亲和性或强制新建连接来实现请求均匀分布。
2025-08-20 08:44:08
734
原创 Kubernetes 常用命令
本文介绍了在Windows环境下使用Kind创建本地Kubernetes集群并集成Traefik进行负载均衡后,如何进入集群容器内部的操作方法。通过kubectl命令获取服务对应Pod名称,使用kubectl exec进入容器控制台进行调试,并提供了常用Kubernetes命令,包括查看集群信息、节点状态、Pod详情和日志等。文章详细说明了如何通过标签筛选Pod、进入容器内部的操作步骤及注意事项,为开发者提供了实用的集群管理和问题排查指南。
2025-08-19 09:42:04
909
原创 在 Windows 上使用 Kind 创建本地 Kubernetes 集群并集成Traefik 进行负载均衡
本文记录了在Windows环境下使用Kind创建本地Kubernetes集群并部署Go服务的完整流程。通过Go1.17环境安装Kind工具,创建集群后,独立运行Traefik作为Ingress控制器。详细说明了构建Go服务镜像、加载到Kind集群、配置Deployment/Service/Ingress等步骤,并解决了Traefik独立运行与集群服务的连接问题。最终通过配置共享网络和动态路由,实现了外部访问(hello.local)的负载均衡,验证了流量分发到多个Pod的功能。
2025-08-19 09:03:30
1312
1
原创 评论父子级关系的高效删除方案:避免递归
本文提出了一种基于路径存储的高效多级评论删除方案。通过在创建评论时记录完整的评论链路路径(如"1,2,3,4"),取代传统递归删除方式。当删除某条评论时,只需使用LIKE条件匹配该路径前缀即可批量标记删除(软删除)目标评论及其所有子评论。该方案显著提升了删除效率,避免了递归查询的性能损耗,同时采用软删除机制保证数据完整性。方案实现包括创建时生成路径、删除时批量更新等核心逻辑,适用于层级较深或数据量大的评论系统场景,兼具性能和可维护性优势。
2025-08-15 08:48:38
404
原创 gorm:全局禁用默认带有deleted_at IS NULL查询条件
GORM默认启用软删除功能,对含deleted_at字段的模型查询会自动添加deleted_at IS NULL条件。本文解释了该机制的原理,并提供了三种解决方案:1)全局取消软删除过滤,通过注册查询钩子强制所有查询返回全部数据;2)单次查询使用Unscoped()方法;3)模型层面移除软删除特性。这些方法可帮助开发者在需要时灵活控制软删除行为。
2025-08-15 08:45:32
577
ASP.NET MVC 5高级编程 第5版(中文版)
2018-07-03
C#公共通用类
2018-09-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅