-
Redis集群默认不支持读写分离,所有请求均被重定向至主节点,从节点仅用于故障转移;如需读写分离,须弃用集群客户端,改用普通主从客户端自行路由。
-
能,从库可记录慢查询日志但需在redis.conf中显式配置slowlog-log-slower-than和slowlog-max-len,主库配置不自动同步,且慢日志为实例级本地行为。
-
能,但需满足版本一致、关闭AOF、RDB文件路径和名称匹配、权限正确等硬性条件,否则启动报错或数据不一致。
-
推荐用base64url编码6字节随机数生成短码,冲突概率低且不可预测;需先EXISTS校验再写入,跳转用Lua脚本原子读URL并INCR计数,Redis用String类型存short:{code}→URL,设EX过期,stat:{code}单独存访问量。
-
RedisLua脚本无法实现SCAN分页,因脚本无状态且无法维护游标;唯一可行方案是客户端驱动SCAN分页,Lua仅负责单次结果的模式匹配与截取。
-
down-after-milliseconds不是触发故障转移的开关,仅决定哨兵何时标记主节点为主观下线(SDOWN);完成自动切换需满足quorum票数达成客观下线(ODOWN),再经选举和failover-timeout窗口内执行完整流程。
-
首要排查项是repl-timeout,默认60秒,主从间REPLCONFACK延迟超时即断连;需主从同时调大该值,如设为120秒,并排查TCP保活、输出缓冲区、系统连接限制及ACK抖动等隐性瓶颈。
-
<p>Redis7.2优化内存淘汰池,将evictionPoolEntry.key由sds改为非持有型char*指针,避免memcpy和重复内存分配,显著降低高采样数下的CPU开销,不改变淘汰逻辑。</p>
-
不能直接用@Primary切换Redis数据源,因其仅指定启动时默认Bean,无法运行时动态路由;需用ThreadLocal持有当前线程的ConnectionFactory,并配合AOP在方法级按需绑定与清理。
-
客观下线(ODOWN)需多个哨兵通过Gossip协议交换信息并达成quorum共识;quorum是sentinel.conf中配置的最小同意数,非哨兵总数,设为1则退化为主观下线;哨兵间通过SENTINELis-master-down-by-addr命令探测,超时未响应将导致无法凑够quorum;Gossip异步、无中心、带超时,不保证强一致,以换取快速故障发现与低带宽开销;验证ODOWN应使用SENTINELmasters检查flags是否含odown,而非仅依赖+sdown日志。
-
SpringBoot默认不开启Redis读写分离,纯主从模式下即使配置read-from也无效;必须使用哨兵/集群模式或自定义MasterReplica.connect(),并配合LettuceClientConfigurationBuilderCustomizer注入ReadFrom.REPLICA_PREFERRED才能生效。
-
新消费者收不到旧消息是因为XGROUPCREATE默认从最新偏移($)开始消费,不自动回溯;需显式指定起始ID0或用XREADGROUPSTREAMSmystream0补读,且必须及时XACK避免重复分配。
-
分片后每个Redis节点必须独立配置持久化,RDB需统一save规则且隔离磁盘路径,AOF应全节点开启并设appendfsynceverysec,避免部分节点未持久化导致数据丢失。
-
缓存空值、布隆过滤器和业务层校验是防御缓存穿透的三层策略:空值需设短过期并避免null值;布隆过滤器须预估容量、全局单例且配合写库更新;业务层应优先校验参数合法性。
-
调小down-after-milliseconds并非提速关键,它仅控制单哨兵标记SDOWN的阈值;真正影响故障转移速度的是探测间隔、quorum共识、hello广播周期及failover-timeout与从节点同步能力的协同匹配。