-
RedisPub/Sub不直接产生内存碎片,但未清理的订阅连接、消息积压或缓冲区配置不当会推高used_memory_rss,导致mem_fragmentation_ratio偏高,形成“假性碎片”;真实碎片源于键值对频繁增删改,而Pub/Sub缓冲区不受active-defrag影响。
-
CLUSTERKEYSLOT仅执行CRC16(key)mod16384计算,返回0–16383的槽号,不查询集群拓扑或节点信息;定位具体实例需配合CLUSTERSLOTS或CLUSTERNODES查找槽所属节点。
-
RedisStream不受maxmemory-policy淘汰机制影响,仅XADD的MAXLEN/MINID参数可在写入时截断数据;MAXLEN加~为近似截断,不加则严格控制条数,且只从最老端删除;消费者组未XACK会导致PEL积压,MAXLEN无法清理。
-
从节点默认不执行任何过期逻辑,仅重放主节点发来的DEL等命令;必须设maxmemory-policy为noeviction(或7.0+启用replica-ignore-maxmemoryyes)防止主动淘汰破坏一致性。
-
直接用SETNX易误删锁,因加锁与设过期非原子操作,且释放锁未校验线程标识;正确做法是SET+NX+EX原子加锁并用Lua脚本校验值后删除。
-
RedisPub/Sub不能替代RabbitMQ,因其不保证消息可达、无持久化订阅、无消费确认机制,消息丢失理直气壮;它纯内存广播,断连、重启后消息全丢,无积压、无offset、无重试,仅适用于允许丢失的实时轻量场景。
-
哨兵判定主节点“客观下线”失败的常见现象是客户端连接断开、写请求超时,但sentinelinfo显示master-status:ok或sentinels数量不足,本质是哨兵未达成quorum票数共识;原因包括quorum设置过大、哨兵间26379端口不通、monitor配置不一致等。
-
Redis不内置BloomFilter,需借助Redisson等第三方实现;EXISTS和空值缓存无法有效防穿透,因前者不拦截非法ID、后者易致缓存污染;布隆过滤器以极小空间开销提供高效存在性否定判断。
-
ShedLock通过Redis的SETkeyvalueEXsecondsNX原子命令实现加锁,键为shedlock:{任务名},值为节点标识,TTL由lockAtMostFor控制;重复执行主因是Redis配置不一致、集群未适配、绕过AOP或TTL过短。
-
全量复制触发时,Redis主节点必须生成RDB文件,因为从节点初次连接或断连太久后无法仅靠增量命令追上主节点,主节点需将当前完整数据集打包成RDB文件传给从节点以保证状态一致。
-
彻底禁用RDB自动触发需注释或设为save"",重启或CONFIGREWRITE后CONFIGGETsave返回["save",""],且rdb_changes_since_last_save持续增长即生效。
-
直接引入spring-session-data-redis即可,它自动适配SpringBoot2.7+的Lettuce;避免手动引入jedis、错误配置redis属性、使用默认JDK序列化,需改用GenericJackson2JsonRedisSerializer,并确保Redis高可用与Cookie正确隔离。
-
根本原因是复制积压缓冲区(repl-backlog)持续增长:失联从节点未被及时清理时,主节点仍向共享的环形缓冲区追加命令,导致内存只增不减;repl-diskless-sync仅影响全量同步传输方式,不控制增量缓存,真正关键的是repl-timeout与client-output-buffer-limitslave协同配置以主动断连并释放内存。
-
双重检查是为防缓存击穿:第一次检查过滤命中请求,第二次检查在锁内确认避免重复查库;必须配合空值缓存防穿透、Lua脚本删锁保原子性。
-
GEOPOS查不到数据主因是GEOADD未成功:参数顺序错误(须经度在前)、成员名不一致、或pipeline/事务中未等命令执行完;返回值为二维数组,含字符串型经纬度及null,需显式转换且验证存在性。