iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Redis有哪些高频面试题
  • 858
分享到

Redis有哪些高频面试题

2023-06-04 04:06:15 858人浏览 薄情痞子
摘要

本篇内容介绍了“Redis有哪些高频面试题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、说说 Redis 都有哪些应用场景?缓存:这应该

本篇内容介绍了“Redis有哪些高频面试题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1、说说 Redis 都有哪些应用场景?
  • 缓存:这应该是 Redis 最主要的功能了,也是大型网站必备机制,合理地使用缓存不仅可以加 快数据的访问速度,而且能够有效地降低后端数据源的压力。

  • 共享Session:对于一些依赖 session 功能的服务来说,如果需要从单机变成集群的话,可以选择 redis 来统一管理 session。

  • 消息队列系统:消息队列系统可以说是一个大型网站的必备基础组件,因为其具有业务 解耦、非实时业务削峰等特性。Redis提供了发布订阅功能和阻塞队列的功 能,虽然和专业的消息队列比还不够足够强大,但是对于一般的消息队列功 能基本可以满足。比如在分布式爬虫系统中,使用 redis 来统一管理 url队列。

  • 分布式:在分布式服务中。可以利用Redis的setnx功能来编写分布式的锁,虽然这个可能不是太常用。

当然还有诸如排行榜、点赞功能都可以使用 Redis 来实现,但是 Redis 也不是什么都可以做,比如数据量特别大时,不适合 Redis,我们知道 Redis 是基于内存的,虽然内存很便宜,但是如果你每天的数据量特别大,比如几亿条的用户行为日志数据,用 Redis 来存储的话,成本相当的高。

2、单线程的 Redis 为什么这么快?

Redis 有多快?官方给出的答案是读写速度 10万/秒,如果说这是在单线程情况下跑出来的成绩,你会不会惊讶?为什么单线程的 Redis 速度这么快?原因有以下几点:

  • 纯内存操作:Redis 是完全基于内存的,所以读写效率非常的高,当然 Redis 存在持久化操作,在持久化操作是都是 fork 子进程和利用 linux 系统的页缓存技术来完成,并不会影响 Redis 的性能。

  • 单线程操作:单线程并不是坏事,单线程可以避免了频繁的上下文切换,频繁的上下文切换也会影响性能的。

  • 合理高效的数据结构

  • 采用了非阻塞 I/O 多路复用机制:多路I/O复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。

  • 加q群:478052716 免费领取(Java架构资料,视频资料,BATJ面试资料)

3、说说 Redis 的数据结构及使用场景

Redis 提供了 5种数据结构,每一种数据结构有各种的使用场景。

String 字符串

字符串类型是 Redis 最基础的数据结构,首先键都是字符串类型,而且 其他几种数据结构都是在字符串类型基础上构建的,我们常使用的 set key value 命令就是字符串。常用在缓存、计数、共享Session、限速等。

Hash 哈希

在Redis中,哈希类型是指键值本身又是一个键值对 结构,形如value={{field1,value1},...{fieldN,valueN}},添加命令:hset key field value。哈希可以用来存放用户信息,比如实现购物车

List 列表

列表(list)类型是用来存储多个有序的字符串。可以做简单的消息队列的功能。另外,可以利用 lrange 命令,做基于 Redis的分页功能,性能极佳,用户体验好。

Set 集合

集合(set)类型也是用来保存多个的字符串元素,但和列表类型不一 样的是,集合中不允许有重复元素,并且集合中的元素是无序的,不能通过 索引下标获取元素。利用 Set 的交集、并集、差集等操作,可以计算共同喜好,全部的喜好,自己独有的喜好等功能。

Sorted Set 有序集合

Sorted Set 多了一个权重参数 Score,集合中的元素能够按 Score 进行排列。可以做排行榜应用,取 TOP N 操作

4、说一说 Redis 的数据过期淘汰策略

先给大家一个结论,Redis 中数据过期策略采用定期删除+惰性删除策略。

