Redis技术文章
-
从零做一个 Redis 慢命令快照小工具,采集 SLOWLOG 样本,解析命令耗时和 Key 线索,按命令类型聚合成 Markdown 报告,用于接口延迟排查和上线前验收。501 收藏 -
应立即停止Redis服务,恢复备份RDB文件,并严格配置user、dir权限(700)、禁用save""、检查日志权限错误;AOF重写需确保目录UMask=077、禁用绝对路径appendfilename;混合持久化与容器化部署须同步宿主机文件属主和权限。499 收藏 -
@Cacheable默认不设过期时间,若统一配置TTL则所有key同步过期易引发雪崩;需通过RedisTemplate手动写入并添加随机偏移(如10分钟±60秒)来缓解。498 收藏 -
Redis内存淘汰策略由maxmemory-policy配置决定,不设则默认noeviction导致写入失败;需结合数据TTL、访问模式及一致性要求选择volatile-lru、allkeys-lru等策略,并确保maxmemory非零、淘汰触发条件满足。496 收藏 -
Redisset命令只支持字符串值,存对象需先序列化为JSON;注意处理日期、枚举等特殊字段,避免额外引号,跨语言场景优先选JSON而非Java原生序列化。496 收藏 -
RPOPLPUSH是唯一能安全抢占List任务的原子操作,因其一步完成“从source弹出并推入destination”,避免LRPOP+LPUSH组合导致的任务丢失、重复或空返回误判。495 收藏 -
Redis发布订阅不保存历史消息,因此SUBSCRIBE收不到已发布的消息;审计必须由发布端主动同步写入持久化存储,不能依赖Pub/Sub自身机制。495 收藏 -
Redis集群必须使用ntpd或chronyd平滑同步时间,内网部署专用NTP服务器,配置restrict规则、硬件时钟同步和开机自启,并通过ntpq-p、ntpq-crv及Redis日志持续监控。494 收藏 -
预热时DB被打挂因未限流分片、全量查询触发慢查锁表及连接池耗尽;应按主键分页、加休眠、控制并发、Pipeline分批、设临时标记、渐进切流、拆分Hash结构并监控关键指标。494 收藏 -
分片后每个Redis节点必须独立配置持久化,RDB需统一save规则且隔离磁盘路径,AOF应全节点开启并设appendfsynceverysec,避免部分节点未持久化导致数据丢失。494 收藏 -
频道名本身不引发哈希冲突,但不良命名会损害运维、调试与权限控制;应采用小写、英文数字、下划线/点号分层的短名(≤64字符),避免空格、通配符、控制字符及动态拼接注入风险。493 收藏 -
Redis发布订阅怕大Key是因为PUBLISH不校验消息大小,大Payload会阻塞单线程主线程,导致延迟飙升、内存积压;应用层需在序列化后截断或拒绝超限消息(如>100KB),订阅端须预检长度并禁用自动解码,大Payload场景应改用SET+key事件、DB查询或Kafka等替代方案。491 收藏 -
应使用Redis的Hash或ZSet维护用户会话映射,新登录时先获取并删除旧会话缓存及黑名单,配合事务或Lua脚本保证并发安全,而非仅依赖EXPIRE。491 收藏 -
根本原因是COW导致RSS内存暴涨触碰maxmemory上限而被迫淘汰;bgsave时fork子进程触发Copy-On-Write,父进程修改内存页即复制物理页,临近maxmemory时瞬时内存增长直接触发淘汰。489 收藏 -
执行replicaofnoone再replicaof不会清空从库数据,仅切换复制源;真正全量同步需确保无运行复制流且master_replid/offset不匹配,必要时手动清空或重启从库。489 收藏