一、概述
1、redis是什么?
2、redis的优缺点
3、为什么要使用缓存/为什么要使用redis
4、为什么使用redis,而不是map作为缓存
5、Redis为什么这么快
二、数据类型
6、Redis有哪些数据类型
7、Redis的使用场景
三、持久化
什么是Redis持久化
Redis的持久化机制是什么?各有什么优缺点?
如何选择合适的持久化方式?
Redis的动态扩容,缩容
四、过期键的删除策略
Redis过期键的删除策略
Redis 的过期时间和永久有效如何设置?
五、内存相关
MySQL中有2000w数据,redis中只存20w数据,如何保证redis中的数据都是热点数据
redis内存数据集上升到一定大小的时候,就会实行数据淘汰策略
Redis的内存淘汰策略有哪些?
Redis的内存淘汰策略是指在Redis用于缓存的内存不足时,怎么处理需要新写入且需要申请额外空间的数据。
Redis消耗什么物理资源?
Redis的内存用完了会发生什么?
Redis如何做内存优化?
六、线程模型
Redis的线程模型
七、事务
redis事务的概念
redis事务的三个阶段
redis事务相关命令
事务四个特性?Redis支持哪些特性?
Redis事务支持隔离性吗?
Redis事务保证原子性吗,支持会滚吗?
Redis事务的其他实现
八、集群方案
哨兵模式
分片集群 (Redis Cluster)
主从模式
生产环境 Redis 是怎么部署的?
说说Redis哈希槽的概念?
Redis 集群会有写操作丢失吗?为什么?
Redis集群之间是如何复制的?
Redis集群最大的节点个数是多少?
Redis集群如何选择数据库?
九、分区
Redis是单线程的,如何提高多核cpu的利用率?
为什么要做Redis分区
主要解决两个问题
- 海量数据存储
- 高并发写的问题
Redis分区有什么优缺点
缺点:
1、备份必须要操作多个实例上的RDB或者AOF文件
2、同时操作多个key,不能使用Redis事务
十、分布式问题
Redis实现分布式锁
Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接不存在竞争关系,使得Redis中可以使用SETNX命令实现分布式锁
使用SETNX完成同步锁的流程:
使用SETNX获取锁,若返回0(key存在,锁已存在)则获取失败,反之获取成功
【注意】
为了防止获取锁后程序出现异常导致进入死锁状态,需要为key设置一个过期时间。如果需要释放锁,直接将key删除
如何解决Redis并发竞争key的问题
Redis的并发竞争key的问题就是多个系统同时对key进行操作,但是执行的顺序和我们期望的顺序不同,这也就导致了结果的不同
【zookeeper实现分布式锁】
分布式Redis是前期做还是后期规模上来了做好?
什么是RedLock
Redis官方提出了一种权威的基于Redis实现分布式锁的方式,名为RedLock,此种方式比原先的单节点的方法更安全
。它可以保证以下特性。
十一、缓存异常
缓存穿透
含义: 是指查询一个不存在的数据,数据库无此记录,我们没有将此次查询的null写入缓存;这将导致每次去查询这个不存在的数据时都需要去数据库查询,失去了缓存的意义
风险:利用不存在的数据进行攻击,使数据库压力瞬间增大,最终导致崩溃
解决:将null结果也进行缓存,并加入过期时间
缓存击穿
对于一些设置了过期时间的缓存热点数据(这些数据可能在某些时间内被超高并发的访问,是一种非常热点的数据);如果这个key在大量请求同时进来前刚好失效,那么对这个key的数据查询都落到db,我们称之为缓存击穿
解决:大量并发请求时,只让一个人去查,其他人等待,查询到以后释放锁;其他人获取到锁,先查询缓存,如果缓存有数据,就不用去db查询
缓存雪崩
缓存雪崩是指我们在设置缓存key时,采用了相同的过期时间,若缓存在某一时刻同时失效,请求全部转发到db,db压力瞬时过重导致雪崩
在原有失效时间的基础上增加一个随机值(比如1-5分钟随机),这样每个缓存的过期时间的重复率就会降低,很难引发集体失效的事件
缓存预热
十二、常用工具
Redis常用的客户端
Redisson、Jedis、lettuce