Redis面试合集

Redis

Redis是什么?

在哪里用到了Redis?结合项目

缓存穿透

查询一个不存在的数据,mysql也查不到,数据也不会写入缓存中,就每次都会直接跳过缓存查询DB导致
解决办法:
1.缓存空数据,把空数据进行缓存
2.使用bool过滤器,检索元素是否在集合中,在就继续查询,如果没有就直接返回空,内存占用少,不会有多余的key,但是实现复杂可能会误判

缓存击穿

某个key设置的时间过期了,这是恰好有大量针对这个key的并发请求过来,这时候可能会把DB压垮
解决办法
1.互斥锁(强一致,性能差)
设置一个互斥锁,限制数据库在一段时间内只能被一个线程读取
2.逻辑过期(高可用,性能好)
不设置过期时间,每次查询缓存的时候唤醒并重置逻辑过期时间

缓存雪崩

在同一时段内大量key同时失效或者Redis服务宕机
1.给不同的Key的TTL添加随机值
2.利用Redis集群(哨兵模式,集群模式)或者使用多级缓存,或者降级限流

问:mysql数据如何与redis数据同步呢?(双写一致性)
在项目中,主要是针对文章的热点数据进行缓存,不需要保证实时性,于是使用了异步方案进行同步数据。
我们使用的是延时一致性进行保持的一致性,使用Rabbitmq,这个插件有很强的可靠性。
1.添加依赖,在yml中加入配置
2.在每次修改或者新增数据的时候添加sendMessage进行插入数据,insert和update

读操作:缓存命中直接返回
写操作:延迟双删,无论是先删除数据库数据还是缓存都会产生脏数据,所以需要使用分布式锁,使用共享锁,读的时候不互斥,写的时候互斥,
使用MQ,在修改数据时发送消息,保证MQ的可靠性,还可以使用cannal。

Redis持久化

redis作为缓存,数据持久化怎么做的?
1.RDB :Redis数据快照,使用save/bgsave执行RDB,将内存的数据记录到磁盘中,save 900 1(900s内如果有一个key被修改,则执行bgsave,在conf文件中配置)
2.AOF:追加文件,redis处理的每次写命令会在AOF中,需要在redis.conf配置文件中开启AOF功能,经常使用everysec,

数据过期策略

redis的key过期后如何处理?
1.惰性删除 :过期后不删除,当需要的时候检查是否过期,过期就删掉重新写入,没有就直接读取
2.定期删除:每隔一段时间检查+删除。Slow模式/Fast模式

Redis数据淘汰策略

在这里插入图片描述

分布式锁

秒杀抢购时,使用redisson实现,Watch dog(看门狗)每隔releaseTime/3的时间做一次续期,都是基于lua脚本

消息队列

集群模式

主从复制
哨兵模式
分片集群

事务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想成为全栈工程师的小小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值