精心整理的REDIS面试题

PHP面试题https://blog.csdn.net/hzbskak/article/details/120852249
REDIS面试题https://blog.csdn.net/hzbskak/article/details/120852279
MYSQL面试题https://blog.csdn.net/hzbskak/article/details/120852285
NGINX面试题https://blog.csdn.net/hzbskak/article/details/120852271

1Redis和Memcached相比,有哪些优势?

  1. redis支持 string list set hash zset,memcached只支持string
  2. redis支持数据持久化,可以把内存中的数据持久化到硬盘上,memcached不支持,只能存到内存中,重启就没有数据了。
  3. redis使用的是单线程的多路IO复用机制

为什么用redis?

因为传统的关系型数据库已经不适用于所用的场景了,比如秒杀时的库存扣减,APP首页的访问流量高峰。很容易把数据库搞崩,所以就需要用到缓存中间件。目前市面上常用的中间件就是redis和mc。

2Redis为什么要把数据放到内存中?

如果不将数据放到内存中,磁盘的IO速度会严重影响性能。

Redis为什么这么快?

  1. redis大部分操作在内存中完成,
  2. redis是单线程的多路IO复用机制

Redis数据类型有哪些?分别应用于哪些场景?

string:缓存,做计数器,分布式系统升自增长ID

list:异步队列,任务轮询,文章列表

hash:记录博客中某个博主的页面访问量,名字,信息

set:微博抽奖,QQ标签,共同关注 好友(交集)

sorted set:排行榜

Redis的过期策略有哪些?大量key集中过期导致卡顿如何解决?

Redis过期策略采用的是惰性删除+定期删除策略。

大量key集中过期导致卡顿如何解决?

  • 在设置过期时间时,增加一个随机时间

持久化方式有哪些?有什么区别?

RDB做镜像全量持久化,AOF做增量持久化。因为RDB会耗费较长时间,不够实时,在停机的时候会导致大量丢失数据,所以需要AOF来配合使用。在redis实例重启时,会使用RDB持久化文件重新构建内存,再使用AOF重放近期的操作指令来实现完整恢复重启之前的状态。

缓存雪崩、击穿、穿透如何解决?

  • 缓存雪崩:设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,全部转发到数据库中,导致数据库压力过大而崩溃。

    可以加给过期时间加一个随机数

  • 缓存击穿:某一个key在某个时间点被高并发的访问。

    可以采用互斥锁/分布锁。让一个线程去查询,其他线程等待

  • 缓存穿透:恶意请求不存在的key,导致缓存无法命中,每次都去查数据库

    如果数据库查不到就设置NULL并设置过期时间

    对参数做校验,不合法的参数直接return

    使用布隆过滤器判断数据是否存在

如何保证Redis命令的原子性?

原子性:多个命令要么全部成功,要么全部失败。
通过Lua脚本实现:多个操作写道lua脚本中,redis把整个lua脚本作为整体执行

有序集合是怎么排序的?

它给集合中的每一个元素设置分数,按照其分数进行排序,也不允许有重复值

缓存的原理

有缓存则读缓存,没缓存则读数据库然后做缓存

MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?

redis内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。

如果有大量的key需要设置同一时间过期,一般需要注意什么?

可能会出现缓存雪崩,我们一般需要在过期时间上加一个随机值。

那你使用过Redis分布式锁么,它是什么回事?

先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记释放。

使用过Redis做异步队列么,你是怎么用的?

使用list最为队列,rpush生产消息,lpop消费消息。当lpop没有消息的时候,要适当sleep一会再试。

如果对方追问可不可以不用sleep呢?

list还有个指令叫blpop,在没有消息的时候,它会阻塞住直到消息到来。

如果对方接着追问能不能生产一次消费多次呢?

使用pub/sub主题订阅者模式,可以实现 1:N 的消息队列。

如果对方继续追问 pub/sub有什么缺点?

在消费者下线的情况下,生产的消息会丢失,得使用专业的消息队列如RocketMQ等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值