一文吃透 Redis 核心知识点|零基础入门到面试必备(含完整实操示例)

35 阅读8分钟

Redis 是后端开发必备、必考、高频商用的核心中间件。很多开发者仅掌握基础的 set/get 操作,对底层原理、数据结构、持久化机制、缓存经典问题等核心知识掌握不扎实。

本文整合Redis 核心原理 + 实操命令 + 业务场景 + 面试考点,内容精炼无废话,适合开发复盘、面试突击、技术博客沉淀,新手也能轻松看懂。

适合人群:Java 后端开发者、Redis 初学者、面试备考、日常开发复盘

运行环境:Redis 6.2+(语法通用,全版本兼容)

一、Redis 是什么?核心优势(面试必问)

Redis(Remote Dictionary Server)是 C 语言开发的开源高性能内存键值数据库,也被称作「数据结构服务器」。

区别于普通缓存,Redis 支持丰富的数据结构,可落地热点缓存、计数器、分布式锁、限流、简易消息队列、会话存储、排行榜等多种业务场景。

Redis 五大核心特点

  1. 纯内存读写:核心操作基于内存执行,读写性能极强,单机 QPS 可达 10w+

  2. 单线程模型:核心读写逻辑单线程执行,无线程竞争、无锁开销,规避多线程并发问题

  3. 数据类型丰富:支持 5 大基础类型 + Geo、Bitmap、Stream 等特殊类型,适配各类业务数据存储

  4. 命令天然原子:单条 Redis 命令执行过程不可中断,无需手动加锁即可保证并发安全

  5. 支持数据持久化:提供 RDB、AOF 两种持久化方案,解决内存数据断电丢失问题


二、Redis 五大基础数据类型(详解 + 命令示例 + 业务场景)

1. String 字符串(最常用)

核心特点:Redis 最基础的数据类型,Key-Value 结构,Value 最大支持 512MB,可存储字符串、数字、JSON 等格式数据。

适用场景:热点数据缓存、接口限流、计数器、分布式锁、用户 Session 存储

实操命令

# 新增/修改数据
set username zhangsan
set age 18

# 查询数据
get username

# 设置带过期时间的键(秒级)
set token abc123 ex 300

# 原子递增(计数器、限流核心用法)
incr age
incrby age 10

# 删除键
del username

2. Hash 哈希(对象存储神器)

核心特点:一个 Key 对应多个 Field-Value 键值对,专为结构化对象设计,无需序列化 JSON,支持单独修改单个字段,开销更低。

适用场景:用户信息缓存、购物车数据、商品结构化信息存储

实操命令

# 单个字段赋值
hset user:1001 name lisi
hset user:1001 age 20

# 批量字段赋值
hmset user:1002 name wangwu age 22

# 查询单个字段/全部字段
hget user:1001 name
hgetall user:1001

# 字段数值自增
hincrby user:1001 age 1

# 删除指定字段
hdel user:1001 age

3. List 列表(有序可重复)

核心特点:基于双向链表实现,元素有序、可重复,头尾读写效率极高,支持阻塞式弹出。

适用场景:简易消息队列、用户浏览记录、时间线排序、排队任务列表

实操命令

# 左侧、右侧插入元素
lpush list1 a b c
rpush list1 d e

# 范围查询(0 -1 代表查询全部元素)
lrange list1 0 -1

# 头部、尾部弹出元素
lpop list1
rpop list1

# 阻塞弹出(无数据则等待指定秒数)
brpop list1 10

4. Set 集合(无序去重)

核心特点:元素无序、自动去重,支持交集、并集、差集等集合运算。

适用场景:点赞记录、关注粉丝、数据去重、共同好友统计、活动抽奖

实操命令

# 添加元素(自动去重)
sadd user:like:1001 1002 1003 1002

# 查询集合所有元素
smembers user:like:1001

# 判断元素是否存在
sismember user:like:1001 1002

# 求两个集合交集(统计共同好友)
sinter follow:A follow:B

5. ZSet 有序集合(排序神器)

核心特点:唯一可排序的数据结构,元素自动去重,通过自定义 score 分数实现精准排序。

适用场景:各类排行榜、积分排名、权重排序、简易延时任务

实操命令

# 添加元素(key score value)
zadd rank 90 user1
zadd rank 95 user2
zadd rank 88 user3

# 按分数升序查询
zrange rank 0 -1

# 按分数降序查询(排行榜核心用法,展示分数)
zrevrange rank 0 -1 withscores

三、Redis 过期机制(必懂)

Redis 支持为所有 Key 设置过期时间,到期自动失效删除,是缓存失效、限时业务的核心实现原理。

1、过期时间设置方式

