redis面试考题,redis面试必会6题经典

  redis面试考题,redis面试必会6题经典

  2020年Redis面试问题汇总(30题带答案)

  这是整理的思维导图。跟大家分享一下吧。

  1.Redis是什么?简述其优缺点?(1)1)Redis的全称是:远程词典。服务器,本质上是一个键值类型的内存数据库,很像memcached。整个数据库加载到内存中运行,数据库数据定期通过异步操作刷新到硬盘。

  (2)因为是纯内存操作,Redis的性能非常出色。它每秒可以处理超过100,000次读写操作,是已知最快的键值DB。

  (Redis的优秀不仅仅是性能,它最大的魅力在于支持保存各种数据结构。另外,单个值的最大限制是1GB,不像memcached只能保存1MB的数据,所以Redis可以用来实现很多有用的功能。比如用his表做FIFO双向链表,实现轻量级高性能消息队列服务,用his集做高性能标签系统等等。

  (4)另外,Redis还可以为存储的Key-Value设置过期时间,所以也可以作为memcached的增强版。Redis的主要缺点是数据库容量受限于物理内存,无法用于海量数据的高性能读写。因此,Redis的适用场景主要局限于高性能运算和数据量较小的计算。

  2.Redis相比memcached有什么优势?(1)1)memcached的所有值都是简单的字符串,redis作为它的替代品,支持更丰富的数据类型。

  (2)redis比memcached快很多。redis比memcached快得多。

  (3)redis可以持久化其数据。redis可以持久化它的数据。

  3.Redis支持哪些数据类型?(1)字符串、列表、集合、有序集合、散列.

  4.Redis主要消耗哪些物理资源?(1)记忆。

  5.Redis有哪些类型的数据消除策略?(1)注意:当达到内存限制并且客户端试图执行将使用更多内存的命令时,返回错误。

  (2)allkeys-lru:尽量回收使用最少的密钥(lru),让新增的数据有空间存储。

  (3)volatile-lru:尽量回收使用最少的密钥(lru),但只回收过期集合中的密钥,让新添加的数据有空间存储。

  (4)allkeys-random:回收随机密钥,使新增的数据有空间存储。

  (5)volatile-random:回收随机密钥,使新增数据有空间存储,但只存储过期集合中的密钥。

  (6)volatile-ttl:回收过期集合中的密钥,优先回收ttl短的密钥,使新增的数据有空间存储。

  6.为什么Redis官方不提供Windows版本?(1)因为目前的Linux版本已经相当稳定,而且用户数量庞大,所以不需要开发windows版本,但是会带来兼容性等问题。

  7.字符串类型值的最大存储容量是多少?(1)512米.

  8.为什么Redis需要将所有数据放在内存中?(1)Redis为了达到最快的读写速度,将所有数据读入内存,并将数据异步写入磁盘。

  所以redis具有数据快速持久的特点。如果数据不存储在内存中,磁盘I/O速度会严重影响redis的性能。

  (2)在内存越来越便宜的今天,redis会越来越受欢迎。如果设置了最大已用内存,则在现有数据记录数达到内存限制后,无法插入新值。

  9.Redis集群方案应该怎么做?有什么计划?(1)codis

  (2)目前应用最广泛的集群方案,其效果与twemproxy基本相同,但支持在节点数量发生变化时,旧节点数据可以恢复到新的hash节点。

  Redis cluster3.0自带集群的特点是其分布式算法不是一致哈希,而是哈希槽的概念,自带支持节点设置从节点。详见官方文件。

  (3)在业务代码层,创建几个不相关的redis实例。在代码层,哈希键,然后去对应的redis实例操作数据。这种方法对hash层代码要求较高,考虑因素包括节点失效后的替代算法方案、数据冲击后的脚本自动恢复、实例监控等。欢迎Java工程师和工作一到五年的朋友加入Java高级架构学习交流:952124565,免费提供Java架构学习资料(包括高可用、高并发、高性能和分布式、Jvm性能调优、Spring源代码)。Myisnetty、Redis、Kafka、MySQL、Zookeeper、Tomcat、Docker、Dubbo、Nginx等知识点)

  合理利用自己的每一分每一秒来学习和提升自己。不要用‘没时间’来掩饰自己的懒惰!趁年轻,努力拼搏,以后给自己一个交代!

  10.Redis集群方案在什么情况下会使整个集群不可用?(1)具有三个节点A、B和C的群集,没有复制模型,如果节点B出现故障,则整个群集将被视为缺少5501-11000个范围内的插槽,并且不可用。

  11.MySQL有2000w数据,redis只有20w数据。如何保证redis中的数据都是热点数据?(1)当1)redis内存数据集的大小上升到一定大小时,就会实施数据消除策略。

  (2)其实除了在面试中考察Redis,很多公司都非常重视高并发和高可用技术,尤其是一线互联网公司。分布式、JVM、spring源代码分析、微服务等知识点。已经是面试中的必答题了。我自己搜集了一套系统化的架构技术体系,针对当前互联网公司的技术需求,结合主流技术。这些东西可能是你在工作中接触到的,但是缺乏全面系统的学习。获取免费结构信息。

  12.Redis有哪些适合的场景?(1)会话缓存(Session Cache)

  使用Redis最常用的场景是sessioncache。与其他存储(如Memcached)相比,使用Redis缓存会话的优势在于Redis提供了持久性。在维护一个不严格一致的缓存时,如果用户的购物车信息全部丢失,大多数人都会不高兴。现在,他们还会这样吗?

  幸运的是,随着这些年来Redis的改进,很容易发现如何正确使用Redis来缓存会话的文档。甚至知名商业平台Magento也为Redis提供插件。

  (2)整页缓存(FPC)

  除了基本的会话令牌,Redis还提供了一个非常简单的FPC平台。回到一致性问题,即使Redis实例重启,用户也不会因为磁盘持久化而看到页面加载速度的下降,这是很大的进步,类似于PHP原生FPC。再次以Magento为例。Magento提供了一个插件来使用Redis作为整页缓存后端。除此之外,对于WordPress用户来说,Pantheon有一个非常好的插件wp-redis,可以帮助你以最快的速度加载你浏览过的页面。

  (3)排队

  Reids在内存存储引擎领域的优势之一是提供了列表和集合操作,这使得Redis成为一个很好的消息队列平台。Redis作为队列的操作类似于本地编程语言(比如Python)对list的push/pop操作。

  如果你在Google中快速搜索“Redis queues”,你会立刻发现大量的开源项目。这些项目的目的是使用Redis创建非常好的后端工具,以满足各种队列需求。比如芹菜就有使用Redis做经纪人的背景。你可以在这里查看。

  (4)排行榜/计数器

  Redis可以很好地增加或减少内存中的数字。集合和有序集合也使我们执行这些操作变得非常简单。Redis正好提供了这两种数据结构。

  因此,我们希望从排序后的集合中获得前10名用户,我们称之为“user_scores ”,我们只需如下执行它:

  当然,这是假设你根据用户的分数进行递增排序。如果您想返回用户及其分数,您需要这样做:

  ZRANGE user_scores 0 10带分数

  Agora Games就是一个很好的例子,是用Ruby实现的。它的排行榜使用Redis存储数据,你可以在这里看到。

  (5)发布/订阅

  最后(但肯定不是最不重要的)是Redis的发布/订阅功能。发布/订阅的使用场景确实很多。我见过有人在社交网络连接中使用它,它也可以作为基于发布/订阅的脚本触发器,甚至使用Redis的发布/订阅功能来构建聊天系统!

  13.Redis支持的Java客户端有哪些?官方推荐哪个?雷迪森、杰迪斯、莴苣等。官方推荐是雷迪森。

  14.Redis和Redisson是什么关系?(1) like (Bloom Filter,Bitset,set,Set Multimap,ScoredSortedSet,SortedSet,map,ConcurrentMap,List,List Multimap,Queue,Blocking Queue,Semaphore,Lock,ReadWriteLock,AtomicLong,CountDownLatch,Publish/Subscribe,HyperLogLog).

  15.Jedis和Redisson相比有什么优缺点?(1)Jedis是Redis的Java实现的客户端,其API提供了对Redis命令的全面支持;Redisson实现了一个分布式和可扩展的Java数据结构。与Jedis相比,Redisson的功能更简单,不支持字符串操作、排序、事务、流水线、分区等Redis特性。Redisson的目的是促进用户对Redis的注意力分离,让用户更专注于业务逻辑。

  16.说说Redis的天真星月是什么概念?(1)Redis cluster不使用一致hash,而是引入了天真星和月亮的概念。Redis星团有16384颗天真的恒星和卫星。每个密钥通过CRC16检查后,需要取16,384的模数来决定放置哪个插槽。集群的每个节点负责一部分哈希槽。

  17.Redis集群的主从复制模式是什么?(1)为了使集群在部分节点失效或大部分节点无法通信时仍然可用,集群采用主从复制模式,每个节点会有N-1个副本。

  18.Redis集群中的写操作会丢失吗?为什么?(1)Redis不能保证数据的强一致性,这意味着在实际应用中,集群在一定条件下可能会丢失写操作。

  19.Redis集群是如何复制的?(1)异步复制。

  20.Redis集群的最大节点数是多少?(1) 16,384.

  21.Redis集群如何选择数据库?(1)Redis集群目前无法进行数据库选择,默认为0数据库。

  22.Redis中的管道有什么用?(1)一次性请求/响应服务器即使旧的请求没有得到响应,也可以处理新的请求,这样就可以向服务器发送多个命令,而不需要等待回复,最后一步就可以读取回复。这就是流水线衬砌,一种已经广泛使用了几十年的技术。例如,已经实现了许多POP3协议来支持该功能。

  是的,它大大加快了从服务器下载新邮件的速度。

  23.你如何理解Redis事务?(1)事务是一个独立的隔离操作:事务中的所有命令都将被序列化,并按顺序执行。在执行过程中,事务不会

  被来自其他客户端的命令请求中断。

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

  24.与Redis事务相关的命令有哪些?(1)多重、执行、丢弃、监视

  25.如何分别设置Redis密钥的过期时间和永久有效期?(1)终止和保留命令

  26.Redis如何优化内存?(1)尽可能使用哈希表。哈希表中使用的内存(也就是哈希表中存储的数字很小)很小,所以你要尽可能把你的数据模型抽象成一个哈希表。例如,在您的web系统中有一个用户对象。您应该将该用户的所有信息存储在一个哈希表中,而不是为该用户的姓名、姓氏、电子邮件地址和密码设置单独的密钥。

  27.Redis回收流程是如何工作的?(1)客户端运行新命令并添加新数据。

  热地检查内存使用情况,如果大于maxmemory的限制,将根据设置的策略进行回收。执行新的命令,等等。

  (2)所以我们不断地跨越记忆极限的边界,通过不断地到达边界,然后循环回到它之下。如果一个命令的结果导致大量内存被使用(例如,一个大集合的交集被保存到一个新的键),用不了多久,这个内存使用量就会超过内存限制。

  28.锁定机制(1)我们来看上图。现在需要锁定某个客户端。如果客户端面对的是Rediscoluster集群,他首先会根据hash节点选择一台机器。在这里,选择一台机器!这是至关重要的!然后,一个lua脚本将被发送到redis。lua脚本如下所示:

  为什么要用lua脚本?因为很多复杂的业务逻辑可以封装在lua脚本中并发送给redis,所以可以保证这种复杂业务逻辑执行的原子性。

  (2)那么,这个lua脚本是什么意思呢?这里KEYS[1]代表你锁定的钥匙,例如:rlock lock=redisson.getlock("我的锁");您在此设置的锁定键是“myLock”。

  (3)ARGV[1]表示锁密钥的默认生存期,默认为30秒。ARGV[2]表示被锁定客户端的I D,类似如下:8743 c9c 0-0795-4907-87FD-6 c 719 a6b 4586:1。第一个if判断语句是用“exists myLock”命令判断。

  (4)如果想要锁定的锁定键不存在,可以锁定。怎么锁?很简单,使用下面这个命令:HSET我的锁8743 c 9c 0-0795-4907-87FD-6 c 719 a6b 4586:1 1,通过这个命令设置一个哈希数据结构。执行此命令后,将出现类似于以下内容的数据结构:

  以上意味着客户端“8743 c9c 0-0795-4907-87FD-6 c 719 a6b 4586:1”已经完成了对锁定键“myLock”的锁定。然后,将执行命令“pexpire my lock 30000 ”, my lock密钥的生存期将设置为30秒。好了,就这样,好了,锁完成了。

  29.锁互斥机制(1)那么这个时候,如果客户端2来尝试锁,执行同一个lua脚本,会发生什么?很简单,第一个if判断会执行“exists myLock”,发现锁键myLock已经存在。接下来第二个if判断是判断myLock key的hash数据结构中是否包含client 2的ID,但显然不是,因为包含了client 1的ID。

  (2)因此,客户端2将获得由pttl myLock返回的数字,该数字表示锁密钥myLock的剩余寿命。例如,还有15000毫秒可以活。此时,客户端2将进入while循环,并继续尝试锁定。

  30 .看门狗自动扩展机制(1)客户端1锁定的lock键的默认生存期只有30秒。如果超过30秒,客户机1仍然希望保持这个锁。我该怎么办?

  简单!

  只要客户端1锁定成功,就会启动watch dog看门狗,看门狗是后台线程,每10秒检查一次。如果客户端1仍然持有锁定密钥,它将继续延长锁定密钥的寿命。

  最后总结一下:最新的2020一线互联网公司面试问题收集的干货很多,有netty,spring,thread,spring(都整理成文档)。

  云等详细讲解,还有详细的学习计划,面试问题等。感觉这部分面试很清楚,可以问我。

redis面试考题,redis面试必会6题经典