Redis面试题

文章讨论了Redis中的缓存问题,包括缓存击穿、缓存雪崩和缓存穿透,提出了解决方案。同时,解释了Redis为何能保持高效,主要归因于其单线程模型、内存操作和多路复用机制。此外,还介绍了Redis的两种持久化策略:RDB和AOF及其优缺点。
摘要由CSDN通过智能技术生成

1:redis的缓存击穿,缓存雪崩,缓存穿透

        redis的缓存击穿:是指大量的并发请求去redis查询一个不存在的key,然后大规模的数据透过redis命中了数据库,给数据库带来了负担,导致数据库宕机。
        解决办法:在redis查数据之前,先判断key是否存在,如果不存在,就不再数据库查询,就不再往数据库中查询,而是将他的结果设置成一个空值或者默认值,存储在redis。

        缓存血崩:redis大量的key在同一时间失效,导致大量请求直接访问数据库。

        解决办法:设置不同的过期时间,防止同时失效。

                           使用队列:将请求发送到队列里,有序执行,防止同时失效。

                           备份缓存:通过缓存集群和数据同步,备份缓存数据,在缓存失效的时候可以从备份中获取数据。

        缓存穿透:攻击者大量查询不存在的key,导致数据库宕机。

        解决办法:在查询缓存之前,先检查请求参数是否合法。

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

        1:基于内存操作,避免了频繁的磁盘io。

        2:多路复用,异步的io,redis采用了异步的io模型,通过非阻塞的方式处理网络请求,避免了等待io的操作,减少了线程切换的开销,和上下文切换的过程。

        3:单线程模型:所有的请求都在一个线程中串行执行,避免了切换上下文的开销,减小了锁竞争的概率,也使用了类似事件驱动的方式处理请求,就是在等待请求的时候进入睡眠模式,有请求的时候唤醒线程,避免线程空转,提高效率。

3:Reis的持久化:

        redis提供了两种持久化方案:AOF和RDB

        RDB:将指定时间的数据进行快照的存储,将数据写入到磁盘,redis会创建一个子线程进行持久化操作,先将数据写到一个临时文件上,等持久化结束后,用临时文件替换掉之前的文件,在这个过程中不需要进行任何io操作,确保了极高的性能

        保存策略 : save 900 1 900秒内如果有一个key得值发生变化,保存。

        AOF:以日志的形式记录每个更新操作

        redis在重启的时候会读取这个文件,重新执行新建,修改数据的命令恢复数据。

        缺点:比rdb更加消耗内存空间,备份速度慢,存在bug时,造成不能恢复。

        

        

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值