最近梳理2021最新 Redis面试题【附答案解析】,包含了 Java基础、并发、JVM、数据库、Spring、SpringMVC、Redis、SpringCloud、设计模式、MQ、Linux、Redis等多个类型。

今天这篇是关于 Redis,总结了 110 道经典问题。

这套Redis面试题大全,希望对大家有帮助哈~

博主已将以下这些面试题整理成了一个Redis面试手册,是PDF版的

1、一个Redis实例最多能存放多少的keys?List、Set、Sorted Set他们最多能存放多少元素?

理论上Redis可以处理多达232的keys,并且在实际中进行了测试,每个实例至少存放了2亿5千万的keys。我们正在测试一些较大的值。任何list、set、和sorted set都可以放232个元素。换句话说,Redis的存储极限是系统中的可用内存值。

2、为什么要做Redis分区?

分区可以让Redis管理更大的内存,Redis将可以使用所有机器的内存。如果没有分区,你最多只能使用一台机器的内存。分区使Redis的计算能力通过简单地增加计算机得到成倍提升,Redis的网络带宽也会随着计算机和网卡的增加而成倍增长。

3、定时删除

优点:对内存友好,定时删除策略可以保证过期键会尽可能快地被删除,并释放国期间所占用的内存

缺点:对cpu时间不友好,在过期键比较多时,删除任务会占用很大一部分cpu时间,在内存不紧张但cpu时间紧张的情况下,将cpu时间用在删除和当前任务无关的过期键上,影响服务器的响应时间和吞吐量

4、怎么理解Redis事务?

事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

5、什么是Redis?

Redis本质上是一个Key-Value类型的内存数据库,很像Memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。

Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 Memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高性能的tag系统等等。另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一 个功能加强版的Memcached来用。

Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。

6、Redis分布式锁实现

先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放。如果在setnx之后执行expire之前进程意外crash或者要重启维护了,那会怎么样?set指令有非常复杂的参数,这个应该是可以同时把setnx和expire合成一条指令来用的!

7、Redis做异步队列

一般使用list结构作为队列,rpush生产消息,lpop消费消息。当lpop没有消息的时候,要适当sleep一会再重试。缺点:在消费者下线的情况下,生产的消息会丢失,得使用专业的消息队列如rabbitmq等。能不能生产一次消费多次呢?使用pub/sub主题订阅者模式,可以实现1:N的消息队列。

8、Reids常用5种数据类型

string,list,set,sorted set,hash

9、Redis 事务相关的命令有哪几个?

MULTI、EXEC、DISCARD、WATCH

10、WATCH命令和基于CAS的乐观锁:

在Redis的事务中,WATCH命令可用于提供CAS(check-and-set)功能。假设我们通过WATCH命令在事务执行之前监控了多个Keys,倘若在WATCH之后有任何Key的值发生了变化,EXEC命令执行的事务都将被放弃,同时返回Null multi-bulk应答以通知调用者事务

执行失败。例如,我们再次假设Redis中并未提供incr命令来完成键值的原子性递增,如果要实现该功能,我们只能自行编写相应的代码。其伪码如下:

val = GET mykey val = val + 1 SET mykey $val

以上代码只有在单连接的情况下才可以保证执行结果是正确的,因为如果在同一时刻有多个客户端在同时执行该段代码,那么就会出现多线程程序中经常出现的一种错误场景--竞态争用(race condition)。

比如,客户端A和B都在同一时刻读取了mykey的原有值,假设该值为10,此后两个客户端又均将该值加一后set回Redis服务器,这样就会导致mykey的结果为11,而不是我们认为的12。为了解决类似的问题,我们需要借助WATCH命令的帮助,见如下代码:

WATCH mykey val = GET mykey val = val + 1 MULTI SET mykey $val EXEC

和此前代码不同的是,新代码在获取mykey的值之前先通过WATCH命令监控了该键,此后又将set命令包围在事务中,这样就可以有效的保证每个连接在执行EXEC之前,如果当前连接获取的mykey的值被其它连接的客户端修改,那么当前连接的EXEC命令将执行失败。这样调用者在判断返回值后就可以获悉val是否被重新设置成功。

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

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

12、Redis 过期键的删除策略?

1、 定时删除:在设置键的过期时间的同时,创建一个定时器 timer). 让定时器在键的过期时间来临时, 立即执行对键的删除操作。

