← 每日面试题 学习看板

Redis的Key和Value的设计原则有哪些?

面试题/03数据库中间件/02Redis/04内存管理与淘汰策略/Redis的Key和Value的设计原则有哪些?.md

https://chat.deepseek.com/share/9d8i6ne1absxc61yfi


面试记录 2026-10-15

题目:Redis的Key和Value的设计原则有哪些?

难度:medium

评分:⭐⭐⭐⭐☆☆(3/5)

我的回答

Redis 中 key 和 value 都需要一定选择,比如 key 的设计需要考虑到业务识别性,一般我设计 key 的时候,会考虑 key 所在的服务,key 对应的业务表,key 所对应的业务名,一层层去明确一个key 的所述,方便快速定位 key,比如 用户服务的用户信息缓存,单个用户就是 user:userTable:info:{id},如果总列表就是 user:userTable:list:all; value 方面主要是选择合适的类型,以及选择合适的序列化方式,比如 list 数据就可以放到 redis 的 list 中,而不是直接用 str 去存储,对象信息安字段存储到 hashMap 中,而不是整个存储成 str

点评

优点:

Key 分层命名规范抓到- 举例 user:userTable:info:{id} 具体- Value 类型选择思路对

不足:

❌ 遗漏 key 长度控制(<128 字节)- ❌ 遗漏避免通配符(* ? 避免 SCAN/KEYS 慢查询)- ❌ 遗漏大 key 限制(<10KB 为佳,<100MB 绝对禁止)- ❌ 遗漏 value 大小控制(字符串 <1MB,集合 <5000 元素)- ❌ 遗漏过期时间设置原则(热点短、冷长)- ❌ 遗漏避免特殊字符(空格、换行)

完整讲解

第一部分:知识重点剖析

核心考点:考察 Redis 工程化设计能力,能否从业务语义、性能、可维护性三个维度设计 key/value。

知识点拆解:

  1. Key 设计原则:
  1. Value 设计原则:
  1. 过期时间原则:
  1. 性能优化:

常见错误:

第二部分:考察方向与延伸递进

  1. 如何发现大 key?
  1. Hash 和 String 存对象怎么选?
  1. 过期时间如何避免雪崩?

第三部分:面试者参考回答(300-600 字口语化)

面试官您好,Key 和 Value 设计是 Redis 工程化的核心,我从业务语义、性能、可维护性三个维度说。

Key 设计:业务语义分层,如 user:profile:info:{id},服务:业务表:业务名:{ID}。长度控制在 128 字节内,避免过长浪费内存和带宽。避免通配符(* ?),避免 SCAN/KEYS 慢查询。避免特殊字符(空格、换行),冒号用于分层。统一小写,Key 区分大小写。

Value 设计:类型按业务选择,list/hash/zset/set/string。序列化 JSON 可读性好,Protobuf 性能好。大小控制:字符串 <1MB,集合 <5000 元素,单 key >10KB 拆分,>100MB 绝对禁止。

过期时间:热点数据短(分钟级)、冷数据长(天级),过期时间加随机偏移避免雪崩。不缓存则不设过期。

性能优化:避免 KEYS 命令(O(N) 阻塞),用 SCAN。避免大 key 操作(HGETALL 大 hash、LRANGE 大 list)。批量操作用 Pipeline 减少 RTT。

常见错误:用 DB 表名做 key(无业务语义)、单 key 存百万元素(大 key)、key 含空格(解析问题)、不设过期时间(缓存雪崩)。

发现大 key 用 redis-cli --bigkeys 扫描,或 INFO memory 看 used_memory。Hash 和 String 存对象:字段多、需单字段访问用 Hash;字段少、整体读写用 String+序列化。