Go语言技术文章
-
Redis Stream 的消息保留可以按数量或消息 ID 控制:MAXLEN 适合固定条数,MINID 适合按时间窗口推进。本文用 XTRIM 和 XADD 示例说明精确、近似裁剪、消费组引用以及上线前的检查边界。279 收藏 -
订单表把地区和渠道放在 JSON 字段后,JSON_EXTRACT 条件常常无法直接利用普通索引。本文用一张 orders 表复现慢查询,再通过生成列与联合索引让 EXPLAIN 和实际耗时同时给出可核对的变化。278 收藏 -
MySQL 隐形索引适合用来验证一个索引是否仍被优化器需要。本文以订单查询为例,演示如何将索引设为不可见、用 EXPLAIN 对比计划、观察线上指标,并在结果不理想时快速恢复。278 收藏 -
MySQL 8.4 的 INSERT 语法没有通用的 RETURNING 子句。本文用订单写入场景解释为什么不能把 PostgreSQL 式写法直接搬过来,并给出 LAST_INSERT_ID、事务内 SELECT 和多行写入的核对边界。278 收藏 -
Redis Lua 脚本返回多条结果时,关键不在于把值塞进 table,而在于分清 KEYS 与 ARGV、避开 nil 截断,并按 RESP2 的数组语义设计客户端解码。278 收藏 -
Redis 8.10 新增 LMOVEM 与 BLMOVEM。本文用 COUNT、EXACTLY、OBO、BULK 四个边界说明如何在非阻塞搬运和等待数据的队列消费者之间做选择。278 收藏 -
把 Redis MEMORY DOCTOR 当作内存问题线索入口,再用 INFO memory 和 MEMORY STATS 区分数据集、历史峰值、分配器碎片及客户端和复制缓冲区,按证据选择治理动作并复测。277 收藏 -
数据库 · MySQL | 1个月前 | MySQL · 索引 · 数据库 · 执行计划 · 性能排查 · 执行计划 cost_info MySQL EXPLAIN FORMAT=JSON rows_examined_per_scan 索引选择
用一个订单查询拆解 MySQL EXPLAIN FORMAT=JSON:怎么看 cost_info 和 rows_examined_per_scan,如何把估算行数、过滤条件与索引选择对上,避免只盯着 type=ALL 下结论。276 收藏 -
MySQL InnoDB 事务死锁发生后,不能只看一条报错就改重试。本文用订单与库存更新场景还原锁等待环路,演示如何读取 SHOW ENGINE INNODB STATUS、关联 performance_schema、判断受害事务并验证修复是否真正降低死锁风险。275 收藏 -
Redis 连接池耗尽时,报错常常出现在业务命令而不是建连阶段。本文用 go-redis 的两个连接槽复现等待超时,再结合 CLIENT LIST、PoolStats 和复用检查确定该调池大小还是缩短占用时间。275 收藏 -
清理 MySQL 大表历史数据时,直接 DELETE 大范围记录容易造成锁等待和事务膨胀。本文用主键游标、固定批次、执行计划和可暂停的回滚窗口,搭出一套可观察的分批清理方案。273 收藏 -
按月增长的订单或日志表,不必每次归档都全表搬运。本文用 MySQL 8.4 RANGE 分区示例,说明分区键设计、分区裁剪检查、按月新增与删除边界,以及上线前的回滚和验收方法。273 收藏 -
用一个可复查的导出命令讲清 mysqldump --single-transaction 的一致性边界:InnoDB 为什么能在不锁表的情况下读取同一快照,MyISAM 与 DDL 操作又会带来哪些风险。273 收藏 -
Redis EXPIRE 再次续期会直接替换旧 TTL。本文用会话滑动过期场景解释默认语义,并比较 NX、XX、GT、LT 的使用边界与排查方法。273 收藏 -
在检测序列断档方面,LAG()无疑是最为可靠的,它仅仅依赖于相邻行ID的差值,而不预设数据是连续的,也不假定起始值。LEAD()则更适合用于定位缺口区间。ROW_NUMBER()可就不适合用于真实断档的检测了,因为它生成的是序号,而不是真实的ID。此外,对于空表、NULL以及边界值,都需要进行显式的271 收藏