12、 惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是 否过期, 如果过期的话, 就删除该键;如果没有过期, 就返回该键。

13、 定期删除:每隔一段时间程序就对数据库进行一次检查,删除里面的过期键。至 于要删除多少过期键, 以及要检查多少个数据库, 则由算法决定。

13、mySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据

相关知识:Redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略(回收策略)。

14、Redis key的过期时间和永久有效分别怎么设置?

EXPIRE和PERSIST命令。

15、请用Redis和任意语言实现一段恶意登录保护的代码,

限制1小时内每用户Id最多只能登录5次。具体登录函数或功能用空函数即可,不用详细写出。

用列表实现:列表中每个元素代表登陆时间,只要最后的第5次登陆时间和现在时间差不超过1小时就禁止登陆.用Python写的代码如下:

#!/usr/bin/env python3 import Redis import sys import time r = Redis.StrictRedis(host=’127.0.0.1′, port=6379, db=0) try: id = sys.argv[1] except: print(‘input argument error’) sys.exit(0) if r.llen(id) >= 5 and time.time() – float(r.lindex(id, 4)) <= 3600: print(“you are forbidden logining”) else: print(‘you are allowed to login’) r.lpush(id, time.time()) # login_func()

16、,或是关注

17、怎么理解Redis事务?

事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

18、Redis key 的过期时间和永久有效分别怎么设置?

EXPIRE 和 PERSIST 命令。

19、Redis中海量数据的正确操作方式

利用SCAN系列命令(SCAN、SSCAN、HSCAN、ZSCAN)完成数据迭代。

20、什么是Redis?简述它的优缺点?

Redis的全称是:Remote Dictionary.Server,本质上是一个Key-Value类型的内存数据库,很像Memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。

因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。

Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 Memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能。

比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高性能的tag系统等等。

另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一 个功能加强版的Memcached来用。 Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。

21、为什么 edis 需要把所有数据放到内存中?

Redis 为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以 Redis 具有快速和数据持久化的特征。如果不将数据放在内存中, 磁盘 I/O 速度为严重影响 Redis 的性能。在内存越来越便宜的今天, Redis 将会越来越受欢迎。如果设置了最大使用的内存, 则数据已有记录数达到内存限值后不能继续插入新值。

22、MySQL里有2000w数据,Redis中只存20w的数据

如何保证Redis中的数据都是热点数据?

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

其实面试除了考察Redis,不少公司都很重视高并发高可用的技术,特别是一线互联网公司,分布式、JVM、spring源码分析、微服务等知识点已是面试的必考题。我自己整理收集了一套系统的架构技术体系,针对当前互联网公司的技术需求以及结合主流技术,这些东西可能你们平时在工作中接触过,但是缺少的全面系统的学习,加入

23、Reids6种淘汰策略:

