1. Redis核心特性解析
Redis作为当下最流行的内存数据库之一,其设计哲学与特性决定了它在技术栈中的独特地位。我从业十年间见证过太多候选人因为对基础特性理解不充分而在面试中折戟,这里先拆解几个最容易被追问的特性细节。
1.1 单线程架构的真相
很多人背八股文时都会说"Redis是单线程模型",但实际上面试官更想听到的是你对IO多路复用的理解。Redis 6.0之前确实是单线程处理命令,但这个线程专门指代"命令执行线程"。真正的网络IO在Linux系统上通过epoll实现多路复用,这就是为什么单线程还能支持10W+ QPS的关键。
注意:在解释单线程优势时,一定要提到避免锁竞争和上下文切换开销,但也要说明6.0之后引入的多线程IO特性(注意区分IO线程和工作线程)
1.2 持久化机制的取舍
RDB和AOF的对比是必问题,但高手会这样回答:
- RDB的fork操作在云环境可能触发OOM(实测16G实例保存10G数据时,fork瞬间内存翻倍)
- AOF重写时的bgrewriteaof与主进程竞争磁盘IO(建议SSD环境使用)
- 混合持久化(Redis 4.0+)的实践配置:aof-use-rdb-preamble yes
我在生产环境见过最典型的错误配置是同时开启appendfsync always和save 900 1,导致性能雪崩。正确的做法是根据业务容忍度选择appendfsync everysec,并在低峰期主动执行bgsave。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据结构与使用场景
2.1 五种基础类型的深层理解
字符串(string)类型面试常问的陷阱题:
bash复制SET key 100
INCR key
GET key # 返回101,但很多人不知道这实际是整数编码
STRLEN key # 返回3,因为存储的是字符"101"
列表(list)在消息队列场景的应用要特别注意:
- LPUSH+BRPOP实现阻塞队列时,记得设置合理的timeout
- 当列表元素超过512个且单个元素小于64字节时,编码会从ziplist转为linkedlist(可通过list-max-ziplist-entries调整)
2.2 高级数据结构实战
HyperLogLog的误差率1.04
