目录
(4)Redis是单线程的,为什么那么快?编辑编辑编辑编辑编辑编辑编辑编辑
一、Redis的使用场景
二、缓存三大问题(穿透、击穿、雪崩)
(1)缓存穿透
(2)缓存击穿
1.互斥锁
优点:保证数据的强一致性
缺点: 性能差
2.逻辑过期
优点:保证数据的高可用性
缺点: 性能优
(3)缓存雪崩
三、双写一致性
(1)一致要求高
问题 :先删除缓存,还是先修改数据库?
情况一:
当下一个线程查询时发现缓存中有数据时,会直接读取缓存中的数据,而此时缓存中的数据和数据库中的数据并不一致,会出现脏数据的现象。
情况二:
当第一个线程查询完数据库时,获取到数据库中的数据(如结果是10),此时另一个线程完成了数据库的更新(结果20),并将缓存删除。第一个线程将查询到的数据写入到缓存当中。导致数据库与缓存的数据不一致。
因此,先删除后操作,先操作后删除,两种方式都会导致数据不一致。
要保证强一致性,需要牺牲到一些性能如:
(2)允许延迟
四、Redis持久化
(1)RDB的执行原理
(2)AOF
(3)RDB与AOF的对比
五、数据过期策略
(1)惰性删除
(2)定期删除
Redis的过期删除策略:惰性删除 + 定期删除 两种策略进行配合使用
六、数据过期策略
七、Redis分布式锁
在集群下无法满足需求,因此要引入分布式锁
Redisson实现的分布式锁
八、Redis的其他面试题
(1)主从复制
全量同步:
增量同步:
(2)哨兵模式
脑裂问题:出现了两个主节点
网络重连后,哨兵会将老的master强制降为slave,将原先的数据清空
(3)分片集群结构
(4)Redis是单线程的,为什么那么快?