本文转载自:一文搞定Redis面试,附Redis面试大纲+常见Redis面试题
一、基础篇
- 快速上手
①. 什么是redis
②. 为什么使用redis
③. 安装
④. 基本使用(常见数据结构的命令) - Java操作redis
①. Jedis
②. SpringBoot - 启动redis的方式
①. 配置文件
②. 生产环境启动方案
二、进阶篇
- redis实现session共享
- redis缓存的使用
①. 注解式
②. Spring Cache - 数据库和缓存双写一致性问题——穿透
- redis实现附近的人
- redis实现计数器
- redis事务
- redis分布式锁的使用
- redis集群
- redis实现延时队列
- redis实现限流
- redis实现布隆过滤器
- 发布订阅
- redis优化
三、原理篇
- redis单线程为什么性能好
- 数据类型的底层实现
- 持久化机制
- 过期策略
- 内存淘汰
- redis优化
- 哨兵模式
四、常见Redis面试题
1. redis 和 memcached 什么区别?为什么高并发下有时单线程的 redis 比多线程的memcached 效率要高?
区别:
- mc 可缓存图片和视频。rd 支持除 k/v 更多的数据结构;
- rd 可以使用虚拟内存,rd 可持久化和 aof 灾难恢复,rd 通过主从支持数据备份;
- rd 可以做消息队列。
原因:mc 多线程模型引入了缓存一致性和锁,加锁带来了性能损耗。
2. redis 主从复制如何实现的?redis 的集群模式如何实现?redis 的 key 是如何寻址的?
主从复制实现:主节点将自己内存中的数据做一份快照,将快照发给从节点,从节点将数据恢复到内存中。之后再每次增加新数据的时候,主节点以类似于 mysql 的二进制日志方式将语句发送给从节点,从节点拿到主节点发送过来的语句进行重放。
分片方式:
- 客户端分片
- 基于代理的分片
- Twemproxy
- codis
- 路由查询分片
- Redis-cluster(本身提供了自动将数据分散到 Redis Cluster 不同节点的能力,整个数据集合的某个数据子集存储在哪个节点对于用户来说是透明的)
redis-cluster 分片原理:Cluster 中有一个 16384 长度的槽(虚拟槽),编号分别为 0-16383。
每个 Master 节点都会负责一部分的槽,当有某个 key 被映射到某个 Master 负责的槽,那么这个 Maste