Redis常见面试题

导读:本篇文章讲解 Redis常见面试题,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

Java常见面试题_2022最新版

序号 内容 链接
1 Java基础面试题 https://blog.csdn.net/weixin_46030002/article/details/126399353
2 Java集合容器面试题 https://blog.csdn.net/weixin_46030002/article/details/126425298
3 Java线程面试题 https://blog.csdn.net/weixin_46030002/article/details/126518395
4 Java异常面试题 https://blog.csdn.net/weixin_46030002/article/details/126482778
5 Spring常见面试题 https://blog.csdn.net/weixin_46030002/article/details/127281194
6 SpringMVC常见面试题 https://blog.csdn.net/weixin_46030002/article/details/127057785
7 Mybatis常见面试题 https://blog.csdn.net/weixin_46030002/article/details/126026561
8 MySQL常见面试题 https://blog.csdn.net/weixin_46030002/article/details/126557564
9 Redis常见面试题 https://blog.csdn.net/weixin_46030002/article/details/126435834
  • Java常见面试题_2022最新版持续更新中…


Redis官网

Redis官网(仅支持Linux系统)
Redis对于windows的支持


一、基本概念了解

Redis是什么

Redis(R) 本质上是一个 Key-Value 类型的基于内存的缓存型数据库,由 C 语言开发,NoSQL非关系型数据库,Redis本身也会对数据进行持久化处理。

Redis版本

Windows版本:Reids 官网本身对于 windows 操作系统没有支持,但是由于是开源软件,微软开发小组,针对于 Redis 开发了 windows 的版本,最新版本为 3.2.100,下载地址见上方链接
请添加图片描述
Linux版本: Reids 官网下载即可,地址见上方链接


二、常见面试题

Redis 支持的数据类型有哪些(***)

  • String
    • 字符串,整数,浮点数
  • List
    • 列表
  • Set
    • 无序集合
  • Sorted Set(ZSet)
    • 有序结合
  • Hash
    • 散列表

Redis的应用场景:

  • 计数器
    • String数据类型能做自增自减操作,实现计数功能
  • 缓存
    • 热点数据
    • 临时数据(验证码信息)
  • 会话缓存
    • Session服务器
    • token
  • 消息队列
    • 发布订阅功能
  • 分布式锁
    • 分布式的场景下,无法使用正常的锁对于多个节点的进程进行同步,可以使用Redis自带的SETNX命令或者RedLock分布式锁去实现这个功能
  • 排行榜功能
    • ZSet 可以实现有序操作
  • 实现共同好友功能]
    • Set可以实现交集和并集操作

Redis是否能做持久化操作

可以,Redis本身可以对于数据进行持久化处理,将内存中的数据写到磁盘上去,防止服务器宕机导致的数据丢失。
Redis提供了两种持久化机制:RDB(默认)快照,AOF(持久化)

Redis持久化机制是什么?各自的优缺点

Redis提供了两种持久化机制:RDB(默认)快照,AOF(持久化)

  • RDB(Redis DataBase)
    • RDB是Redis默认的持久化方式。按照一定的时间将内存的数据以快照的形式保存到硬盘中,对应产生的数据文件为dump.rdb。通过配置文件中的save参数来定义快照的周期。
    • 优点
      • 只有一个文件 dump.rdb,方便持久化
      • 容灾性好,一个文件可以保存到安全的磁盘
      • 性能最大化,fork 子进程来完成写操作,让主进程继续处理令,所以是 IO 最大化。使用单独子进程来进行持久化,主进程不会进行任何 IO 操作,保证了 redis 的高性能
      • 相对于数据集大时,比 AOF 的启动效率更高
    • 缺点
      • 数据安全性低。RDB 是间隔一段时间进行持久化,如果持久化之间 redis 发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候)
  • AOF(Append-only file)
    • 是将Redis执行的每次写命令记录到单独的日志文件中,当重启Redis会重新将持久化的日志文件执行一次来恢复数据
    • 优点
      • 数据安全,aof 持久化可以配置 appendfsync 属性,有 always,每进行一次命令操作就记录到 aof 文件中一次
      • 通过 append 模式写文件,即使中途服务器宕机,可以通过redis-check-aof 工具解决数据一致性问题
      • AOF 机制的 rewrite 模式。AOF 文件没被 rewrite 之前(文件过大时会对命令 进行合并重写),可以删除其中的某些命令(比如误操作的 flushall)
    • 缺点
      • AOF 文件比 RDB 文件大,且恢复速度慢
      • 数据集大的时候,比 rdb 启动效率低
  • RDB和AOF两种持久化的优缺点
    • AOF文件比RDB更新频率高,优先使用AOF还原数据
    • AOF比RDB更安全也更大
    • RDB性能比AOF好
    • 如果两个都配了优先加载AO

缓存预热

缓存预热就是在启动项目(项目上线后),将相关的缓存数据直接加载到缓存中,这样可以避免在用户请求数据的时候,先查询数据库,再进行数据缓存,而是直接可以查询事先被预热的数据(加载到缓存中的数据),增加了用户查询效率,提高了用户的使用体验感。

  • 增加手动刷新数据功能,上线时手动操作
  • 数据量不大时,可以在项目启动的时候进行自动加载
  • 定时刷新缓存

缓存命中

  • 可以直接通过缓存获取到需要的数据,而不需要通过再次查询数据库或者执行其他操作。
  • 缓存命中不成功的原因:
    • 缓存中根本不存在
    • 缓存已过期

缓存穿透

  • 由于缓存中没有用户想要查询的数据,用户请求透过redis直接去请求数据库服务器,导致数据库服务器压力过载。
  • 解决方案:
    • 当缓存不存在,MySQL数据库也不存在这条信息,在redis中缓存成一个空对象,返回给对象。(代码维护简单,但是效果不是很好)
    • Redis为我们提供了一种解决方案,布隆过滤器(代码维护比较复杂,效果很好)

缓存雪崩

  • 缓存雪崩指的是在某一个时间段,集中获取大量请求,引起数据库压力过大甚至宕机。
  • 缓存雪崩的原因:
    • Redis 突然宕机
    • 大部分数据失效(数据缓存时间同一时间失效)
  • 解决办法:
    • reids 高可用
      • 多增加 Redis 服务器,大家Redis服务器集群,做主从复制
    • 限流降级
      • 缓存失效后,通过锁或者队列来控制读取数据库写缓存的线程数量
        • 单体环境(Lock,Synchronized等)
        • 分布式环境(基于Redis,zookeeper,nacos的分布式锁)
    • 缓存预热
      • 将可能大量访问的数据在项目部署之前先加载到缓存中。在即将发生大并发访问前手动触发加载缓存。
    • 设置不同的过期时间
      • 设置不同的过期时间,让缓存失效的时间尽量均匀

– [x] 持续更新中…

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/107627.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!