Go语言技术文章
-
网卡PPS打满是吞吐量上不去的常见原因,尤其在小key/value场景下,单请求虽仅60–100字节却生成独立TCP包,易使网卡达到硬件上限。125 收藏 -
Redis的WATCH+Lua无法实现可靠乐观锁,因WATCH不监控Lua脚本执行,脚本内读-改-写仍存在竞态;真正可靠的是将“读-校验-写”全部封装进单个原子Lua脚本中完成。124 收藏 -
BITFIELD存储指定宽度和符号性的整数片段(如i8、u16),非完整整数对象;支持位级读写、原子增减及溢出控制,但需注意偏移单位为位、未初始化位返回0、跨字节边界正确处理及客户端解析差异。123 收藏 -
布隆过滤器是解决缓存穿透最可控的手段,需部署在Redis之前拦截非法key;它不支持删除、存在误判率,须按真实数据量预估容量,并配合参数校验与限流使用。122 收藏 -
PUBSUBNUMSUB命令可实时获取指定频道的活跃订阅者数量,返回整数(无人订阅时为0),支持多频道批量查询,但不区分SUBSCRIBE/PSUBSCRIBE,且在RedisCluster中需直连对应节点执行。121 收藏 -
Redis集群执行Lua脚本失败大概率因KEYS未落在同一slot,必须用{}哈希标签确保所有KEYS经CRC16计算后归属相同slot,否则直接报CROSSSLOT错误,EVALSHA同理受限,脚本无法补救key设计缺陷。120 收藏 -
数据库 · MySQL | 2星期前 | binlog · 主从复制 · 故障排查 · MySQL教程 · DBA实战 · mysql DBA binlog 主从复制 MySQL 8.4 复制延迟 relay log
从只读库延迟导致读到旧数据的事故切入,讲清 MySQL 8.x 复制延迟如何区分 IO 接收、relay log 应用、大事务、并行复制和只读流量影响。119 收藏 -
本文用秒杀扣库存场景讲清 Redis Lua 的落地方式:在一个脚本里完成库存校验、重复订单判断、扣减库存和记录订单结果,减少并发下超卖和重复扣减风险。118 收藏 -
本文用 Redis ZSET 设计一个轻量延迟队列,讲清楚如何写入订单超时任务、按时间扫描到期任务、抢占删除、防重复处理以及失败重试。116 收藏 -
appendfsyncalways会让Redis卡在磁盘上,因其每条命令都强制调用fsync()等待硬件确认落盘,使QPS被钉死在磁盘IOPS天花板;而everysec通过后台线程批量刷盘解耦主线程与I/O,大幅降低IOPS压力但引入秒级延迟毛刺。112 收藏 -
Redis内存爆满主因是业务接口批量生成无TTL垃圾Key,需在防火墙层限流新建连接并绑定127.0.0.1监听,禁用公网暴露与弱密码。112 收藏 -
RedisPub/Sub不支持消息过期机制,因其是纯内存即时广播通道,消息不存储、无TTL、不落盘;需改用SET+EXPIRE、STREAM配合定时清理或ZSET实现带有效期的消息。111 收藏 -
Pub/Sub是无存储的实时广播机制,消息断连即丢,适合允许丢失的在线通知;Stream是带ACK的持久化消息队列,支持回溯、消费者组和精确控制,但需手动管理XACK与MAXLEN。111 收藏 -
JedisPool不自动处理主从切换或断连重连,需应用层干预;卡住主因是连接池耗尽或失效连接未剔除,而非未重连。111 收藏 -
本文从一次商品详情接口抖动出发,演示如何发现 Redis 热 Key、判断访问倾斜,并通过过期时间抖动、本地短缓存、singleflight 合并加载和拆分 Key 降低热点冲击。111 收藏