noeviction: 不删除策略, 达到最大内存限制时, 如果需要更多内存, 直接返回错误信息。大多数写命令都会导致占用更多的内存(有极少数会例外。

**allkeys-lru:**所有key通用; 优先删除最近最少使用(less recently used ,LRU) 的 key。

**volatile-lru:**只限于设置了 expire 的部分; 优先删除最近最少使用(less recently used ,LRU) 的 key。

**allkeys-random:**所有key通用; 随机删除一部分 key。

volatile-random: 只限于设置了 expire 的部分; 随机删除一部分 key。

volatile-ttl: 只限于设置了 expire 的部分; 优先删除剩余时间(time to live,TTL) 短的key。

24、Redis还提供的高级工具

像慢查询分析、性能测试、Pipeline、事务、Lua自定义命令、Bitmaps、HyperLogLog、/订阅、Geo等个性化功能。

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

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

26、Redis 集群方案什么情况下会导致整个集群不可用?

有 A, B, C 三个节点的集群,在没有复制模型的情况下,如果节点 B 失败了, 那么整个集群就会以为缺少 5501-11000 这个范围的槽而不可用。

27、Redis 的内存用完了会发生什么?

如果达到设置的上限,Redis 的写命令会返回错误信息( 但是读命令还可以正常返回。) 或者你可以将 Redis 当缓存来使用配置淘汰机制, 当 Redis 达到内存上限时会冲刷掉旧的内容。

28、删除key

del key1 key2 ...

29、Redis集群最大节点个数是多少?

16384个。

30、Redis 到底是怎么实现“附近的人”

GEOADD key longitude latitude member [longitude latitude member ...]

将给定的位置对象(纬度、经度、名字)添加到指定的key。其中,key为集合名称,member为该经纬度所对应的对象。在实际运用中,当所需存储的对象数量过多时,可通过设置多key(如一个省一个key)的方式对对象集合变相做sharding,避免单集合数量过多。

成功插入后的返回值:

(integer) N

其中N为成功插入的个数。

Redis 面试题更多70道

01、Redis集群方案应该怎么做?都有哪些方案?

02、Reids支持的语言:

03、怎么测试Redis的连通性?

04、Redis 集群会有写操作丢失吗?为什么?

05、Redis回收使用的是什么算法?

06、Redis的并发竞争问题如何解决?

07、AOF常用配置总结

08、Redis 管道 Pipeline

09、微信公众号:Java资讯库,回复“架构”

10、Redis集群方案什么情况下会导致整个集群不可用?

11、一个Redis实例最多能存放多少的keys?List、Set、Sorted Set他们最多能存放多少元素?

12、为什么要做Redis分区?

13、定时删除

14、怎么理解Redis事务?

15、什么是Redis?

16、Redis分布式锁实现

17、Redis做异步队列

18、Reids常用5种数据类型

19、Redis 事务相关的命令有哪几个?

20、WATCH命令和基于CAS的乐观锁:

21、Redis集群最大节点个数是多少?

22、Reids的特点

23、Redis最适合的场景?

24、使用Redis有哪些好处?

25、为什么edis需要把所有数据放到内存中?

26、Redis的内存用完了会发生什么?

27、Redis 的回收策略(淘汰策略)

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

29、Memcached 与Redis 的区别?

30、Redis 常见性能问题和解决方案:

31、为什么Redis需要把所有数据放到内存中?

32、查看Redis使用情况及状态信息用什么命令?

34、修改配置不重启Redis会实时生效吗?

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

36、缓存并发问题

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

38、Reids主从复制

39、Redis与Memcached相比有哪些优势?

40、Redis 最适合的场景?

41、为什么 edis 需要把所有数据放到内存中?

42、MySQL里有2000w数据,Redis中只存20w的数据

43、Reids6种淘汰策略:

44、Redis还提供的高级工具

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

46、Redis 集群方案什么情况下会导致整个集群不可用?

47、Redis 的内存用完了会发生什么?

48、删除key

49、Redis集群最大节点个数是多少?

50、Redis 到底是怎么实现“附近的人”

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

52、Redis 过期键的删除策略?

53、mySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据

54、Redis key的过期时间和永久有效分别怎么设置?

55、请用Redis和任意语言实现一段恶意登录保护的代码,

56、,或是关注

57、怎么理解Redis事务?

58、Redis key 的过期时间和永久有效分别怎么设置?

59、Redis中海量数据的正确操作方式

60、什么是Redis?简述它的优缺点?

61、为什么 edis 需要把所有数据放到内存中?

62、MySQL里有2000w数据,Redis中只存20w的数据

63、Reids6种淘汰策略:

64、Redis还提供的高级工具

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

66、Redis 集群方案什么情况下会导致整个集群不可用?

67、Redis 的内存用完了会发生什么?

68、删除key

69、Redis集群最大节点个数是多少?

70、Redis 到底是怎么实现“附近的人”

这套Redis面试题大全,希望对大家有帮助哈~

博主已将以下这些面试题整理成了一个Redis面试手册,是PDF版的

Redis面试题及答案(2021年Redis面试题大全带答案)相关推荐

  1. Jvm面试题及答案整理 271道,Jvm面试题大全带答案(2021最新版)

    Jvm面试题及答案整理 271道,Jvm面试题大全带答案(2021最新版) Jvm面试题及答案[最新版]Jvm高级面试题大全(2021版),发现网上很多Jvm面试题及答案整理都没有答案,所以花了很长时 ...

  2. Java面试题大全带答案 110道(持续更新)

    本人发现网上虽然有不少Java面试题大全带答案,但第一未必全,第二未必有答案,第三虽然有答案,但未必能在面试中说,所以在本文里,会不断收集各种面试题,并站在面试官的立场上,给出我自己的答案 如果不背 ...

  3. Java面试题大全带答案110道(持续更新)

    [Java面试题大全带答案 110道(持续更新)] 本人发现网上虽然有不少Java面试题大全带答案,但第一未必全,第二未必有答案,第三虽然有答案,但未必能在面试中说,所以在本文里,会不断收集各种面试题 ...

  4. Java面试题大全带答案 40道

    本人发现网上虽然有不少Java面试题大全带答案,但第一未必全,第二未必有答案,第三虽然有答案,但未必能在面试中说,所以在本文里,会不断收集各种面试题,并站在面试官的立场上,给出我自己的答案 如果不背 ...

  5. Jvm面试题及答案(300道 Jvm面试题大全带答案)

    最新Jvm面试题及答案[附答案解析]Jvm面试题大全带答案,Jvm面试题最新面试题,Jvm面试题新答案已经全部更新完了,有些答案是自己总结的,也有些Jvm面试题答案是在网上搜集整理的.这些答案难免会存 ...

  6. java笔试题大全带答案_java笔试题大全带答案经典11题

    java笔试题大全带答案(经典11题) 1.不通过构造函数也能创建对象吗() A. 是 B. 否 分析:答案:A Java创建对象的几种方式(重要): (1) 用new语句创建对象,这是最常见的创建对 ...

  7. Android面试题及答案整理(2022年最新Android面试题大全带答案)

    Android面试题及答案(2022年最新Android面试题大全带答案),发现网上很多Android面试题整理都没有答案,所以花了很长时间搜集,本套Android面试题大全,Android面试题大汇 ...

  8. 011235813用java写出来_C 编程练习题大全(带答案)

    以下为<C 编程练习题大全(带答案)>的无排版文字预览,完整格式请下载 下载前请仔细阅读文字预览以及下方图片预览.图片预览是什么样的,下载的文档就是什么样的. 一.简单问题: 5. 编程计 ...

  9. Spring面试题及答案(2021年Spring面试题大全带答案)

    最近梳理2021最新 Spring 面试题 全家桶[附答案解析],包含了 Java基础.Spring.SpringMVC.Redis.SpringCloud.设计模式.等多个类型. 今天这篇是关于 S ...

最新文章

  1. Windows VMware中Ubuntu与宿主共享文件夹
  2. debian宝塔界面安装php失败,宝塔面板安装遇到的问题
  3. java web六:tomcat其他小问题
  4. matlab储备池算法,储备池计算概述.pdf
  5. 福大软工1816 · 第二次作业 - 个人项目
  6. 哈工大人工智能作业一_想从事人工智能行业,考研选什么专业对口?
  7. mysql udf提权_三分钟解析postgresql提权
  8. 系统学习深度学习(四十一)--AlphaGo Zero强化学习原理
  9. 2018年终总结以及未来展望
  10. Python 好友管理系统【简单易懂,代码可以直接运行】
  11. 测试手机游戏平均帧率软件,想测试手机游戏帧率吗?最Skr帧率测试步骤都在这里!...
  12. Arcgis学习视频
  13. Wker_SQLTool注入工具(附源码)
  14. Markdown流程图实用工具汇总Obsidian+excalidraw
  15. Python 复数类型(详解)
  16. 铁流:浪潮思科合资,高通中国设厂背后有什么故事
  17. Kali google 翻译
  18. WinInet进阶:发送邮件
  19. 国家VR/AR扶持政策文件一览(多文件下载)
  20. hdoj 2199 Can you solve this equation? 【二分枚举】

热门文章

  1. 购袖珍电子计算机笔记本,袖珍笔记本电脑制作教程
  2. 怎么设计自己的博客园个人首页
  3. css 如何ie7 兼容性问题,CSS对浏览器的兼容性性处理(IE7,6与Fireofx)
  4. 关于Qt中线程的挂起和唤醒问题
  5. 做网站的优化,从mate做起
  6. 【新品】高速大数据最新应用——全国首个非营运货车风险评估助手上线!
  7. 强化学习の学习笔记(一)——多臂老虎机、ε-greedy策略、乐观初始值、增量式实现、梯度赌博机
  8. 前端开发学习之【AJAX】
  9. Redis 实现 发布/订阅 消息对列
  10. 华为畅享8plus停产了吗_为什么华为畅享8Plus不值得购买?本文告诉你答案!