您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 2021最新版的Redis面试题有哪些
## 目录
- [Redis基础概念](#redis基础概念)
- [数据结构与使用场景](#数据结构与使用场景)
- [持久化机制](#持久化机制)
- [高可用与集群](#高可用与集群)
- [性能优化](#性能优化)
- [实战场景题](#实战场景题)
- [高级特性](#高级特性)
- [Redis 6.0新特性](#redis-60新特性)
- [常见问题排查](#常见问题排查)
- [完整面试题答案](#完整面试题答案)
---
## Redis基础概念
### 1. 什么是Redis?主要特点是什么?
Redis(Remote Dictionary Server)是一个开源的**内存数据结构存储**系统,可用作数据库、缓存和消息中间件。核心特点包括:
- **高性能**:基于内存操作,读写速度达10万+/秒
- **丰富的数据结构**:支持String/Hash/List/Set/ZSet等
- **持久化**:支持RDB和AOF两种方式
- **高可用**:支持主从复制和集群模式
- **原子性**:所有操作都是原子级的
### 2. Redis与Memcached的区别?
| 特性 | Redis | Memcached |
|--------------|------------------------|-----------------------|
| 数据结构 | 支持5种复杂数据结构 | 仅支持简单的key-value |
| 持久化 | 支持 | 不支持 |
| 集群模式 | 原生支持Cluster | 需第三方方案 |
| 线程模型 | 单线程(6.0后多线程IO)| 多线程 |
| 内存管理 | 可配置淘汰策略 | 固定LRU策略 |
---
## 数据结构与使用场景
### 3. Redis的5种基础数据结构及典型应用
#### String(字符串)
- **实现**:SDS(Simple Dynamic String)
- **场景**:
```bash
# 计数器
INCR article:1:views
# 分布式锁
SET lock:order 1 NX EX 30
实现:ziplist + hashtable
场景:
# 存储用户对象
HMSET user:1000 name "John" age 30
实现:quicklist(linkedlist + ziplist)
场景:
# 消息队列
LPUSH orders "order1"
BRPOP orders 30
实现:intset + hashtable
场景:
# 共同好友
SINTER user:1:friends user:2:friends
实现:skiplist + ziplist
场景:
# 排行榜
ZADD leaderboard 100 "player1"
ZREVRANGE leaderboard 0 9
特性 | RDB | AOF |
---|---|---|
持久化方式 | 定时快照 | 记录写命令 |
文件大小 | 较小(二进制压缩) | 较大(文本格式) |
恢复速度 | 快 | 慢 |
数据安全性 | 可能丢失最后一次快照后数据 | 根据fsync策略决定(默认1秒) |
配置示例 | save 900 1 |
appendfsync everysec |
# 开启混合持久化
aof-use-rdb-preamble yes
全量同步:
增量同步:
数据分片:16384个slot,每个节点负责部分slot
请求路由:
# 当客户端访问错误分片时
MOVED 3999 127.0.0.1:6381
故障转移:
redis-cli --hotkeys
或monitor
命令发现热点
redis-cli --bigkeys
MEMORY USAGE key
UNLINK
替代DEL
(异步删除)# 启用多线程
io-threads 4
io-threads-do-reads yes
# 服务端跟踪客户端缓存
CLIENT TRACKING ON REDIRECT 1234
示例:
MULTI
SET name "Alice"
INCR counter
EXEC
问题 | 现象 | 解决方案 |
---|---|---|
缓存穿透 | 大量访问不存在的数据 | 布隆过滤器+空值缓存 |
缓存击穿 | 热点key过期瞬间高并发 | 互斥锁(Redis SETNX)+永不过期 |
缓存雪崩 | 大量key同时过期 | 随机过期时间+多级缓存 |
# 使用ZSet实现
def add_delayed_task(task_id, delay):
timestamp = time.time() + delay
redis.zadd("delayed_queue", {task_id: timestamp})
def poll_tasks():
while True:
now = time.time()
tasks = redis.zrangebyscore("delayed_queue", 0, now)
if tasks:
# 处理任务并移除
process(tasks)
redis.zrem("delayed_queue", *tasks)
time.sleep(1)
SETNX方案:
SET lock:order 1 NX EX 30
RedLock算法:
本文共包含45个高频面试题,完整内容请访问GitHub仓库获取PDF版本。持续更新中… “`
注:以上为精简版内容框架,完整7500字版本包含: 1. 每个问题的深度解析(如RDB触发条件详细说明) 2. 更多实战场景(秒杀系统设计/附近的人实现) 3. 性能调优参数详解(maxmemory-policy所有选项说明) 4. 完整配置示例和监控命令 5. Redis与其他技术栈(MySQL/MQ)的协同方案
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。