Redis有哪些数据结构?

字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。

如果你是Redis中高级用户,还需要加上下面几种数据结构HyperLogLog、Geo、Pub/Sub。

如果你说还玩过Redis Module,像BloomFilter,RedisSearch,Redis-ML,面试官得眼睛就开始发亮了。

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

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

这时候对方会告诉你说你回答得不错,然后接着问如果在setnx之后执行expire之前进程意外crash或者要重启维护了,那会怎么样?

这时候你要给予惊讶的反馈:唉,是喔,这个锁就永远得不到释放了。紧接着你需要抓一抓自己得脑袋,故作思考片刻,好像接下来的结果是你主动思考出来的,然后回答:我记得set指令有非常复杂的参数,这个应该是可以同时把setnx和expire合成一条指令来用的!对方这时会显露笑容,心里开始默念:摁,这小子还不错。

假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如果将它们全部找出来?

使用keys指令可以扫出指定模式的key列表。

对方接着追问:如果这个redis正在给线上的业务提供服务,那使用keys指令会有什么问题?

这个时候你要回答redis关键的一个特性:redis的单线程的。keys指令会导致线程阻塞一段时间,线上服务会停顿,直到指令执行完毕,服务才能恢复。这个时候可以使用scan指令,scan指令可以无阻塞的提取出指定模式的key列表,但是会有一定的重复概率,在客户端做一次去重就可以了,但是整体所花费的时间会比直接用keys指令长。

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

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

如果对方追问可不可以不用sleep呢?list还有个指令叫blpop,在没有消息的时候,它会阻塞住直到消息到来。

如果对方追问能不能生产一次消费多次呢?使用pub/sub主题订阅者模式,可以实现1:N的消息队列。

如果对方追问pub/sub有什么缺点?在消费者下线的情况下,生产的消息会丢失,得使用专业的消息队列如rabbitmq等。

如果对方追问redis如何实现延时队列?我估计现在你很想把面试官一棒打死如果你手上有一根棒球棍的话,怎么问的这么详细。但是你很克制,然后神态自若的回答道:使用sortedset,拿时间戳作为score,消息内容作为key调用zadd来生产消息,消费者用zrangebyscore指令获取N秒之前的数据轮询进行处理。

到这里,面试官暗地里已经对你竖起了大拇指。但是他不知道的是此刻你却竖起了中指,在椅子背后。

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

如果大量的key过期时间设置的过于集中,到过期的那个时间点,redis可能会出现短暂的卡顿现象。一般需要在时间上加一个随机值,使得过期时间分散一些。

Redis如何做持久化的?

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

对方追问那如果突然机器掉电会怎样?取决于aof日志sync属性的配置,如果不要求性能,在每条写指令时都sync一下磁盘,就不会丢失数据。但是在高性能的要求下每次都sync是不现实的,一般都使用定时sync,比如1s1次,这个时候最多就会丢失1s的数据。

对方追问bgsave的原理是什么?你给出两个词汇就可以了,fork和cow。fork是指redis通过创建子进程来进行bgsave操作,cow指的是copy on write,子进程创建后,父子进程共享数据段,父进程继续提供读写服务,写脏的页面数据会逐渐和子进程分离开来。

Pipeline有什么好处,为什么要用pipeline?

可以将多次IO往返的时间缩减为一次,前提是pipeline执行的指令之间没有因果相关性。使用redis-benchmark进行压测的时候可以发现影响redis的QPS峰值的一个重要因素是pipeline批次指令的数目。

Redis的同步机制了解么?

Redis可以使用主从同步,从从同步。第一次同步时,主节点做一次bgsave,并同时将后续修改操作记录到内存buffer,待完成后将rdb文件全量同步到复制节点,复制节点接受完成后将rdb镜像加载到内存。加载完成后,再通知主节点将期间修改的操作记录同步到复制节点进行重放就完成了同步过程。

是否使用过Redis集群,集群的原理是什么?

Redis Sentinal着眼于高可用,在master宕机时会自动将slave提升为master,继续提供服务。

Redis Cluster着眼于扩展性,在单个redis内存不足时,使用Cluster进行分片存储。

