Redis面试题

1.redis应用场景:
2.redis持久化:RDB和AOF
RDB是采用存储内存数据集快照的方式进行持久化,缺点:占用cpu和磁盘IO资源较大,会造成其他应用的服务卡顿,甚至宕机,出现丢失数据的风险较大(由这种持久化机制本身决定,60秒内多少个key发生变化进行一次,若没有出发,则会进行下一轮持久化判断查询,因此在两轮判断之间出现服务器宕机,丢失数据风险较大),优点:恢复速度较快。
AOF采用日志追加写入的方式。缺点:恢复速度慢,因为要将所有的指令重新执行一次。优点丢失数据的风险比较小,不会占用大量的cpu资源以及磁盘IO资源。
默认情况下RDB持久化方式开启,AOF默认未开启。
3.内存淘汰策略:
图片说明
内存不够用时出发内存淘汰策略。默认策略为报错模式。
带有volatile字的只针对与设置了过期时间的数据。Allkeys是对所有数据都执行淘汰策略。
4.Redis集群:
4.1主从复制:
图片说明
默认主节点宕机,从节点不能够自动替换主节点。
4.2哨兵模式:
图片说明
哨兵功能:监控,提醒,自动故障转移。
对哨兵采用集群的方式,实现高可用。
4.3redis集群:
图片说明
哈希槽共有16384个,多个主节点占用一定范围的哈希槽,往redis里面存值的时候,首先进行hash函数的计算,hash值对16384取模,得到某一个确定的hash槽,往指定的hash槽之中存储数据,取数据也要经过同样的运算。
5.redis缓存问题
5.1缓存穿透:查询了一个mysql数据库里没有的数据,多次请求都会访问多次mysql数据库,造成数据库压力过大。
图片说明
解决方式一:在redis缓存这个不存在的值,就可以减小mysql数据库的压力
解决方式二:布隆过滤器
5.2缓存击穿:redis中的热点数据过期,会发生缓存击穿
解决办法一:将redis中的热点数据过期时间设长
解决办法二:使用互斥锁机制来实现只进行一次mysql查询,其他请求线程都进行等待。
5.3缓存雪崩:大量redis数据出现集中过期失效。
解决办法:将数据分业务设置过期时间。不同业务的redis数据设置的过期时间不同,就能避免雪崩现象的发生。
6.布隆过滤器
使用场景:请求先查询redis,若没有就查询mysql。问题就在于直接查询mysql了。
实现方式,在进行mysql数据插入的同时,在布隆过滤器中记录数据库中有这个值,这样下次查询的时候先访问布隆过滤器,如果布隆过滤器没有,就没必要查询mysql了,减小mysql的压力。
布隆过滤器中的两个概念:
①:位数组(长度可以设置)
②:多个hash函数
图片说明
布隆过滤器的缺点:可以判断一个key一定不存在,但是不能够判断一个key一定存在
影响布隆过滤器误判因素:
①:位数组长度过小,误判操作可能更容易发生。
②:hash函数的个数尽可能的多,判断一个数据是否在mysql中的条件就越苛刻,就越能够避免误判操作。

注意!此信息未认证,请谨慎判断信息的真实性!

全部评论
空

相关内容推荐

头像
点赞 评论 收藏
转发
头像 头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像 头像
点赞 评论 收藏
转发
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像 头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
1 收藏 评论
分享

全站热榜

正在热议