Redis有哪些数据类型和过期策略?程序员面试高频考点解析
作为后端开发者,Redis的数据类型和过期策略是面试必考题。最近在准备面试时,我整理了这份超实用的知识点总结,分享给同样在备战的小伙伴们。2025年Java面试宝典已整理好,需要的自取: 点击获取面试资料(提取码:9b3g)
🔍 Redis核心数据类型详解
当面试官问"Redis有哪些数据类型"时,千万别只说String/List/Set!完整回答应该是这5类:
-
String(字符串)
最基础的数据类型,能存文本、数字甚至二进制数据。比如做计数器(INCR命令)或缓存HTML片段都靠它。最大能存512MB,但实际开发中建议控制单Value大小。 -
Hash(哈希表)

特别适合存储对象结构。比如用户信息:HSET user:1001 name "张三" age 28。相比String存JSON,Hash支持字段级操作更省内存。 -
List(列表)
双向链表结构,常用来做消息队列(LPUSH/RPOP)或最新消息排行(LTRIM)。注意:元素重复且有序,但随机访问性能较差。 -
Set(集合)
自动去重的无序集合,求交集/并集非常高效(SINTER/SUNION)。典型场景:共同好友、标签系统。 -
ZSet(有序集合)

带权重的Set,每个元素关联一个score用于排序。排行榜功能(ZRANGE)、延迟队列(用时间戳作score)都靠它实现。
💡 面试加分点:补充说明Bitmaps/HyperLogLog等扩展类型,并举例使用场景
⏳ Redis过期策略深度剖析
当被问到"Redis的过期策略",要分两个层面回答:
▶ 过期键删除策略
-
惰性删除(Lazy Expire)
访问Key时才检查是否过期。优点是不占额外CPU,缺点是可能堆积大量过期Key -
定期删除(Active Expire)
Redis每秒执行10次(默认)的过期扫描:- 随机选取20个Key
- 删除其中已过期的
- 若过期比例超25%,重复该过程

Redis内存淘汰机制示意图
▶ 内存淘汰策略(8种)
当内存不足时,Redis会根据maxmemory-policy处理:
- volatile-lru:从已设置过期时间的Key中淘汰最近最少使用的
- allkeys-lru:全体Key中淘汰最近最少使用的(最常用)
- volatile-ttl:优先淘汰剩余生存时间短的Key
- noeviction:不淘汰,直接报错(生产环境慎用)
📌 实战建议:生产环境推荐allkeys-lru + 设置maxmemory。通过
INFO memory监控内存碎片率(mem_fragmentation_ratio)
💡 面试场景模拟
面试官:"如果线上Redis突然内存暴涨,如何快速定位?"
我:"分四步走:
redis-cli --bigkeys找大Keyinfo memory看碎片率- 检查是否未设置过期策略
- 用
slowlog get分析是否有异常操作"
面试官:"如何保证热点数据不过期?"
我:"两种方案:
- 对极热点数据不设过期时间,通过程序逻辑更新
- 采用延迟过期策略:在value里存过期时间,读取时发现快过期则异步更新"
需要面试资源的小伙伴注意啦! 通过面试鸭返利网购买面试鸭会员可返利25元,用更低的成本获取全栈面试题库和真题解析,点击直达 >> 面试鸭返利网
掌握Redis数据类型和过期策略,面试时遇到这类问题就能从容应对。建议结合具体业务场景说明选择依据,比如"在电商项目中用ZSet实现秒杀排行榜"这类实战案例会让回答更有说服力!


