Go语言技术文章
-
MySQL 生成列索引不生效,通常不是索引语法错,而是查询表达式没有与生成列定义完全匹配。本文按表达式、结果类型、JSON_UNQUOTE 和 EXPLAIN 四个方向排查。300 收藏 -
用 Redis SET NX EX 原子创建带过期时间的分布式锁,配合唯一 token 和 Lua 原子释放,避免锁永久残留或误删其他实例的新锁。186 收藏 -
MySQL 用 SUM OVER 计算累计值时,如果希望每个月重新开始,关键不是给 SUM 加条件,而是把包含年份的月份键放进 PARTITION BY,并用稳定的时间与主键排序。本文给出可直接改写的 SQL 和排查清单。380 收藏 -
Redis Stream 使用 XTRIM MAXLEN ~ 时,阈值是近似目标而不是硬上限,宏节点边界和 LIMIT 都可能让裁剪后保留少量额外消息。本文用 XLEN、XRANGE 解释结果,并给出精确裁剪与 MINID 的选择方法。441 收藏 -
MySQL 用 ROW_NUMBER 取每组最新记录时,如果时间相同,必须补充唯一且符合业务的排序键;若要保留全部并列最新行,应改用 RANK。本文用订单状态示例说明两种写法和检查清单。242 收藏 -
Redis XREADGROUP 使用 BLOCK 参数控制没有新消息时的等待时长:BLOCK 2000 表示最多等待 2 秒,BLOCK 0 表示无限等待;读取待处理消息时使用非 > 的 ID,BLOCK 不会生效。469 收藏 -
MySQL JSON_VALUE 对缺少路径和 JSON null 都可能返回 SQL NULL。本文用 JSON_CONTAINS_PATH、JSON_TYPE 和 ON EMPTY 哨兵值区分路径缺失、JSON null、空字符串与 SQL NULL 文档。170 收藏 -
介绍 Redis XPENDING 的摘要和扩展查询,查看消费组中按消息 ID 最早的未确认消息,并区分最老 ID与空闲最久的 pending 记录。259 收藏 -
MySQL JSON_TABLE 用 FOR ORDINALITY 为展开后的数组元素生成从 1 开始的序号。本文说明一基与零基位置、嵌套数组中的父子序号,以及先展开后过滤和路径筛选对原始位置的影响。139 收藏 -
Redis 8.8 的 INCREX 把计数、上限、过期和只在新窗口设置 TTL 组合成一个原子命令。本文用固定窗口限流示例说明如何从简单 Lua 方案迁移,如何读取实际增量,以及哪些多键和滑动窗口场景仍应保留 Lua。131 收藏 -
MySQL 复制延迟排查先区分 IO 接收线程和 SQL 应用线程,再结合读取位点、执行位点、relay log 积压及 Last_IO_Error、Last_SQL_Error 判断问题落点。304 收藏 -
Redis Lua 返回数组出现 nil,关键在 Lua table、RESP2/RESP3 与客户端解码的多层映射。本文用最小脚本说明 nil 截断、空回复差异和稳定返回契约的修复方法。448 收藏 -
MySQL 分区表清理历史数据时,DROP PARTITION 为什么通常比逐行 DELETE 更快?本文从分区边界、索引与日志工作粒度解释差异,并给出执行前后的核对清单。461 收藏 -
Redis Cluster 中 MULTI 不能直接跨槽位执行。本文解释 hash slot、哈希标签和 MOVED 边界,并给出键设计、事务拆分与上线检查清单。300 收藏 -
MySQL 事件显示执行过但任务表没有更新时,先查 event_scheduler 和事件状态,再核对计划、时区、DEFINER 权限、错误日志与 SQL 条件,避免把调度成功误判成业务写入成功。486 收藏