文章目录
在我们背诵这些八股文之前,我们不妨自己思考以下能回答出几道题,自己回答的和百度的是否一致
使用场景
缓存,分布式锁,计数器,保存token,消息队列,延迟队列
使用场景问题:
- Redis的数据持久化策略有那些?
- 什么是缓存穿透,怎么解决?
- 什么是布隆过滤器?
- 什么是缓存击穿,怎么解决?
- 什么是缓存雪崩,怎么解决?
- redis双写问题
- redis分布式锁如何实现
- redis分布式锁如何合理的控制锁的有效时长
- redis的数据过期策略有哪些?
- redis的数据淘汰策略有哪些?
其他问题:
redis集群有哪些方案?
什么是redis主从同步?
你们使用redis是单点还是集群?哪种集群
redis分片集群中数据是怎么存储和读取的
redis集群脑裂
怎么保证redis的高并发和高可用
你们用过redis的事务吗?事务的命令有哪些
redis是单线程的,但是为什么还那么快。
相关信息
Redis的数据持久化策略有那些?
持久化策略主要有两种:RDB(Redis DataBase)和AOF(Append Only File)
RDB:通过指定时间间隔将内存数据集快照写入磁盘。Redis会单独创建一个子进程来进行持久化,将数据写入到一个临时文件(dump.rdb).缺点是如果发生在两次快照间隔期,可能丢失一部分数据
AOF:记录服务器接收的每个写操作,性能不如RDB
什么是redis的缓存穿透?
用户请求的数据在缓存中不存在,数据库也不存在,导致每次都去查询数据库,返回空。不断请求系统中不存在的数据,每次都去数据库查,造成数据库压力过大。
解决方案:
1.缓存空数据:当查询返回的数据为空,仍把这个空结果进行缓存
2.使用锁: 当发现缓存不存在时,可以使用锁来避免多个相同请求同时访问数据库,
3.布隆过滤器: 一种数据结构,快速判断一个元素是否存在于一个集合中
什么是布隆过滤器
在查询redis之前经过布隆过滤器过滤一遍,没有则直接返回空。布隆过滤器存在误判的可能,主要应用在对于大数据量的,对于查询精度要求不那么高的应用中。
布隆过滤器是存放在redis中的特殊数据,集成在redis中。
主要原理是对查询的key值进行多次不同的hash,将结果存放到多个bit位中,因为利用了hash算法,可能会存在hash碰撞-----不同的值hash后指向了同一个位置。所以布隆过滤器的结果可以看作:不存在则一定不存在,存在则不一定存在。
如何减少hash碰撞发生的概率呢?
1.增加hash的次数,通过多个hash落在不同的位置,减少误判,这会增加cpu的一个运算量
2.增加存放的字节的长度,这样会减少落在同一个位置的概率,但是会增加内存。
具体怎么考虑,需要找到一个平衡内存,空间和容错率的值
什么是redis的缓存击穿?
当缓存中某个热点数据突然过期或者被删除时,突然有大量的请求访问这个数据,请求直接打到了数据库。
为了避免这种情况,我们可以采取一些策略。比如使用互斥锁来确保同一时间只有一个请求去查询数据库,并将查询结果更新到缓存中。当然还有其他解决方法,比如预热缓存,设置缓存永不过期等…
什么是缓存雪崩
在某个