Go语言技术文章
-
Redis Pub/Sub 不是带历史记录的消息队列。订阅者断线期间发布的消息不会在重连后补发;本文解释 at-most-once 语义,并给出实时广播、持久状态对账和 Redis Streams 恢复的选择方法。287 收藏 -
MySQL 中同一条语句多次引用 CTE,通常只会物化一次;本文用 EXPLAIN 和 optimizer_trace 区分共享结果、自动索引与真正重复工作。237 收藏 -
数据库 · Redis | 2星期前 | Redis · 消息队列 · Stream · XREADGROUP XACK XPENDING XAUTOCLAIM Redis Streams Pending List
Redis Streams 使用 XREADGROUP 读取消息后,如果没有执行 XACK,消息会留在消费组的 Pending Entries List。本文用 XPENDING 定位归属和空闲时间,再分别说明原消费者恢复历史消息、健康消费者用 XAUTOCLAIM 接管故障消息的处理方式。342 收藏 -
解释 MySQL GROUP BY 执行计划中的 Using temporary,区分临时表提示与磁盘溢出,并从排序组织、联合索引、左前缀和执行计划复查四个方面减少不必要的临时结果整理。134 收藏 -
Redis Sorted Set 的相同 score 并不是无序的:member 会按字节序形成确定的次序。本文从 ZRANGE、REV、LIMIT 出发,解释偏移分页的风险,并给出复合游标、快照键和分数变化时的稳定分页方案。349 收藏 -
解释 MySQL 同表 OR 条件何时可能采用 Index Merge,带你从 EXPLAIN 的 type、key、rows、Extra 判断 union 与 sort_union,并通过单语句对照实验评估是否值得保留。373 收藏 -
EXPIRE 只能让整个 Redis Hash key 过期,不能单独淘汰某个 field。Redis 7.4.0 起可用 HEXPIRE、HPEXPIRE 设置字段级 TTL;旧版本则应按生命周期拆分 key。456 收藏 -
MySQL 联合索引不是把多个单列索引简单拼在一起。以 (tenant_id,status,created_at) 为例,查询跳过第一列时通常失去按该联合键直接定位的能力,但最终是否使用索引仍要看谓词、选择性、统计信息和优化器成本。本文用 EXPLAIN 给出判断方法。264 收藏 -
连接池复用能减少建连开销,但空闲连接可能已经失效。本文用 Redis PING 和 redis-py 示例说明健康检查、失效连接隔离、连接重建与业务重试的边界。387 收藏 -
MySQL InnoDB 默认 REPEATABLE READ 下,普通 SELECT 读取的是事务快照。本文用两个会话说明新提交为何暂时不可见,以及如何选择 COMMIT、READ COMMITTED 或 FOR SHARE。385 收藏 -
Redis pipeline 返回结果与发送命令一一对应,但单条命令错误、连接中断和事务失败的执行边界不同。本文用响应下标、批次和重试策略说明如何判断哪些命令已执行。478 收藏 -
用 EXPLAIN 判断索引选择问题,比较 USE INDEX、FORCE INDEX 与 MySQL optimizer hint 的作用范围、风险和验证方式。478 收藏 -
MySQL EXPLAIN FORMAT=JSON 的嵌套循环成本要结合 nested_loop、rows_examined_per_scan、rows_produced_per_join 和 cost_info.prefix_cost 阅读。本文用一条 JOIN 示例说明如何找出成本被放大的连接分支,并区分优化器估算与实际耗时。166 收藏 -
Redis FCALL_RO 只允许执行声明为 no-writes 的函数,适合可接受复制延迟的只读副本查询;FCALL 面向普通读写函数并应按节点角色路由。205 收藏 -
Redis Lua 脚本如何把多个 key 的读取、条件校验和修改放进一次原子执行,并正确使用 KEYS、ARGV、hash tag 与 EVALSHA。423 收藏