Redis 的 APPEND 和 GETRANGE 能实现什么字符串操作,有什么实际用途?
围绕“Redis 的 APPEND 和 GETRANGE 能实现什么字符串操作,有什么实际用途”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明追加与按区间读取的能力及日志式追加场景。
Redis · 缓存面试题第 1 页,显示第 1–50 题,共找到 55 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
围绕“Redis 的 APPEND 和 GETRANGE 能实现什么字符串操作,有什么实际用途”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明追加与按区间读取的能力及日志式追加场景。
围绕“给 Redis Key 设了过期时间,为什么到期后立刻 GET 偶尔还能拿到或内存没立刻降”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明惰性删除与定期删除导致删除时机不保证精确。
围绕“Redis 对已设过期时间的 Key 再次 SET 或 EXPIRE,过期时间会怎么处理”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 SET 覆盖会清除原 TTL 而再次 EXPIRE 是替换式刷新。
围绕“Redis 的 EXPIRE 和 EXPIREAT 分别适合什么过期语义场景”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分相对存活时长与绝对时间点,例如会话续期与整点失效。
围绕“Redis 的 GETSET 命令适合什么场景,和先 GET 再 SET 有什么区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 GETSET 原子返回旧值并写入新值、避免竞态。
围绕“Redis 哈希能只给某个字段设过期时间吗,需要什么版本或替代方案”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 Redis 7.4 前只能整 Key 过期、7.4 起有 HEXPIRE,或改用多个字符串 Key。
围绕“Redis 哈希底层什么情况下用 listpack,什么时候转成 hashtable”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出字段数与单字段长度阈值触发转换且转换不可逆。
围绕“Redis 哈希字段数到几十万后,HGETALL 和单字段操作的开销有什么变化”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明编码转换后单字段仍 O(1) 但 HGETALL 是 O(N) 阻塞风险,应改 HSCAN。
围绕“大量小对象用 Redis 哈希聚合存比每个对象一个字符串 Key 省内存吗,为什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释小哈希走紧凑编码省去每 Key 元数据开销。
围绕“Redis 的 HINCRBY 和 HINCRBYFLOAT 在哈希字段上做计数各有什么边界”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 HINCRBY 限 64 位整数、浮点版有精度限制。
围绕“只需要 Redis 哈希中几个字段时,为什么优先 HMGET 而不是 HGETALL”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明按字段取回减少传输量且大哈希下 HGETALL 有阻塞风险。
围绕“Redis 的 HSETNX 和 HSET 在字段已存在时行为有何不同,各适合什么场景”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分 HSET 覆盖与 HSETNX 仅初始化,用于初始化默认值防覆盖。
围绕“Redis 用 GET 再 SET 实现计数器为什么不可靠,INCR 解决了什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明读改写两步在并发下丢失更新、INCR 服务端原子完成。
围绕“Redis 的 INCR 达到 64 位有符号整数上限后继续自增会怎样”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确会报错且值不变、只能用于有符号 64 位范围。
围绕“Redis 的 INCRBYFLOAT 为什么不适合需要精确小数的金额计算”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明底层按 long double 处理且存在浮点精度风险,金额应改用整数分表示。
围绕“Redis 删除过期 Key 的惰性删除和定期删除分别怎么工作,为什么两者都要”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明访问时检查与后台周期采样互补、平衡 CPU 与内存。
围绕“Redis 内存到达 maxmemory 后会发生什么,没有淘汰策略时写操作会怎样”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明触发淘汰策略、noeviction 下写命令报错。
围绕“批量读写一批 Redis Key 时,MSET/MGET 相比循环 SET/GET 省掉了什么开销”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确减少网络往返次数是主要收益且 MSET 原子。
围绕“Redis 集合为什么天然适合做去重和标签存储”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明成员唯一性与 SADD 幂等带来的去重语义。
围绕“Redis 集合的 intset 和 listpack 编码分别在什么条件下使用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确纯整数小集合用 intset、小集合用 listpack、超阈值转 hashtable。
围绕“Redis 的 SET key value NX EX 一条命令为什么比 SETNX 加 EXPIRE 更适合加锁”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释两条命令之间存在窗口期导致死锁,而单命令原子执行消除该窗口。
围绕“只用 SETNX 加 DEL 实现 Redis 分布式锁会有哪些缺陷”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须指出锁无法续期、误删他人锁、无重入等问题。
围绕“Redis 对短字符串用 SETRANGE 写入很大的偏移位置会发生什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确中间空洞以零字节填充且会撑大 Value、警惕 bigkey。
围绕“Redis 的 SINTER、SUNION、SDIFF 分别能解决什么业务问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须对应共同好友、全量标签合并、差集筛选三类场景。
围绕“在线上 Redis 直接跑大集合的 SINTERSTORE 有什么风险,如何规避”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 O(N) 运算阻塞主线程,应限制集合规模或用从库/离线计算。
围绕“判断某用户是否在 Redis 集合中,为什么用 SISMEMBER 而不是取回 SMEMBERS 再查”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 SISMEMBER 服务端 O(1) 而 SMEMBERS 全量传输 O(N)。
围绕“Redis 的 SMOVE 命令适合什么场景,它是原子的吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明源集合删除与目标集合添加一步完成且原子,适合任务状态流转。
围绕“Redis 的 SPOP 和 SRANDMEMBER 都返回随机成员,核心区别和各自用途是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 SPOP 删除元素而 SRANDMEMBER 不删,分别对应消费式抽奖与展示式抽样。
围绕“Redis 的 SRANDMEMBER 传正数和负数 count 时返回结果有什么区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明正数不重复返回、负数允许重复且可超过集合大小。
围绕“Redis 字符串为什么能安全存储二进制数据且取长度是 O(1)”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释 SDS 用 len 字段而非 \0 结尾判断长度的设计。
围绕“Redis 单个字符串 Value 最大能存多大,超大 Value 会带来哪些问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出 512MB 上限并说明大 Value 对网络传输、阻塞和内存分配的影响。
围绕“Redis SDS 追加内容时的空间预分配和惰性释放是怎么工作的”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须说清预分配减少 realloc 次数及惰性释放避免缩短时立即收缩。
围绕“Redis 存一个对象时,JSON 字符串和哈希各自适合什么场景”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答要按是否需要字段级读写、TTL 粒度和内存开销做出选型判断。
围绕“Redis 的 TTL 命令返回 -1 和 -2 分别代表什么,排查时怎么区分”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 -1 无过期时间、-2 Key 不存在,避免误判为即将过期。
围绕“Redis 的 ZINCRBY 在排行榜中更新分数为什么是原子的,负数能用吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明服务端原子加减且支持负数实现扣分、成员不存在时自动创建。
围绕“消费 Redis 有序集合队头任务时,ZPOPMIN 相比 ZRANGE 加 ZREM 好在哪”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明单命令原子取并删避免消费者竞争。
围绕“Redis 按分数区间查询时,ZRANGEBYSCORE 的开闭区间和正负无穷怎么写”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须讲清括号表示开区间、-inf/+inf 及 min max 顺序。
围绕“Redis 排行榜分页取前 N 名用什么命令,为什么要带 WITHSCORES”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明用 ZRANGE/ZREVRANGE 按排名区间取并连同分数返回避免二次查询。
围绕“用 Redis 有序集合实现延迟队列的基本原理是什么,消费者怎么取到期任务”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明以执行时间戳为 score、ZRANGEBYSCORE 取到期任务加 ZREM 抢占。
围绕“Redis 有序集合为什么同时用哈希表和跳表两种结构”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明哈希支撑按成员 O(1) 查分数、跳表支撑排序与范围。
围绕“用 Redis 有序集合实现积分排行榜,如何处理同分数的排名顺序”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明同分时按成员字典序排列及可用分数拼接时间戳等设计修正。
围绕“Redis 有序集合为什么用跳表而不是平衡树来实现排序”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确实现简单、范围查询高效、并发友好等原因。
围绕“用 Redis 有序集合实现滑动窗口限流的思路是什么,如何避免重复计数”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明以时间戳为成员/score、ZREMRANGEBYSCORE 清旧窗口再计数。
围绕“Redis 有序集合相比普通集合多出的 score 带来了哪些能力”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明按分数排序、范围查询和排名三类能力由跳表加哈希支撑。
围绕“Redis 的 ZUNIONSTORE 如何实现多个榜单的加权汇总,有什么性能注意点”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 WEIGHTS 与 AGGREGATE 语义及大集合聚合阻塞风险。
围绕“Cache Aside(旁路缓存)模式的读写流程是什么,为什么是更新数据库后删缓存而不是先删缓存再更新”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出读 miss 回填、写时先写库再失效缓存的标准流程,以及先删缓存会被并发读回填旧值的问题。
围绕“Redis 缓存雪崩的两种成因是什么,过期时间加随机抖动和多级缓存分别对应哪种”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分大量 key 同时过期与 Redis 实例宕机两种成因,并分别对应随机 TTL 和高可用/多级缓存/降级。
围绕“Redis 缓存击穿(单个热点键过期被并发重建)有哪些防护手段,互斥锁与逻辑过期怎么选”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出热点键失效瞬间大量请求同时回源的现象,互斥重建保证一致性但阻塞、逻辑过期返回旧值异步刷新保证可用性的取舍。
围绕“缓存与数据库双写不一致时,延迟双删和订阅 binlog 失效缓存各自解决什么问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出延迟双删针对读写并发窗口的旧值回填、binlog 订阅把失效逻辑与业务解耦,不承诺强一致、不展开分布式事务。
围绕“Redis 缓存穿透如何发生,缓存空值和布隆过滤器两种方案各自适合什么场景”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出查询不存在数据导致每次都打到数据库的机制,以及短 TTL 空值适合重复单 key、布隆过滤器适合海量不重复 key 的取舍。