edis面试刁难大全相关推荐

  1. 天下无难试之Redis面试刁难大全「原创」

    Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行各种刁难.作为一名在互联网技术行业打击过成百上千名[请允许我夸张一下]的资深技术面试官 ...

  2. Redis面试刁难大全

    Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行各种刁难.作为一名在互联网技术行业打击过成百上千名[请允许我夸张一下]的资深技术面试官 ...

  3. [转]英语口语面试问答大全

    [转]英语口语面试问答大全 面试中面对外国老板连珠炮似的提问, 有没有觉得心慌意乱.无所适从?求职过程中面试尤为重要,回答问题,如果能简明扼要,真诚中肯,合乎老外口味,那么录取机会必定大大增加.当然, ...

  4. 发布本人整理的面试问题大全,为准备找工作的同行们尽一份力 希望大家多补充或回答

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 主 题:  发布本 ...

  5. 发布本人整理的面试问题大全,为准备找工作的同行们尽一份力!希望大家多补充或回答!

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 主 题: ...

  6. 2020面试要点大全

    2020年面试总结,下面主要是面试要点,感觉面试就是按照套路来的,万变不离其宗,掌握这些就没问题. 1.Java基础 Java常用锁 Java反射详解 Java提高equals()与hashCode( ...

  7. 前端面试知识点大全——浏览器篇

    总纲:前端面试知识点大全 目录 1.浏览器工作原理 2.浏览器如何解析css,如何渲染css的 2.1 构建DOM树 2.2 构建CSSOM规则树(就是css规则树) 2.3 渲染阻塞 2.4 构建渲 ...

  8. JAVA工程师面试题目大全_绝对值得看

    JAVA工程师面试题目大全 一.单选题 1.下列哪种说法是正确的( D) A)实例方法可直接调用超类的实例方法 B)实例方法可直接调用超类的类方法 C)实例方法可直接调用其他类的实例方法 D)实例方法 ...

  9. 面试刁难题——你有哪些缺点?

     面试刁难题--你有哪些缺点? 参加招聘面试,最怕考官提些让人"无从下口"的问题,像"你有哪些缺点?",就是典型的面试难题.对这个问题,可以把自己的优点当成缺点 ...

最新文章

  1. 打盹模式 android,android – 在打盹模式下获取位置更新
  2. JavaFX 中的像素、分辨率与缩放比
  3. (十)Spring 与 MVC 框架整合
  4. 【LeetCode】【HOT】301. 删除无效的括号(递归)
  5. 图像模式识别与计算机视觉的,图像处理、计算机视觉和模式识别领域有哪些区别和联系...
  6. Android UI--自定义ListView(实现下拉刷新+加载更多)
  7. 类的加载过程详解之过程一:Loading(加载)阶段
  8. Git查询一定时间范围团队代码提交日志
  9. c语言课程总结3000字,单片机课程设计心得体会范文3000字
  10. WPF应用无法使用Snoop分析的解决办法
  11. 如何在ps软件中查看图片的透明度
  12. 服务器主板能配固态硬盘吗,旧主板洗洗还能用、Z490主板搭配PCIe4.0固态硬盘 测试...
  13. oracle auto failover,dg设置auto failover
  14. 360篡改Edge、Google浏览器主页的应对方法
  15. 1.性能测试项目实战
  16. 海外英语杂志海外英语杂志社海外英语编辑部2022年第8期目录
  17. SWUST OJ492: 荷兰国旗问题
  18. excel数据透视表中插入一列新数据
  19. 论文笔记《Fully Convolutional Networks for Semantic Segmentation》
  20. CMeKG代码解读(以项目为导向从零开始学习知识图谱)(一)

热门文章

  1. __sprintf_chk’ may write a terminating nul past the end of the destination [-Wformat-overflow=]报警解决
  2. 浅谈CCD工业相机主要类型有哪些
  3. 太阳系尺的拟合应用原理及方法的探讨
  4. 微信小程序实现课程表实例及部署教程
  5. Libra会颠覆金融与加密世界吗?
  6. OM | 具有弹性需求的广义随机共乘(拼车)用户均衡问题
  7. Python 彩色图转换成素描图(灰度图)
  8. 算法练习题40---蓝桥杯2021模拟赛“受伤的皇后”
  9. LCD液晶屏的驱动方式
  10. 老程序员的辛酸,猛投简历半年无果