定期删除、惰性删除策略是什么?

  • 定期删除策略:Redis 启用一个定时器定时监视所有的 key,判断key是否过期,过期的话就删除。这种策略可以保证过期的 key 最终都会被删除,但是也存在严重的缺点:每次都遍历内存中所有的数据,非常消耗 CPU 资源,并且当 key 已过期,但是定时器还处于未唤起状态,这段时间内 key 仍然可以用。

  • 惰性删除策略:在获取 key 时,先判断 key 是否过期,如果过期则删除。这种方式存在一个缺点:如果这个 key 一直未被使用,那么它一直在内存中,其实它已经过期了,会浪费大量的空间。

定期删除+惰性删除策略是如何工作的?

这两种策略天然的互补,结合起来之后,定时删除策略就发生了一些改变,不在是每次扫描全部的 key 了,而是随机抽取一部分 key 进行检查,这样就降低了对 CPU 资源的损耗,惰性删除策略互补了为检查到的key,基本上满足了所有要求。但是有时候就是那么的巧,既没有被定时器抽取到,又没有被使用,这些数据又如何从内存中消失?没关系,还有内存淘汰机制,当内存不够用时,内存淘汰机制就会上场。Redis 内存淘汰机制有以下几种策略:

  • noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。(Redis 默认策略)

  • allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 Key。(推荐使用)

  • allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个 Key。

  • volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的 Key。这种情况一般是把 Redis 既当缓存,又做持久化存储的时候才用。

  • volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个 Key。

  • volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的 Key 优先移除。

修改内存淘汰机制只需要在 redis.conf 配置文件中配置 maxmemory-policy 参数即可。

5、如何解决 Redis 缓存穿透和缓存雪崩问题

缓存雪崩: 由于缓存层承载着大量请求,有效地 保护了存储层,但是如果缓存层由于某些原因不能提供服务,比如 Redis 节点挂掉了,热点 key 全部失效了,在这些情况下,所有的请求都会直接请求到数据库,可能会造成数据库宕机的情况。

预防和解决缓存雪崩问题,可以从以下三个方面进行着手:

  • 使用 Redis 高可用架构:使用 Redis 集群来保证 Redis 服务不会挂掉

  • 缓存时间不一致: 给缓存的失效时间,加上一个随机值,避免集体失效

  • 限流降级策略:有一定的备案,比如个性推荐服务不可用了,换成热点数据推荐服务

  • 加q群:478052716 免费领取(Java架构资料,视频资料,BATJ面试资料)

缓存穿透: 缓存穿透是指查询一个根本不存在的数据,这样的数据肯定不在缓存中,这会导致请求全部落到数据库上,有可能出现数据库宕机的情况。

预防和解决缓存穿透问题,可以考虑以下两种方法:

  • 缓存空对象: 将空值缓存起来,但是这样就有一个问题,大量无效的空值将占用空间,非常浪费。

  • 布隆过滤器拦截: 将所有可能的查询key 先映射到布隆过滤器中,查询时先判断key是否存在布隆过滤器中,存在才继续向下执行,如果不存在,则直接返回。布隆过滤器有一定的误判,所以需要你的业务允许一定的容错性。

“Redis有哪些高频面试题”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Redis有哪些高频面试题