# 秒级过期
set key val ex 60
# 毫秒级过期
set key val px 60000
# 为已存在的键续期/设置过期
expire key 60

2、过期删除策略(面试高频)

  • 惰性删除:仅当访问 Key 时校验是否过期,节省 CPU 资源,缺点是过期键会临时占用内存

  • 定期删除:后台定时随机抽取部分 Key 清理过期数据,平衡性能与内存占用

Redis 不会全局扫描清理过期键,避免大批量操作阻塞主线程,保证服务高性能运行。


四、Redis 内存淘汰策略(面试必考 8 种)

当 Redis 内存占用达到上限时,会触发内置的内存淘汰策略自动清理数据,释放内存,默认策略为 volatile-lru

八大淘汰策略速记(面试必背)

  1. volatile-lru(默认):从带过期时间的键中,淘汰最近最少使用的数据

  2. allkeys-lru:从所有键中,淘汰最近最少使用的数据

  3. volatile-lfu:从带过期时间的键中,淘汰使用频率最低的数据

  4. allkeys-lfu:从所有键中,淘汰使用频率最低的数据

  5. volatile-random:从带过期时间的键中,随机淘汰数据

  6. allkeys-random:从所有键中,随机淘汰数据

  7. volatile-ttl:从带过期时间的键中,优先淘汰即将过期的数据

  8. noeviction:不淘汰任何数据,内存满后直接报错(极少使用)


五、Redis 两大持久化机制(RDB + AOF)

Redis 数据存储在内存中,断电、重启会导致数据丢失,持久化机制的核心作用就是将内存数据落地到磁盘,保证数据持久不丢失。

1. RDB(快照)

周期性生成内存数据全量快照,保存为\.rdb 文件,重启服务可通过快照恢复数据。

优点:文件体积小、重启恢复速度快、对服务性能影响小

缺点:两次快照间隔内的增量数据会丢失,数据一致性一般

2. AOF(日志追加)

持续记录所有写操作命令,追加到 \.aof 日志文件,服务重启后重放日志命令即可恢复全部数据。

优点:数据安全性极高,最多丢失 1 秒增量数据

缺点:日志文件体积大,服务重启数据恢复速度慢

生产最佳方案

生产最优方案:RDB + AOF 双持久化开启,兼顾数据安全性与恢复效率。


六、Redis 三大缓存问题(击穿、穿透、雪崩)

缓存穿透、缓存击穿、缓存雪崩是后端开发、面试核心重难点,三者场景、解决方案完全不同,精准区分如下:

1. 缓存穿透

场景:客户端查询数据库不存在的数据,缓存无对应数据,所有请求直接穿透到数据库,压垮库压力。

解决方案:接口参数校验、缓存空值/过期短时间、布隆过滤器过滤无效 Key

2. 缓存击穿

场景:某热点 Key 缓存过期瞬间,海量并发请求直接打到数据库,瞬间击穿缓存。

解决方案:热点 Key 永不过期、加本地/分布式互斥锁、后台定时主动续期

3. 缓存雪崩

场景:大批量 Key 同时过期,或 Redis 集群宕机,缓存整体失效,海量流量全部压入数据库。

解决****方案:过期时间加随机值打散失效时间、搭建 Redis 高可用集群、接口熔断降级、多级缓存架构


七、Redis 分布式锁(生产必备)

分布式集群场景下,单机锁失效,Redis 分布式锁是解决分布式并发竞争的主流方案。

生产级原子加锁命令(核心)

# NX:不存在才创建(加锁成功) EX:秒级自动过期
set lock:order 1 nx ex 30

NX:保证加锁互斥性,仅无锁时可加锁成功

EX:设置自动过期时间,避免服务宕机导致死锁

避坑重点:禁止使用 setnx + expire 分两条命令加锁,非原子操作会引发死锁问题!


八、总结(学习&面试速记)

1、Redis 高性能核心:内存读写 + 单线程无锁竞争 + IO 多路复用

2、五大数据类型分工:String 通用缓存、Hash 存对象、List 做队列、Set 去重统计、ZSet 实现排序

3、数据安全保障:RDB+AOF 双持久化机制,兼顾性能与数据安全

4、缓存核心问题:吃透穿透、击穿、雪崩三大场景的问题根源与解决方案

5、分布式锁规范:必须使用 SET NX EX 原子命令 实现,杜绝死锁风险


个人随笔

本文全覆盖 Redis 基础、实操、原理、面试考点,内容精炼实用,适配日常开发查阅和面试突击。坚持沉淀技术博客,积累专属技术资产,助力技术进阶!

如有知识点疏漏或错误,欢迎大家评论指正交流!