-
“永不过期”策略实质是Rediskey物理永存,逻辑过期时间嵌入value中;安全的get_with_logic_expire需用SETNX抢锁、双重检查、异步更新;必须搭配主动刷新机制防脏数据。
-
推荐用base64url编码6字节随机数生成短码,冲突概率低且不可预测;需先EXISTS校验再写入,跳转用Lua脚本原子读URL并INCR计数,Redis用String类型存short:{code}→URL,设EX过期,stat:{code}单独存访问量。
-
Redis“无条件刷新”实为业务代码显式执行SET/SETEX覆盖key,需确保写路径确定、key名准确、实例正确;禁用SETNX,慎用GETSET;批量操作须防pipeline/事务失败导致缓存未更新;穿透雪崩时应加空值缓存与随机TTL而非强行刷新。
-
缓存空值TTL推荐2–5分钟,用SETEX或set(key,"NULL",300,TimeUnit.SECONDS),避免永不过期或24小时;内容用"NULL"等明确标记,前置参数校验更早拦截无效请求。
-
Jedissubscribe()会阻塞线程,必须在独立线程中调用;onMessage()是唯一消息处理入口;连接断开需手动重试;RedisMessageListenerContainer需设phase为Integer.MIN_VALUE以早初始化;Pythonredis-py要判type再取data并解码;频道名推荐小写点分隔,禁用通配符滥用;订阅端须加健康检查与自动恢复。
-
LTRIM是限制RedisList长度的唯一可靠方式,因其原子性、精准截断和内存即时释放特性;必须配合LPUSH使用,错误参数会清空列表,高并发下推荐Lua脚本保障原子性。
-
MAXLEN是RedisStreams唯一实时限长方式,必须与XADD原子配合使用;~N为近似保留,N为严格上限;XTRIM仅作兜底,非实时;语法中MAXLEN须紧随stream名后,错位即报错。
-
推荐用base64url编码6字节随机数生成短码,冲突概率低且不可预测;需先EXISTS校验再写入,跳转用Lua脚本原子读URL并INCR计数,Redis用String类型存short:{code}→URL,设EX过期,stat:{code}单独存访问量。
-
RedisLua脚本无法实现SCAN分页,因脚本无状态且无法维护游标;唯一可行方案是客户端驱动SCAN分页,Lua仅负责单次结果的模式匹配与截取。
-
首要排查项是repl-timeout,默认60秒,主从间REPLCONFACK延迟超时即断连;需主从同时调大该值,如设为120秒,并排查TCP保活、输出缓冲区、系统连接限制及ACK抖动等隐性瓶颈。
-
客观下线(ODOWN)需多个哨兵通过Gossip协议交换信息并达成quorum共识;quorum是sentinel.conf中配置的最小同意数,非哨兵总数,设为1则退化为主观下线;哨兵间通过SENTINELis-master-down-by-addr命令探测,超时未响应将导致无法凑够quorum;Gossip异步、无中心、带超时,不保证强一致,以换取快速故障发现与低带宽开销;验证ODOWN应使用SENTINELmasters检查flags是否含odown,而非仅依赖+sdown日志。
-
新消费者收不到旧消息是因为XGROUPCREATE默认从最新偏移($)开始消费,不自动回溯;需显式指定起始ID0或用XREADGROUPSTREAMSmystream0补读,且必须及时XACK避免重复分配。
-
redis-cli的monitor命令可实时打印所有指令但仅限调试环境,因性能开销大、无过滤能力、输出非结构化,生产环境应禁用;推荐用slowlog(设slowlog-log-slower-than为0)替代。
-
缓存击穿是热点key过期瞬间大量请求直击数据库,微服务中因多实例并发回源使DB压力放大N倍;需用原子SET命令加锁、逻辑过期替代永不过期、服务自治布隆过滤器并强同步更新。
-
RedisGEOHASH命令返回标准Base32编码的Geohash字符串数组,长度1-12位,即使单个成员也返回如["wx4g0b0j0r0"]的数组,需取首项;仅对GEOADD添加的成员有效,未添加则返回[nil]。