Go语言技术文章
-
Redis延迟高但CPU正常通常是网络丢包或抖动所致,表现为redis-cli--latency毛刺飙升、ping标准差>10ms或丢包率>0.1%,需用tcpdump抓包分析重传与ACK丢弃,并排查云环境安全组、NAT会话老化及内核TCP参数配置。221 收藏 -
RedisHash最适合存购物车,因其天然支持按商品ID(field)原子增减、查询、删除;HINCRBY可安全±数量并自动初始化为0,但需应用层校验负数;key为cart:{user_id},value仅存整数数量,过期用EXPIRE设置。221 收藏 -
INCRBY不能直接用作全局唯一ID,因其在主从复制延迟、Redis重启无持久化、分片集群跨slot等场景下会导致ID重复或跳变;可靠方案是时间戳+原子自增组合,并需开启AOF、Lua封装、slot标签等保障措施。219 收藏 -
PUBLISH命令不能在Redis事务中执行,因其属异步广播机制,与事务的原子性语义冲突;SUBSCRIBE等订阅命令同样禁止入事务,因会切换连接状态;需原子化“改数据+发消息”时应使用Lua脚本。216 收藏 -
直接用DEL释放锁会误删其他客户端的锁,因判断持有锁与删除非原子操作;Lua脚本通过原子执行“GET校验+DEL”解决,需传入key和client_id,返回1成功、0失败。216 收藏 -
RedisPub/Sub不保存消息,断连即丢消息,无法满足即时通讯的离线兜底需求;必须用Stream(XADD/XREAD)持久化消息,Pub/Sub仅作在线实时广播通道。213 收藏 -
RedisSET命令不全局阻塞,但单次执行时间随value长度线性增长,占用主线程导致后续命令延迟;大value主要瓶颈在内存分配、拷贝与驱逐逻辑,可通过SLOWLOG和latency-monitor验证,优化方式包括拆分key、改用Stream/Hash或移出大blob。213 收藏 -
缓存雪崩是大量key集中过期或Redis实例不可用导致请求直击数据库,引发数据库过载崩溃;需通过TTL随机偏移错峰过期、熔断降级、本地缓存兜底及禁用危险命令等手段防御。213 收藏 -
应使用HSET分字段存储用户资料而非SET存JSON,因其支持原子性单字段操作、避免并发覆盖、节省带宽;字段名须全小写下划线;慎用HGETALL防性能陷阱;Hash无内置TTL,需显式EXPIRE。210 收藏 -
Redis6+集群启用TLS需版本≥6.0且编译时启用OpenSSL(makeBUILD_TLS=yes),OpenSSL≥1.1.1,所有节点共用同一CA证书,配置必须包含tls-cert-file、tls-key-file、tls-ca-cert-file、tls-clusteryes、tls-replicationyes,客户端需指定--cacert,证书更新须滚动重启。209 收藏 -
Redis原生SINTER不支持带权重或条件过滤的交集计算,因其仅做纯元素匹配;需用Lua脚本在服务端原子执行复杂逻辑,但须防范阻塞、性能与维护风险。205 收藏 -
bgsave不阻塞Redis主线程,因其fork后由子进程独立完成RDB生成,主线程立即恢复服务;卡顿仅发生在fork阶段,大内存实例页表复制开销显著。204 收藏 -
数据库 · MySQL | 2星期前 | MySQL · 数据库 · 联合索引 · ORDER BY · 慢查询排查 · mysql order by explain 慢查询 联合索引 filesort
本文从列表接口排序变慢的现场开始,带你用 EXPLAIN 看执行计划,定位 ORDER BY 触发 filesort 的原因,再按筛选字段和排序字段设计联合索引,最后通过 rows、Extra 和耗时变化验证优化效果。203 收藏 -
Bitmap签到本质是将日期转为从基准日开始的天数差作为offset,用SETBIT操作位;需统一UTC时区、避免手算闰年、单用户单key(如sign:uid:12345)、按月分key更实用,查连续签到须结合日期范围校验offset。202 收藏 -
大key在Redis主从同步中会触发复制断连,表现为从库state由online突变为offline、日志反复出现Connectionwithmasterlost和Resyncingfrommaster,根源是RDB/AOF传输超时或内存溢出。201 收藏