Skip to content

Redis★

定位、为什么快、典型应用场景、与 Memcached 的对比。

Updated View as Markdown
For humans

Redis

Redis 是内存键值数据库,官方定位是“数据结构服务器”。面试主线的起点是三个问题:它解决什么、为什么快、用在哪儿。

定位

  • 数据全放内存,读写都是内存操作,单机轻松支撑十万级 QPS
  • 提供丰富的数据结构(string/hash/list/set/zset 加 Stream 等),不只是 get/set
  • 有持久化(RDB/AOF),但定位仍是缓存与辅助存储,不是主存储
  • 单机内存有限,容量扩展靠 Cluster 分片

为什么快

因素 说明
纯内存操作 数据在内存,无磁盘 IO
单线程执行命令 无锁竞争、无上下文切换、无死锁问题
IO 多路复用 单线程用 epoll 同时管理大量连接
高效数据结构 SDS、跳表、压缩表,按场景定制
批量与管道 减少网络往返(RTT)

面试加分细节:Redis 单线程是指命令执行单线程,网络 IO 在 6.0 后可以多线程(见线程模型篇)。单线程快的前提是命令都是微秒级内存操作,所以慢命令(KEYS、大 key 操作)会阻塞整个实例。

典型应用场景

场景 用的能力
缓存 热点数据,配合缓存一致性方案
会话存储 string/hash 存 session
排行榜 zset 按分数排序
分布式锁 SETNX + Lua,见分布式锁篇
限流 INCR + 过期,见高级应用篇
消息队列 Stream、List 的轻量方案
计数与 UV INCR、HyperLogLog、位图
附近的人 GEO

与 Memcached 的对比

维度 Redis Memcached
数据类型 丰富结构 只有 string
持久化 RDB/AOF
主从/集群 完整高可用方案 不支持(靠客户端分片)
线程模型 单线程命令执行 多线程
典型地位 事实标准 已边缘化

面试追问

  1. Redis 为什么快? 内存操作加单线程免竞争加 IO 多路复用。单线程的前提是命令微秒级,慢命令是事故源头
  2. 单线程怎么处理并发连接? IO 多路复用,一个线程监听大量 socket,事件就绪才处理
  3. Redis 是数据库吗? 有持久化但定位是缓存与辅助存储。数据可靠性弱于关系库,重启或宕机会丢数据
  4. 什么场景不该用 Redis? 数据必须持久且事务复杂、超过内存容量的数据、需要 SQL 查询的场景
  5. Memcached 为什么被淘汰? 只有 string、无持久化、无高可用方案。Redis 覆盖面完全超过它
Navigation

Type to search…

↑↓ navigate↵ selectEsc close