Go语言技术文章
-
Redis 在生成 RDB 快照时可能因 fork 和写时复制出现延迟抖动。本文从慢查询时间线、INFO persistence 指标和内存峰值入手,给出判断、避让与回滚方法。176 收藏 -
批量 UPDATE 不要只加 LIMIT:用可推进的索引范围固定每批数据,缩短事务锁持有时间,并为失败重试保留清晰边界。173 收藏 -
MySQL 8.0前子查询中ORDER BY + LIMIT报错是因语法不支持,错误码1235;解决方法是外移排序逻辑,改用派生表或窗口函数,并确保WHERE条件置于窗口外、日期范围用开区间避免截断。子查询里用 ORDER BY + LIMIT 1 为什么总报错?在MySQL 8.0之前,要是在子查171 收藏 -
A VG(SUM(x))一定报错,因SQL标准禁止嵌套聚合函数,解析器在语法分析阶段即拒绝;所有主流数据库均报“cannot nest aggregate functions”错误,本质是SUM输出标量而A VG需输入一组值。A VG(SUM(x)) 为什么一定报错 这是因为SQL解析器在语法分析阶171 收藏 -
批量处理订单时,不必因为一条异常记录回滚整批事务。本文用 MySQL SAVEPOINT 设计局部回滚边界,配合错误记录、有限重试和最终提交检查,给出可复现的 SQL 与上线排查清单。170 收藏 -
从 CLUSTER KEYSLOT 和 CRC16 哈希槽入手,定位 Redis Cluster 的 CROSSSLOT 报错,用 Key Tag 设计同槽键名,并验收 MGET、MULTI 与 Lua 的批量访问边界。170 收藏 -
ORDER BY RAND()在MySQL中极慢,因其必须全表扫描、为每行计算RAND()并全量排序,即使LIMIT 1也无法避免,100万行耗时可达30秒,且索引完全失效;替代方案为主键范围随机采样等避开排序的方法。因为 RAND() 在大多数数据库里触发全表扫描 + 全行随机数计算 + 全量排序166 收藏 -
应使用deleted_at时间戳字段(TIMESTAMP或DATETIME类型),默认为NULL;NULL表示未删除,非NULL表示已软删除,避免用is_deleted布尔字段以防语义模糊和非法赋值。软删除字段该用什么类型和默认值 直接加 is_deleted 布尔字段最常见,但容易踩坑:Postg166 收藏 -
Redis WATCH 只能在提交前发现被监视键发生变化,并不能保证事务一定成功。本文用并发写入示例拆开事务提交返回空数组、重试窗口和放弃重试的业务边界。165 收藏 -
Redis 过期键到了时间却没有立刻消失,通常不是 TTL 失效,而是惰性删除与定期采样的工作方式。本文用 TTL、EXISTS 和内存指标区分可见延迟、采样清理与大键风险。164 收藏 -
Redis 的 EXPIRE 作用在整个 key 上,不能直接给同一个 HASH 的每个 field 设置独立 TTL。本文从用户会话属性和临时状态的场景出发,对比拆 key、时间戳字段、ZSET 索引三种设计,并给出清理任务、并发边界和验收方法。162 收藏 -
用 Redis SETBIT 把每天签到压成位图,重点处理日期偏移、BITCOUNT 统计、重复签到和跨月清理,附可运行示例与核对方法。162 收藏 -
用一个订单明细 XML 示例讲清 MySQL 8.4 LOAD XML 的行识别、属性与标签映射、LOCAL 风险及导入后核对方法。161 收藏 -
Redis WAIT 用于等待当前连接此前写命令被副本确认,但超时后仍会返回已确认的副本数。本文用 SET、WAIT 和 INFO replication 演示如何判断返回值、区分复制确认与强一致,并处理连接复用和超时边界。157 收藏 -
MySQL REGEXP_LIKE 匹配结果不稳定时,先拆开字符集、排序规则、大小写和反斜杠四个边界。本文给出一套可复现的排查 SQL、修复写法与验收清单。157 收藏