1.Redis相关面试题

1.什么是redis,reids的应用场景

1.redis是基于内存的键值型数据库。

2.应用场景:根据自己项目

(1)做缓存:缓存穿透,缓存击穿,缓存雪崩;双写一致性,持久化;数据过期,淘汰策略;

(2)做分布式锁:Redission框架

(3)保存token,消息队列,延迟队列:数据类型;

3.redis数据类型:string list hash sortset set

2.缓存

2.1缓存穿透

描述:当查询一个不存在的数据,会直接从数据库里面查找,数据库里面查不到也不会写入缓存。如果有多个这样的数据,会导致数据库交互过多,导致宕机;

原因:数据库遭受到了攻击;

解决方案

        布隆过滤器(比特数组,初始值为0。在缓存预热的时候,通过3次hash计算,找到对应的位置,将0变为1。这样会存在一定的误差值,一般在5%)

        首先用户请求经过布隆过滤器,判断是否存在,如果存在就返回,没有就不返回。

2.2缓存击穿

描述:当某一个key过期了,在缓存重建的时候,有大量key请求过来直接访问数据库,导致数据库宕机;

解决方案

       互斥锁(保证了强一致性):当某个线程过来发现这个key过期了,会使用redis的sentnx来设置一个互斥锁,当操作成功之后,再释放锁。其他线程不断尝试,直至这个线程操作完之后获得数据;

        逻辑过期(保证了最终一致性):每个key在添加到缓存的时候,设置一个字段专门用来记录过期时间。如果线程进来发现这个key过期,会开启一个子线程来同步这个数据,自己返回过期的数据,其他线程进来同样也是获取到过期的数据,直到同步完毕之后,进来的线程获取到了最新数据;

分析:强一致性:性能不高,可能会产生死锁等问题

          最终一致性:高可用,性能比较高。

2.3.缓存雪崩

描述:在同一时刻,有大量key过期,或者redis宕机的情况;

解决方案

        (1)给key设置不同的TTL

        (2) redis做集群,提高可用性

        (3)业务添加多级缓存

        (4) 业务添加降级限流策略

2.4.双写一致性问题

描述:在修改了数据库内容之后,如果保持数据库和缓存中的数据同步;

解决方案

  延迟双删:有脏读的风险;

  读写锁(保证了强一致性):底层是通过sentnx。在写数据的时候,添加排他锁,读数据的时候添加共享锁;

  异步通知(保证了最终一致性)

        (1)MQ中间件:更新数据的之后,通知缓存删除;

        (2)Cannel中间件:cannel通过读取mysql的binlog日志更新缓存数据;

2.5数据持久化问题

1.RDB:(数据快照)将内存中的数据持久化到磁盘上。通过配置文件设置多长时间持久化一次;

2.AOF:(追加文件)将处理的每一个命令都记录到AOF文件中。通过配置文件设置刷盘策略;

2.6数据过期策略

1.惰性删除:过期不用管,等到使用的时候再删除;

2.定期删除:定期清理;

2.7数据淘汰策略

1.8种不同的淘汰策略;

常见:allkeys LRU: 热点数据;

           allkeys FRU:经常使用的数据;

3.分布式锁

1.redisson实现分布式锁,底层是sentnx(加锁命令)和lua脚本(保证线程操作的原子性)来实现的;

2.通过看门狗机制来控制锁的有效时长:

        一个线程获取到锁之后,watch dog会给线程续期。

3.redisson实现的分布式锁可以重入:底层通过hash结构记录线程id和重用次数。

4.redis实现的分布式锁通过red Lock来实现主从同步,但是性能上很低,不建议使用,通常是通过zookeeper来实现的分布式锁来保证数据的强一致性

4.redis集群

1.主从模式:通过搭建主从集群,来实现读写分离;【解决高并发问题】

(1)全量同步:

(2)增量同步:

2.哨兵模式:保证了redis的高可用性。

(1)哨兵作用:监控  故障恢复  通知

(2)哨兵选主规则;

(3)客观下线和主管下线

(4)哨兵脑裂问题:出现了两个主节点;

3.分片集群:海量数据的存储和高并发写的问题;

描述:多个master,每个master对应多个slave;

(1)之间通过心跳检查机制;

(2)可以访问任意一个master节点,路由到对应的节点;

数据读写:哈希槽平均分配;

5.其他面试题

redis是单线程的为什么还这么快?

(1)redis是基于内存的键值型数据库,在物理性能和存储结构这一块有很大优势;

(2)单线程能够减少线程安全和切换的时间,一定程度上保证了性能;

(3)基于io多路复用的机制;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值