目录
1.为什么要用 Redis /为什么要用缓存
2.Redis为什么这么快
3.Redis有哪些数据类型
4.Redis 的持久化机制是什么?各自的优缺点?
5.缓存雪崩
6.缓存穿透
7.缓存击穿
8.Redis 的集群模式
主从复制
哨兵模式
1.为什么要用 Redis /为什么要用缓存
高性能:
假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在数缓存中,这样下一次可以直接从缓存中获取了。
高并发:
直接操作缓存能够承受的请求是远远大于直接访问数据库的
2.Redis为什么这么快
1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。
2、数据结构简单,对数据操作也简单
3、采用单线程,不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不可能出现死锁而导致的性能消耗;
4、使用多路 I/O 复用模型,非阻塞 IO;
5、Redis 直接自己构建了底层机制
3.Redis有哪些数据类型
String:简单的键值对缓存
LIST:类似粉丝列表、文章的评论列表之类的数据
SET: 交集、并集、差集的操作,比如交集,可以把两个人的粉丝列表整一个交集
HASH:结构化的数据,比如一个对象
ZSET:(有序集合)去重但可以排序,如获取排名前几名的用户
geospatial:地理位置
Hyperloglog:基数统计,集合内不重复元素
Bitmaps:位存储
4.Redis 的持久化机制是什么?各自的优缺点?
Redis 提供两种持久化机制 RDB(默认) 和 AOF 机制:
RDB:按照一定的时间将内存的数据以快照的形式保存到硬盘中
AOF:则是将Redis执行的每次写命令记录到单独的日志文件中,当重启Redis会重新将持久化的日志中文件恢复数据。
优缺点是什么?
- AOF文件比RDB更新频率高,优先使用AOF还原数据。
- AOF比RDB更安全也更大
- RDB性能比AOF好
- 如果两个都配了优先加载AOF
- RDB做不到实时持久化
- AOF存储文件大,恢复速度慢,对性能影响大
5.缓存雪崩
缓存雪崩是指缓存同一时间大面积的失效,请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉
解决方案
- 缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。
- 加锁排队。
6.缓存穿透
缓存穿透是指一个一定不存在的数据,导致所有的请求都落到数据库上,造成数据库短时间内承受大量请求而崩掉。
解决方案
i. 查询返回的数据为空,仍把这个空结果进行缓存,但过期时间会比较短
ii. 布隆过滤器:将所有可能存在的数据哈希到一个足够大的 bitmap 中,一个一定不存在的数据会被这个 bitmap 拦截掉,从而避免了对 DB 的查询。
7.缓存击穿
缓存击穿是指缓存中没有但数据库中有的数据,这时由于并发用户特别多,去数据库去取数据,引起数据库压力瞬间增大,造成过大压力。
解决方案
- 设置热点数据永远不过期。
- 加互斥锁
8.Redis 的集群模式
主从复制
当从数据库启动时,会向主数据库发送sync命令,主数据库接收到sync后开始在后台保存快照rdb,在保存快照期间收到的命令缓存起来,当快照完成时,主数据库会将快照和缓存的命令一块发送给从数据库。
哨兵模式
建立在主从模式的基础上,监控redis集群的运行状况
哨兵的作用:
1、监控redis主、从数据库是否正常运行
2、主出现故障自动将从数据库转换为主数据库。
哨兵的核心知识
1、哨兵至少需要 3 个实例,来保证自己的健壮性。
2、哨兵 + redis 主从的部署架构,只能保证 redis 集群的高可用性。
3、配置哨兵监控一个系统时,只需要配置其监控主数据库即可,哨兵会自动发现所有复制该主数据库的从数据库。



