Go语言技术文章
-
活动报名、接口去重、用户访问统计里经常会用 Redis Set。本文从“页面显示人数不对”的现场开始,逐步验证 SADD 返回值、SCARD 数量、Key 粒度和过期策略,整理一套更稳的 Set 去重写法。194 收藏 -
INFOkeyspace无法反映淘汰情况,因其仅统计存活key数量,不区分已过期未删除或已被淘汰的key,且不记录evicted_keys等关键淘汰指标。191 收藏 -
数据库 · MySQL | 10小时前 | MySQL · CPU · 数据库 · 性能治理 · 资源组 · MySQL 8.4 MySQL资源组 RESOURCE_GROUP RESOURCE_GROUP_ADMIN CPU限流
MySQL 8.4 的资源组可以把线程或单条 SQL 放进指定 CPU 资源边界,适合给报表、后台批处理和在线请求做隔离。本文用 RESOURCE_GROUP 语句与 RESOURCE_GROUP 优化器提示演示创建、绑定、检查和回滚,并说明权限与线程范围的限制。191 收藏 -
CTE可不是万能的语法糖,其是否适用取决于复用性、逻辑复杂度以及数据库的物化策略。只有在同一子查询被引用不少于2次、包含聚合/窗口/多表JOIN、嵌套超过2层且语义清晰、需要递归处理的情况下,才建议使用CTE。在命名CTE时,必须显式声明列,以避免SELECT*和同名列冲突。MySQL 8.0+默认190 收藏 -
从 MySQL 8.4 Skip Scan 入手,讲清复合索引没有左前缀条件时优化器为什么仍可能走索引,以及如何用 EXPLAIN ANALYZE 和 optimizer_switch 做生产验证。189 收藏 -
MySQL 查询不走索引,常见原因不是索引不存在,而是 SQL 写法让优化器难以利用索引。函数包列、隐式类型转换、范围过宽和联合索引顺序不匹配,都应该用 EXPLAIN 验证后再改写。189 收藏 -
为啥JSON_CONTAINS查不到数组值?关键在于字段是不是JSON类型,以及路径有没有写'$[*]'。一定要确保字段是JSON类型,并且明确指定路径,比如JSON_CONTAINS(col, "val", '$[*]'),如果是数字,就不需要引号啦。JSON_CONTAINS 查不到数组里的值?188 收藏 -
数据库 · Redis | 2个月前 | Redis · 消息队列 · Stream · 消费组 · redis 消息队列 Redis Stream 消费组 XREADGROUP XACK XPENDING XAUTOCLAIM
用订单异步处理场景讲清楚 Redis Stream 的实用队列模型:生产者写入消息,消费组分配任务,Worker 处理成功后 ACK,失败或超时的消息进入待确认列表,再通过 XPENDING 和 XAUTOCLAIM 做重投。187 收藏 -
Redis Hash 变大后,真正难排查的常是某几个字段值异常膨胀。本文用 HSCAN NOVALUES 先低成本找字段,再按需回读长度并设置告警阈值,避免把整份 Hash 搬到应用内存。187 收藏 -
Redis Lua 脚本一旦超过 lua-time-limit,会阻塞其他命令并返回 -BUSY。本文用一个长脚本现场说明如何确认阻塞、何时可以 SCRIPT KILL、写入后为什么只能重启,以及如何在脚本侧避免再次拖住主线程。184 收藏 -
ZADD的score不能用时间戳,因同分排序不稳定且时间戳递增违背“分数越高名次越靠前”逻辑;应使用业务分数(如积分)并利用ZADD覆盖更新、ZINCRBY原子累加、ZREM安全删除。183 收藏 -
RedisPub/Sub不适合异步任务处理,因其无确认机制、无持久化、不支持消费者组与积压缓冲;应选用LPUSH+BRPOP或XADD+XREADGROUP(Stream)实现可靠任务队列。183 收藏 -
线上 Redis 里堆积了过期业务前缀或历史缓存时,不能直接用 KEYS 和 DEL 硬删。用 SCAN 分批遍历、先记录样本、按速率提交 UNLINK,并保留停止开关和统计结果,能把清理风险压到可控范围。183 收藏 -
数据库 · Redis | 1个月前 | Redis · 缓存治理 · Keyspace Notifications · 过期事件 · redis Pub/Sub Keyspace Notifications 过期事件 缓存监听 补偿任务
本文用 Redis Keyspace Notifications 演示如何监听过期 Key,配置 notify-keyspace-events,接收 __keyevent@0__:expired 事件,并说明事件通知的丢失风险与补扫兜底做法。181 收藏 -
精度丢失,究其本质,乃是类型链的断裂所致。比如,BigDecimal未传递scale参数,DECIMAL列定义过窄,以及SQL Server的money类型未被MyBatis默认识别,这三种情况导致了80%以上的问题。就像BigDecimal(35.35, scale=2)最终存储为35,这是因为J181 收藏