admin管理员组

文章数量:1794759

Redis面试题大全

Redis面试题大全

Redis面试题大全


目录

文档索引

面试题汇总

Q:redis的数据类型,以及每种数据类型的使用场景

Q:Redis为什么采用单线程?

Q:缓存穿透、缓存击穿、缓存雪崩是什么,如何解决?

Q:Redis如何持久化?

Q:Redis如何高可用?

Q:Redis内存不足如何解决?Redis提供的清除和淘汰策略有哪些


文档索引

官网使用手册:


面试题汇总 Q:redis的数据类型,以及每种数据类型的使用场景

A:Redis主要有五种基本类型(String、hash、list、set、sorted set)、三种特殊类型(Bitmap、HyperLogLog、Geospatial)

String的使用场景:

  • 热点数据缓存:利用Redis作为缓存,配合其它数据库作为存储层,利用Redis支持高并发的特点,可以大大加快系统的读写速度、以及降低后端数据库的压力。
  • 分布式锁:分布式锁常用redis实现
  • 分布式全局ID:利用Redis实现分布式系统的全局唯一ID
  • 作计数器限流:许多系统都会使用Redis作为系统的实时计数器,可以快速实现计数和查询的功能。而且最终的数据结果可以按照特定的时间落地到数据库或者其它存储介质当中进行永久保存。
  • 共享用户Session:用户重新刷新一次界面,可能需要访问一下数据进行重新登录,或者访问页面缓存Cookie,但是可以利用Redis将用户的Session集中管理,在这种模式只需要保证Redis的高可用,每次用户Session的更新和获取都可以快速完成。大大提高效率。

hash的使用场景:

  • 适合用于存储对象:比如把用户的信存到hash里,以用户id为key,用户的详细信为value

list的使用场景:

  • 栈、队列、阻塞队列:Redis的链表结构,可以轻松实现栈、队列、阻塞队列。
  • Stack栈:LPUSH+LPOP
  • Queue队列:LPUSH+RPOP
  • Blocking MQ阻塞队列:LPUSH+BRPOP
    • 最新列表:List 类型的 lpush 命令和 lrange 命令能实现最新列表的功能,每次通过 lpush 命令往列表里插入新的元素,然后通过 lrange 命令读取最新的元素列表,如朋友圈的点赞列表、评论列表

    set的使用场景:

    • 用户添加标签:一个人对应多个不同的标签。
    • 取交集、并集:好友/关注/粉丝/感兴趣的人集合,可以使用上面的取交集、并集相关的命令。
    • 随机展示:通过 srandmember 随机返回对应的内容,像一些首页获取动态内容可以这么玩。
    • 黑名单/白名单:有业务出于安全性方面的考虑,需要设置用户黑名单、ip 黑名单、设备黑名单等,set 类型适合存储这些黑名单数据,sismember 命令可用于判断用户、ip、设备是否处于黑名单之中。

    zset的使用场景:

    • 排行榜:有序集合经典使用场景。例如视频网站需要对用户上传的视频做排行榜,榜单维护可能是多方面:按照时间、按照播放量、按照获得的赞数等。

    Bitmap的使用场景:

    • 布隆过滤器:通过Bitmap实现

    HyperLogLog的使用场景:

    • 统计 UV:利用HyperLogLog做大规模数据的去重统计
    Q:Redis为什么快?

    A:

    1、因为Redis是基于内存的操作,比随机磁盘IO快几个量级

    2、Redis使用IO多路复用模型

    Q:缓存穿透、缓存击穿、缓存雪崩是什么,如何解决?

    A:Redis在遭遇某几种情况时,便有可能导致请求跳过缓存到达数据库,导致数据库压力

    解决方案:缓存穿透、缓存击穿、缓存雪崩解决方案

    Q:Redis如何持久化?

    A:Redis的数据是存放在内存中,当机器宕机时,内存中的数据会丢失无法恢复,这需要对数据进行持久化,从而在宕机后进行数据恢复

    解决方案:Redis持久化方案

    Q:Redis如何高可用?

    A:Redis单机部署时,可能因为机器宕机导致整个缓存不可用

    解决方案:Redis高可用方案

    Q:Redis内存不足如何解决?Redis提供的清除和淘汰策略有哪些?

    A:当大量数据存放在Redis中,受限于机器硬件内存大小,会存在内存不足的情况

    解决方案:Redis内存不足解决方案

    Q:Redis如何处理缓存更新一致性

    A:当执行写操作后,需要保证从缓存读取到的数据与数据库中持久化的数据是一致的,因此需要对缓存进行更新。因为涉及到数据库和缓存两步操作,难以保证更新的原子性。 

    解决方案:Redis缓存更新一致性解决方案

    本文标签: 面试题大全Redis