本文链接: https://www.lsjlt.com/news/236429.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Redis有哪些高频面试题
    本篇内容介绍了“Redis有哪些高频面试题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、说说 Redis 都有哪些应用场景?缓存:这应该...
    99+
    2023-06-04
  • Redis高频面试题有哪些
    这篇文章将为大家详细讲解有关Redis高频面试题有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是RedisRedis(Remote Dictionary Ser...
    99+
    2024-04-02
  • Redis中有哪些高频面试题
    这篇文章将为大家详细讲解有关Redis中有哪些高频面试题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Redis 为什么这么快?很多人只知道是 K/V NoSQl 内存数...
    99+
    2024-04-02
  • Redis的高频面试题有哪些
    本篇内容主要讲解“Redis的高频面试题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redis的高频面试题有哪些”吧!1、说说 Redis 都有哪些应用...
    99+
    2024-04-02
  • Redis高频的面试题有哪些
    这篇文章主要介绍“Redis高频的面试题有哪些”,在日常操作中,相信很多人在Redis高频的面试题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis高频的面试题有...
    99+
    2024-04-02
  • 2021年有哪些Redis高频面试题
    本篇文章给大家分享的是有关2021年有哪些Redis高频面试题,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。面试官心理分析从面试官的角度分析,...
    99+
    2024-04-02
  • Python高频面试题有哪些
    本篇内容介绍了“Python高频面试题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一. Given an array of inte...
    99+
    2023-06-02
  • CSS高频面试题有哪些
    这篇文章主要讲解了“CSS高频面试题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS高频面试题有哪些”吧!一.什么是 BFC机制BFC(Block...
    99+
    2024-04-02
  • Python有哪些高频面试题
    本篇内容主要讲解“Python有哪些高频面试题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python有哪些高频面试题”吧!一. 将字符串 “k:1 |k1:2|k2:3|k3:4”,处理成字...
    99+
    2023-06-02
  • MySQL的高频面试题有哪些
    本篇内容介绍了“MySQL的高频面试题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.什么是关系型...
    99+
    2024-04-02
  • Python的高频面试题有哪些
    这篇文章主要讲解了“Python的高频面试题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python的高频面试题有哪些”吧!一. 如何提高爬取效率?爬虫下载慢主要原因是阻塞等待发往网...
    99+
    2023-06-02
  • Python有哪些高频的面试题
    这篇文章主要介绍“Python有哪些高频的面试题”,在日常操作中,相信很多人在Python有哪些高频的面试题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python有哪些高频的面试题”的疑惑有所帮助!接下来...
    99+
    2023-06-02
  • Python爬虫有哪些高频面试题
    这篇文章主要介绍“Python爬虫有哪些高频面试题”,在日常操作中,相信很多人在Python爬虫有哪些高频面试题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python爬虫有哪些高频面试题”的疑惑有所帮助!...
    99+
    2023-06-02
  • Redis面试题有哪些
    这篇文章给大家分享的是有关Redis面试题有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Redis 面试题1、什么是 RedisRedis 是完全开源免费的,遵守 BSD ...
    99+
    2024-04-02
  • Python爬虫高频率面试题有哪些
    本篇内容主要讲解“Python爬虫高频率面试题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python爬虫高频率面试题有哪些”吧!1 . Request中包含什么呢?1、请求方式:主要有...
    99+
    2023-06-02
  • 高频率Vue面试题及答案有哪些
    这篇文章主要介绍“高频率Vue面试题及答案有哪些”,在日常操作中,相信很多人在高频率Vue面试题及答案有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”高频率Vue面试题及答案有哪些”的疑惑有所帮助!接下来...
    99+
    2023-07-05
  • Redis的面试题有哪些
    这篇文章将为大家详细讲解有关Redis的面试题有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。缓存知识点缓存有哪些类型?缓存是高并发场景下提高热点数据访问性能的一个有...
    99+
    2024-04-02
  • 硬核 Redis 高频面试题解析
    目录1、Redis 是单线程还是多线程?2、为什么 Redis 是单线程?3、Redis 为什么使用单进程、单线程也很快4、Redis 在项目中的使用场景5、Redis 常见的数据结...
    99+
    2024-04-02
  • web前端高频知识点面试题有哪些
    今天小编给大家分享一下web前端高频知识点面试题有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。var、let、cons...
    99+
    2023-07-05
  • web前端高频面试题及答案有哪些
    这篇文章主要介绍了web前端高频面试题及答案有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇web前端高频面试题及答案有哪些文章都会有所收获,下面我们一起来看看吧。1.vue双向数据绑定的原理?mvvm场景...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作