ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Redis常见面试题整理(上)

Redis常见面试题整理(上) 1.Redis 8 大数据结构关键词String、Hash、List、Set、ZSet、Stream、Bitmap、HyperLogLog、GeospatialRedis 常用 8 种数据结构。 String 用来存字符串、计数器、分布式锁 Hash 适合存储对象field-value 结构 List 可以做简单消息队列、最新列表 Set 可以做数据去重求交集并集 ZSet 有序集合用来做排行榜、延迟任务 Stream 是消息队列支持消费者回滚 剩下 Bitmap 位图、HyperLogLog 基数统计、Geospatial 地理位置。2.Redis 内存淘汰策略关键词maxmemory、noeviction、volatile 系列、allkeys 系列、LRU、LFU、TTL内存淘汰是 Redis 配置maxmemory内存达到上限还要写入更多数据的时候触发。 一共 6 种策略分为两大类 第一类 volatile只针对设置过期时间的 keyvolatile-lru 最近最少使用volatile-lfu 最不常用volatile-ttl 删剩余时间最短volatile-random 随机删除过期 key。 第二类 allkeys所有 key 都可以删不管有没有过期allkeys-lru、allkeys-lfu、allkeys-random。 还有 noeviction默认策略内存满了不淘汰任何数据直接报错适合不允许丢数据场景。⚠️重点区分内存淘汰是内存满了才删过期策略是清理已经到期的 key两个机制独立3.Redis 过期策略【高频面试题】关键词惰性删除、定期删除、抽样、平衡 CPU 内存Redis 过期 key 不是时间一到立刻删除采用惰性删除 定期删除组合策略。惰性删除只有访问 key 的时候才检查是否过期过期就直接删除返回空。缺点如果过期 key 一直没人访问会一直占用内存造成内存泄漏。定期删除后台线程每隔 100ms随机抽样 20 个带过期的 key删掉过期的抽样过期 key 占比超过 25%就缩短间隔快速再扫描一轮。因为是抽样不是全量遍历不会消耗大量 CPU。缺点是只抽样内存里还会残留过期 key。设计目的平衡 CPU 开销和内存占用。4.Redis 持久化关键词RDB 快照、AOF 追加日志、混合持久化Redis 是内存数据库数据存在内存宕机会丢失数据持久化就是把内存数据落盘。RDB 是快照在某个时间点把内存全部数据保存到磁盘。优点文件紧凑故障恢复速度快缺点两次快照中间新增的数据会丢失。AOF 是追加日志记录每一条写命令。优点数据完整性高可以通过刷盘策略控制丢失数据范围缺点日志文件体积大故障恢复比 RDB 慢。生产推荐RDBAOF 混合持久化。5. 缓存三大问题【面试重中之重】缓存穿透关键词查询不存在数据绕过缓存、布隆过滤器、缓存空值、参数校验、限流缓存穿透查询数据库不存在的数据缓存里没有请求直接打到数据库。解决方案布隆过滤器预加载全部合法 key不存在直接拦截入口参数校验拦截非法请求缓存空值给空结果设置短 TTL对 IP 或者 key 做请求限流防止恶意爆破。缓存击穿关键词热点 key 过期并发打 DB、互斥锁、逻辑过期、热点预热缓存击穿热点 key 在高并发请求下失效大量请求同一时刻发现缓存失效同时回源访问数据库。核心思路是保护热点 key不要大量请求同时访问数据库。方案互斥锁、逻辑过期、热点 key 提前预热。缓存雪崩逻辑过期、热点 key 提前预热。关键词大量 key 同时失效 / Redis 宕机压垮数据库、随机 TTL、高可用、多级缓存、熔断限流缓存雪崩大量 key 同时过期或者 Redis 集群整体不可用大量请求打到数据库压垮数据库。方案过期时间增加随机偏移量避免集中过期搭建主从、哨兵、集群保证 Redis 高可用多级缓存本地缓存 Redis 数据库分层熔断降级当缓存异常限制回源流量保护数据库。
返回列表