Redis技术文章
-
PSUBSCRIBE性能瓶颈源于PUBLISH时线性遍历所有pattern做glob匹配。无索引、无缓存、无短路,pattern越多越慢;大小写敏感且*不匹配空字符串,易误配;超20个pattern或100qps即引发CPU毛刺。476 收藏 -
用SETBIT和GETBIT做存在性判断最直接:SETBIT设定位为1,GETBIT查该位是否为1,O(1)时间、极省空间;不可用BITCOUNT替代,不支持三态,需确保ID到偏移量映射一致。474 收藏 -
执行replicaofnoone再replicaof不会清空从库数据,仅切换复制源;真正全量同步需确保无运行复制流且master_replid/offset不匹配,必要时手动清空或重启从库。474 收藏 -
不能。RedisList无自动回绕机制,需配合LTRIM控制长度实现伪循环队列;RPOPLPUSH不限长也不丢弃数据;原子性操作须用Lua脚本封装;Stream的MAXLEN更贴近循环语义但不支持随机访问。473 收藏 -
Redis集群中Lua脚本不会触发传统死锁,但会因单线程执行而阻塞整个节点;无限循环脚本导致该节点所有命令超时,需通过CLIENTLIST、INFOcommandstats及CLUSTERNODES识别异常,并依赖lua-time-limit、计数器循环、客户端超时与限流等机制防控。473 收藏 -
Redis集群不自动随机化过期时间,需业务层实现;限流须在应用层或网关层统一控制;热点key需加扰动后缀分散分片;三者叠加(集群+随机过期+限流)且随机范围≥±5%才有效防雪崩。473 收藏 -
repl-backlog-ttl是Redis主节点在无从节点连接时自动释放复制积压缓冲区的时间阈值,默认3600秒;超时后清空backlog,导致重连从节点无法部分同步而触发开销巨大的全量同步。472 收藏 -
不能。RedisPub/Sub不具备持久化、ACK、重试机制,断连即丢消息,仅适用于实时性高、允许丢失的场景,如状态刷新、日志广播;不适用于订单、支付等需可靠传递的业务。470 收藏 -
没有被废弃。LRU在Redis4.0后仍为默认策略之一,6.x、7.x持续优化;LFU是新增而非替代选项;LRU候选池采样逻辑微调但未重构,maxmemory-samples默认值从5升至10再优化分布;lru字段仍为24位,精度受限于194天周期与毫秒级取模,扩展会显著增加内存开销与降低缓存效率。469 收藏 -
不会阻塞。RDB持久化由fork()子进程执行,主线程继续处理请求;依赖Linux内核写时复制(COW)机制,fork后父子进程共享物理内存页,仅在修改时才复制对应页,保证子进程读取fork时刻快照,但高写入会加剧COW开销。469 收藏 -
Redis集群不自动随机化过期时间,需业务层实现;限流须在应用层或网关层统一控制;热点key需加扰动后缀分散分片;三者叠加(集群+随机过期+限流)且随机范围≥±5%才有效防雪崩。469 收藏 -
应使用LettuceConnectionFactory替代JedisConnectionFactory,因其原生支持Netty和响应式API;必须配合ReactiveRedisTemplate,并正确配置StringRedisSerializer等序列化器,避免阻塞调用与序列化不匹配问题。466 收藏 -
+sdown表示单个哨兵认定主节点失联,+odown才是触发故障转移的共识临界点;两者时间差暴露网络或配置问题,+odown后还需经选举、选从库、提升等步骤才能完成切换。465 收藏 -
Redis从库默认只读,slave-read-onlyyes是防意外写入的保险栓;设为no后从库可写但导致主从数据不一致,因写命令不回传主库且故障转移会扩散脏数据。464 收藏 -
本文用 Redis Bitmap 实现用户签到:用 SETBIT 写入每天状态,用 GETBIT 查询当天是否签到,用 BITCOUNT 快速统计月签到天数,并补充连续签到和键设计建议。464 收藏