Redis面试问题集
Redis基础数据结构
String(字符串)
- 用途:存储文本、数字、二进制数据(如图片),最大支持512MB。常用作缓存、计数器、分布式锁等场景。
Hash(哈希表)
- 用途:存储对象(如用户信息),以键值对形式组织数据。
List(列表)
- 用途:实现队列、栈或消息流(如最新消息列表)。
Set(集合)
- 用途:存储唯一元素,适用于标签系统、共同好友等场景。
ZSet(有序集合)
- 用途:按分值排序的集合,适用于排行榜、延时队列等。
- 特点:
- 通过跳跃表(skiplist)和压缩列表实现,保证元素有序且支持范围查询(
ZRANGE
)。
- 通过跳跃表(skiplist)和压缩列表实现,保证元素有序且支持范围查询(
扩展数据结构
- Bitmap(位图):基于String的位操作,适用于签到统计。
- HyperLogLog:基数统计,如UV统计。
- Geo:地理空间索引,支持位置查询
Redis 数据持久化
Redis中为了保证在系统宕机(类似进程被杀死)情况下,能更快的进行故障恢复,设计了两种数据持久化方案,分别为rdb和aof方式。
RDB(数据备份)
原理:定期生成内存数据的二进制快照(.rdb
文件),恢复时直接加载文件到内存。
触发方式:
- 手动触发:
SAVE
:阻塞主线程生成快照(生产环境禁用)。BGSAVE
:后台子进程生成快照(推荐)。
- 自动触发:通过配置时间间隔和修改次数触发(如
save 60 10000
表示 60 秒内 10000 次修改则触发)。
优点:
- 文件紧凑,恢复速度快;
- 备份效率高,适合大规模数据。
缺点: - 可能丢失最后一次快照后的数据;
- 大数据量时
fork
子进程可能短暂阻塞服务。
AOF(追加文件)
原理:记录每个写操作命令(文本格式),重启时重放命令恢复数据。这个机制默认是关闭的
配置关键项:
appendonly yes
:启用 AOF;appendfsync
:写盘策略(always
/everysec
/no
),平衡安全性与性能。
优点:
- 数据安全性高(最多丢失 1 秒数据);
- 支持实时记录,故障恢复更精确。
缺点: - 文件体积较大;
- 恢复速度慢于 RDB;
- 频繁写入可能影响性能。
优化:
- AOF 重写:压缩冗余命令(
BGREWRITEAOF
),减少文件大小。
混合持久化(Redis 4.0+)
原理:结合 RDB 和 AOF,生成 RDB 快照 + 增量 AOF 日志
的混合文件(.aof
格式)。
配置:
aof-use-rdb-preamble yes
优点:
- 恢复速度快(优先加载 RDB 快照);
- 数据安全性接近 AOF。
缺点: - 兼容性要求 Redis 4.0 以上版本