在网上看到Redis面试题及答案,但是没有给出答案,之前我也在寻找这份Redis面试题的答案,今天特地把答案分享出来。

花了大量时间整理了这套Redis面试题及答案,希望对大家有帮助哈~

弄明白了这些Redis面试题基本上就可以成为面霸了,吊打面试官,哈哈~

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

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

1、Redis 开启AOF

Redis服务器默认开启RDB,关闭AOF;要开启AOF,需要在配置文件中配置:

appendonly yes

2、Redis集群的主从复制模型是怎样的?

为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,所以集群使用了主从复制模型,每个节点都会有N-1个复制品.

3、Redis相比Memcached有哪些优势?

1、 Memcached所有的值均是简单的字符串,Redis作为其替代者,支持更为丰富的数据类

2、 Redis的速度比Memcached快很

3、 Redis可以持久化其数据

4、什么是Redis?

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

1、 Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

2、 Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

3、 Redis支持数据的备份,即master-slave模式的数据备份。

Redis 优势

1、 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。

2、 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。

3、 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。

4、 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis与其他key-value存储有什么不同?

Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

5、Redis相比Memcached有哪些优势?

1、 Memcached所有的值均是简单的字符串,Redis作为其替代者,支持更为丰富的数据类型

2、 Redis的速度比Memcached快很多

3、 Redis可以持久化其数据

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

使用 ping 命令。

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

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

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

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

8、Redis对象有5种类型

无论是哪种类型,Redis都不会直接存储,而是通过RedisObject对象进行存储。

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

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

10、Redis事物的了解CAS(check-and-set 操作实现乐观锁 )?

和众多其它数据库一样,Redis作为NoSQL数据库也同样提供了事务机制。在Redis中,MULTI/EXEC/DISCARD/WATCH这四个命令是我们实现事务的基石。

相信对有关系型数据库开发经验的开发者而言这一概念并不陌生,即便如此,我们还是会简要的列出Redis中事务的实现特征:

1、 在事务中的所有命令都将会被串行化的顺序执行,事务执行期间,Redis不会再为其它客户端的请求提供任何服务,从而保证了事物中的所有命令被原子的执行。

2、 和关系型数据库中的事务相比,在Redis事务中如果有某一条命令执行失败,其后的命令仍然会被继续执行。

3、 我们可以通过MULTI命令开启一个事务,有关系型数据库开发经验的人可以将其理解为"BEGIN TRANSACTION"语句。在该语句之后执行的命令都将被视为事务之内的操作,最后我们可以通过执行EXEC/DISCARD命令来提交/回滚该事务内的所有操作。这两个Redis命令可被视为等同于关系型数据库中的COMMIT/ROLLBACK语句。

4、 在事务开启之前,如果客户端与服务器之间出现通讯故障并导致网络断开,其后所有待执行的语句都将不会被服务器执行。然而如果网络中断事件是发生在客户端执行EXEC命令之后,那么该事务中的所有命令都会被服务器执行。

5、 当使用Append-Only模式时,Redis会通过调用系统函数write将该事务内的所有写操作在本次调用中全部写入磁盘。然而如果在写入的过程中出现系统崩溃,如电源故障导致的宕机,那么此时也许只有部分数据被写入到磁盘,而另外一部分数据却已经丢失。

Redis服务器会在重新启动时执行一系列必要的一致性检测,一旦发现类似问题,就会立即退出并给出相应的错误提示。

此时,我们就要充分利用Redis工具包中提供的Redis-check-aof工具,该工具可以帮助我们定位到数据不一致的错误,并将已经写入的部分数据进行回滚。修复之后我们就可以再次重新启动Redis服务器了。

11、都有哪些办法可以降低 Redis 的内存使用情况呢?

如果你使用的是 32 位的 Redis 实例,可以好好利用 Hash,list,sorted set,set 等集合类型数据, 因为通常情况下很多小的 Key-Value 可以用更紧凑的方式存放到一起。

12、Redis有哪些适合的场景?

会话缓存(Session Cache)

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

幸运的是,随着 Redis 这些年的改进,很容易找到怎么恰当的使用Redis来缓存会话的文档。甚至广为人知的商业平台Magento也提供Redis的插件。

全页缓存(FPC)

除基本的会话token之外,Redis还提供很简便的FPC平台。回到一致性问题,即使重启了Redis实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似PHP本地FPC。

再次以Magento为例,Magento提供一个插件来使用Redis作为全页缓存后端。

此外,对WordPress的用户来说,Pantheon有一个非常好的插件wp-Redis,这个插件能帮助你以最快速度加载你曾浏览过的页面。

队列

Reids在内存存储引擎领域的一大优点是提供list和set操作,这使得Redis能作为一个很好的消息队列平台来使用。Redis作为队列使用的操作,就类似于本地程序语言(如Python)对 list 的 push/pop 操作。

如果你快速的在Google中搜索“Redis queues”,你马上就能找到大量的开源项目,这些项目的目的就是利用Redis创建非常好的后端工具,以满足各种队列需求。例如,Celery有一个后台就是使用Redis作为broker,你可以从这里去查看。

排行榜/计数器

Redis在内存中对数字进行递增或递减的操作实现的非常好。集合(Set)和有序集合(SortedSet)也使得我们在执行这些操作的时候变的非常简单,Redis只是正好提供了这两种数据结构。

所以,我们要从排序集合中获取到排名最靠前的10个用户–我们称之为“user_scores”,我们只需要像下面一样执行即可:

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

ZRANGE user_scores 0 10 WITHSCORES

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

发布/订阅

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

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

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

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

14、Redis如何做内存优化?

尽可能使用散列表(hashes),散列表(是说散列表里面存储的数少)使用的内存非常小,所以你应该尽可能的将你的数据模型抽象到一个散列表里面。比如你的web系统中有一个用户对象,不要为这个用户的名称,姓氏,邮箱,密码设置单独的key,而是应该把这个用户的所有信息存储到一张散列表里面.

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

1、 twemproxy,大概概念是,它类似于一个代理方式,使用方法和普通Redis无任何区别,设置好它下属的多个Redis实例后,使用时在本需要连接Redis的地方改为连接twemproxy,它会以一个代理的身份接收请求并使用一致性hash算法,将请求转接到具体Redis,将结果再返回twemproxy。使用方式简便(相对Redis只需修改连接端口),对旧项目扩展的首选。 问题:twemproxy自身单端口实例的压力,使用一致性hash后,对Redis节点数量改变时候的计算值的改变,数据无法自动移动到新的节点。

2、 codis,目前用的最多的集群方案,基本和twemproxy一致的效果,但它支持在 节点数量改变情况下,旧节点数据可恢复到新hash节点。

3、 Redis cluster3.0自带的集群,特点在于他的分布式算法不是一致性hash,而是hash槽的概念,以及自身支持节点设置从节点。具体看官方文档介绍。

4、 在业务代码层实现,起几个毫无关联的Redis实例,在代码层,对key 进行hash计算,然后去对应的Redis实例操作数据。 这种方式对hash层代码要求比较高,考虑部分包括,节点失效后的替代算法方案,数据震荡后的自动脚本恢复,实例的监控,等等。

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

使用ping命令。

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

Redis为单进程单线程模式,采用队列模式将并发访问变为串行访问。Redis本身没有锁的概念,Redis对于多个客户端连接并不存在竞争,但是在Jedis客户端对Redis进行并发访问时会发生连接超时、数据转换错误、阻塞、客户端关闭连接等问题,这些问题均是由于客户端连接混乱造成。

对此有2种解决方法:

1、 客户端角度,为保证每个客户端间正常有序与Redis进行通信,对连接进行池化,同时对客户端读写Redis操作采用内部锁synchronized。

2、 服务器角度,利用setnx实现锁。

注:对于第一种,需要应用程序自己处理资源的同步,可以使用的方法比较通俗,可以使用synchronized也可以使用lock;第二种需要用到Redis的setnx命令,但是需要注意一些问题。

18、使用Redis 有哪些好处?

1、 速度快, 因为数据存在内存中, 类似于 HashMap, HashMap 的优势就是查找和操作的时间复杂度都是 O1)

2、 支持丰富数据类型, 支持 string, list, set, Zset, hash 等

3、 支持事务, 操作都是原子性, 所谓的原子性就是对数据的更改要么全部执行, 要么全部不执行

4、 丰富的特性:可用于缓存,消息,按 key 设置过期时间,过期后将会自动删除

19、Redis回收进程如何工作的?

一个客户端运行了新的命令,添加了新的数据。Redi检查内存使用情况,如果大于maxmemory的限制, 则根据设定好的策略进行回收。一个新的命令被执行,等等。所以我们不断地穿越内存限制的边界,通过不断达到边界然后不断地回收回到边界以下。如果一个命令的结果导致大量内存被使用(例如很大的集合的交集保存到一个新的键),不用多久内存限制就会被这个内存使用量超越。

20、Redis最适合的场景?

1、 会话缓存(Session Cache)

最常用的一种使用Redis的情景是会话缓存(session cache)。用Redis缓存会话比其他存储(如Memcached)的优势在于:Redis提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的购物车信息全部丢失,大部分人都会不高兴的,现在,他们还会这样吗? 幸运的是,随着 Redis 这些年的改进,很容易找到怎么恰当的使用Redis来缓存会话的文档。甚至广为人知的商业平台Magento也提供Redis的插件。

2、 全页缓存(FPC)

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

3、队列

Reids在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得Redis能作为一个很好的消息队列平台来使用。Redis作为队列使用的操作,就类似于本地程序语言(如Python)对 list 的 push/pop 操作。 如果你快速的在Google中搜索“Redis queues”,你马上就能找到大量的开源项目,这些项目的目的就是利用Redis创建非常好的后端工具,以满足各种队列需求。例如,Celery有一个后台就是使用Redis作为broker,你可以从这里去查看。

4,排行榜/计数器

Redis在内存中对数字进行递增或递减的操作实现的非常好。集合(Set)和有序集合(Sorted Set)也使得我们在执行这些操作的时候变的非常简单,Redis只是正好提供了这两种数据结构。所以,我们要从排序集合中获取到排名最靠前的10个用户–我们称之为“user_scores”,我们只需要像下面一样执行即可: 当然,这是假定你是根据你用户的分数做递增的排序。如果你想返回用户及用户的分数,你需要这样执行: ZRANGE user_scores 0 10 WITHSCORES Agora Games就是一个很好的例子,用Ruby实现的,它的排行榜就是使用Redis来存储数据的,你可以在这里看到。

5、 发布/订阅

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

21、都有哪些办法可以降低Redis的内存使用情况呢?

如果你使用的是32位的Redis实例,可以好好利用Hash,list,sorted set,set等集合类型数据,因为通常情况下很多小的Key-Value可以用更紧凑的方式存放到一起。

22、Memcache与Redis的区别都有哪些?

1、 存储方式 Memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。 Redis有部份存在硬盘上,这样能保证数据的持久性。

2、 数据支持类型 Memcache对数据类型支持相对简单。 Redis有复杂的数据类型。

3、 使用底层模型不同 它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。 Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。

23、如何选择合适的持久化方式?

一般来说, 如果想达到足以媲美PostgreSQL的数据安全性, 你应该同时使用两种持久化功能。如果你非常关心你的数据, 但仍然可以承受数分钟以内的数据丢失,那么你可以只使用RDB持久化。

有很多用户都只使用AOF持久化,但并不推荐这种方式:因为定时生成RDB快照(snapshot)非常便于进行数据库备份, 并且 RDB 恢复数据集的速度也要比AOF恢复的速度要快,除此之外, 使用RDB还可以避免之前提到的AOF程序的bug。

24、缓存并发问题

这里的并发指的是多个Redis的client同时set key引起的并发问题。比较有效的解决方案就是把Redis.set操作放在队列中使其串行化,必须的一个一个执行,具体的代码就不上了,当然加锁也是可以的,至于为什么不用Redis中的事务,留给各位看官自己思考探究。

25、怎么理解Redis事务?

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

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

26、Redis常用管理命令

# dbsize 返回当前数据库 key 的数量。
# info 返回当前 Redis 服务器状态和一些统计信息。
# monitor 实时监听并返回Redis服务器接收到的所有请求信息。
# shutdown 把数据同步保存到磁盘上,并关闭Redis服务。
# config get parameter 获取一个 Redis 配置参数信息。(个别参数可能无法获取)
# config set parameter value 设置一个 Redis 配置参数信息。(个别参数可能无法获取)
# config resetstat 重置 info 命令的统计信息。(重置包括:keyspace 命中数、
# keyspace 错误数、 处理命令数,接收连接数、过期 key 数)
# debug object key 获取一个 key 的调试信息。
# debug segfault 制造一次服务器当机。
# flushdb 删除当前数据库中所有 key,此方法不会失败。小心慎用
# flushall 删除全部数据库中所有 key,此方法不会失败。小心慎用

27、Redis 相比Memcached 有哪些优势?

1、 Memcached 所有的值均是简单的字符串, Redis 作为其替代者, 支持更为丰富的数据类

2、 Redis 的速度比 Memcached 快很3、Redis 可以持久化其数据

3、 更多面试题关注微信公众号:Java2B

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

EXPIRE和PERSIST命令。

29、Redis有哪些适合的场景?

(1)、会话缓存(Session Cache)

最常用的一种使用Redis的情景是会话缓存(session cache)。用Redis缓存会话比其他存储(如Memcached)的优势在于:Redis提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的购物车信息全部丢失,大部分人都会不高兴的,现在,他们还会这样吗?

幸运的是,随着 Redis 这些年的改进,很容易找到怎么恰当的使用Redis来缓存会话的文档。甚至广为人知的商业平台Magento也提供Redis的插件。

(2)、全页缓存(FPC)

除基本的会话token之外,Redis还提供很简便的FPC平台。回到一致性问题,即使重启了Redis实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似PHP本地FPC。

再次以Magento为例,Magento提供一个插件来使用Redis作为全页缓存后端。

此外,对WordPress的用户来说,Pantheon有一个非常好的插件 wp-Redis,这个插件能帮助你以最快速度加载你曾浏览过的页面。

(3)、队列

Reids在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得Redis能作为一个很好的消息队列平台来使用。Redis作为队列使用的操作,就类似于本地程序语言(如Python)对 list 的 push/pop 操作。

如果你快速的在Google中搜索“Redis queues”,你马上就能找到大量的开源项目,这些项目的目的就是利用Redis创建非常好的后端工具,以满足各种队列需求。例如,Celery有一个后台就是使用Redis作为broker,你可以从这里去查看。

(4),排行榜/计数器

Redis在内存中对数字进行递增或递减的操作实现的非常好。集合(Set)和有序集合(Sorted Set)也使得我们在执行这些操作的时候变的非常简单,Redis只是正好提供了这两种数据结构。所以,我们要从排序集合中获取到排名最靠前的10个用户–我们称之为“user_scores”,我们只需要像下面一样执行即可:

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

ZRANGE user_scores 0 10 WITHSCORES

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

(5)、/订阅

最后(但肯定不是最不重要的)是Redis的/订阅功能。/订阅的使用场景确实非常多。我已看见人们在社交网络连接中使用,还可作为基于/订阅的脚本触发器,甚至用Redis的/订阅功能来建立聊天系统!(不,这是真的,你可以去核实)。

30、说说 Redis 哈希槽的概念?

Redis 集群没有使用一致性 hash,而是引入了哈希槽的概念, Redis 集群有16384 个哈希槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽, 集群的每个节点负责一部分 hash 槽。

31、使用Redis有哪些好处?

1、 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)

2、 支持丰富数据类型,支持string,list,set,sorted set,hash

3、 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行

4、 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除

32、说说Redis哈希槽的概念?

Redis集群没有使用一致性hash,而是引入了哈希槽的概念,Redis集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分hash槽。

33、Redis支持哪几种数据类型?

String、List、Set、Sorted Set、hashes

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

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

35、Redis的缓存失效策略和主键失效机制

作为缓存系统都要定期清理无效数据,就需要一个主键失效和淘汰策略.

在Redis当中,有生存期的key被称为volatile。在创建缓存时,要为给定的key设置生存期,当key过期的时候(生存期为0),它可能会被删除。

1、 影响生存时间的一些操作

生存时间可以通过使用 DEL 命令来删除整个 key 来移除,或者被 SET 和 GETSET 命令覆盖原来的数据,也就是说,修改key对应的value和使用另外相同的key和value来覆盖以后,当前数据的生存时间不同。

比如说,对一个 key 执行INCR命令,对一个列表进行LPUSH命令,或者对一个哈希表执行HSET命令,这类操作都不会修改 key 本身的生存时间。另一方面,如果使用RENAME对一个 key 进行改名,那么改名后的 key的生存时间和改名前一样。

RENAME命令的另一种可能是,尝试将一个带生存时间的 key 改名成另一个带生存时间的 another_key ,这时旧的 another_key (以及它的生存时间)会被删除,然后旧的 key 会改名为 another_key ,因此,新的 another_key 的生存时间也和原本的 key 一样。使用PERSIST命令可以在不删除 key 的情况下,移除 key 的生存时间,让 key 重新成为一个persistent key 。

2、 如何更新生存时间

可以对一个已经带有生存时间的 key 执行EXPIRE命令,新指定的生存时间会取代旧的生存时间。过期时间的精度已经被控制在1ms之内,主键失效的时间复杂度是O(1),EXPIRE和TTL命令搭配使用,TTL可以查看key的当前生存时间。设置成功返回 1;当 key 不存在或者不能为 key 设置生存时间时,返回 0 。

最大缓存配置:

在 Redis 中,允许用户设置最大使用内存大小,server.maxmemory默认为0,没有指定最大缓存,如果有新的数据添加,超过最大内存,则会使Redis崩溃,所以一定要设置。Redis 内存数据集大小上升到一定大小的时候,就会实行数据淘汰策略。

Redis 提供 6种数据淘汰策略:

1、 volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰

2、 volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰

3、 volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰

4、 allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰

5、 allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰

6、 no-enviction(驱逐):禁止驱逐数据

注意这里的6种机制,volatile和allkeys规定了是对已设置过期时间的数据集淘汰数据还是从全部数据集淘汰数据,后面的lru、ttl以及random是三种不同的淘汰策略,再加上一种no-enviction永不回收的策略。

使用策略规则:

1、 如果数据呈现幂律分布,也就是一部分数据访问频率高,一部分数据访问频率低,则使用allkeys-lru

2、 如果数据呈现平等分布,也就是所有的数据访问频率都相同,则使用allkeys-random

三种数据淘汰策略:

ttl和random比较容易理解,实现也会比较简单。主要是Lru最近最少使用淘汰策略,设计上会对key 按失效时间排序,然后取最先失效的key进行淘汰

36、Redis是单线程的,如何提高多核CPU的利用率?

可以在同一个服务器部署多个Redis的实例,并把他们当作不同的服务器来使用,在某些时候,无论如何一个服务器是不够的, 所以,如果你想使用多个CPU,你可以考虑一下分片(shard)。

38、Redis通讯协议

RESP 是Redis客户端和服务端之前使用的一种通讯协议;RESP 的特点:实现简单、快速解析、可读性好

39、Redis前端启动命令

./Redis-server

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

Redis 内存数据集大小上升到一定大小的时候, 就会施行数据淘汰策略。相关知识: Redis 提供 6 种数据淘汰策略:

volatile-lru:从已设置过期时间的数据集( server.db[i].expires)中挑选最近最

少使用的数据淘汰

volatile-ttl: 从已设置过期时间的数据集( server.db[i].expires) 中挑选将要过期的数据淘汰

volatile-random: 从已设置过期时间的数据集( server.db[i].expires) 中任意选择数据淘汰

allkeys-lru: 从数据集( server.db[i].dict) 中挑选最近最少使用的数据淘汰

allkeys-random: 从数据集( server.db[i].dict) 中任意选择数据淘汰

no-enviction( 驱逐) : 禁止驱逐数据

更多Redis面试题 70道

01、 Redis集群方案应该怎么做?都有哪些方案?
02、 Redis的持久化机制是什么?各自的优缺点?
03、 请用Redis和任意语言实现一段恶意登录保护的代码,
04、 为什么Redis需要把所有数据放到内存中?
05、 多节点 Redis 分布式锁:Redlock 算法
06、 Redis 集群最大节点个数是多少?
07、 Redis缓存被击穿处理机制
08、 Reids常用5种数据类型
09、 假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如果将它们全部找出来?
10、 怎么理解Redis事务?

11、 查看Redis使用情况及状态信息用什么命令?
12、 Redis key的过期时间和永久有效分别怎么设置?
13、 Redis做异步队列
14、 你知道有哪些Redis分区实现方案?
15、 使用Redis有哪些好处?
16、 Pipeline 有什么好处,为什么要用pipeline?
17、 Redis 常见性能问题和解决方案:
18、 Redis还提供的高级工具
19、 Redis 最适合的场景?
20、 Redis如何做内存优化?

21、 持久化策略选择
22、 Redis常见性能问题和解决方案:
23、 修改配置不重启Redis会实时生效吗?
24、 Redis过期键的删除策略?
25、 Redis与Memcached相比有哪些优势?
26、 Redis持久化的几种方式
27、 为什么Redis需要把所有数据放到内存中?
28、 Redis集群方案应该怎么做?都有哪些方案?
29、 Redis 的回收策略(淘汰策略)
30、 AOF常用配置总结

31、 使用Redis有哪些好处?
32、 说说Redis哈希槽的概念?
33、 Redis支持哪几种数据类型?
34、 Pipeline有什么好处,为什么要用pipeline?
35、 Redis的缓存失效策略和主键失效机制
36、 Redis是单线程的,如何提高多核CPU的利用率?
38、 Redis通讯协议
39、 Redis前端启动命令
40、 MySQL 里有 2000w 数据,Redis 中只存 20w 的数据,如何保证Redis 中的数据都是热点数据?

41、 都有哪些办法可以降低Redis的内存使用情况呢?
42、 Memcache与Redis的区别都有哪些?
43、 如何选择合适的持久化方式?
44、 缓存并发问题
45、 怎么理解Redis事务?
46、 Redis常用管理命令
47、 Redis 相比Memcached 有哪些优势?
48、 Redis key的过期时间和永久有效分别怎么设置?
49、 Redis有哪些适合的场景?
50、 说说 Redis 哈希槽的概念?

51、 都有哪些办法可以降低 Redis 的内存使用情况呢?
52、 Redis有哪些适合的场景?
53、 是否使用过Redis集群,集群的原理是什么?
54、 Redis如何做内存优化?
55、 Redis集群方案应该怎么做?都有哪些方案?
56、 怎么测试Redis的连通性?
57、 Redis的并发竞争问题如何解决?
58、 使用Redis 有哪些好处?
59、 Redis回收进程如何工作的?
60、 Redis最适合的场景?

61、 Redis 开启AOF
62、 Redis集群的主从复制模型是怎样的?
63、 Redis相比Memcached有哪些优势?
64、 什么是Redis?
65、 Redis相比Memcached有哪些优势?
66、 怎么测试 Redis 的连通性?
67、 Redis 过期键的删除策略?
68、 Redis对象有5种类型
69、 Redis中海量数据的正确操作方式
70、 Redis事物的了解CAS(check-and-set 操作实现乐观锁 )?

如果不背 Redis面试题的答案,肯定面试会挂!

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

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

Redis面试题及答案 2021最新版 140道相关推荐

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

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

  2. Dubbo面试题及答案整理,Dubbo面试题大全带答案(2021最新版)

    本套Dubbo面试题分了6套,都有Dubbo面试题汇总带答案 Dubbo面试题及答案[最新版]Dubbo高级面试题大全(2021版),发现网上很多Dubbo面试题及答案整理都没有答案,所以花了很长时间 ...

  3. 100道Redis面试题及答案(2021最新)

    在网上看到有关Redis的120道面试题,但是没有给出答案,之前我也在寻找这份Redis面试题的答案,今天特地把答案分享出来. 花了大量时间整理了这套Redis面试题及答案,希望对大家有帮助哈~ 弄明 ...

  4. 110道 Redis面试题及答案(最新整理)

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

  5. Redis面试题及答案(2021年Redis面试题大全带答案)

    最近梳理2021最新 Redis面试题[附答案解析],包含了 Java基础.并发.JVM.数据库.Spring.SpringMVC.Redis.SpringCloud.设计模式.MQ.Linux.Re ...

  6. Redis高频面试题汇总(2021最新版)

        本文已收录于专栏 ⭐️<Redis面试题汇总--2021最新版本>⭐️ 上千人点赞收藏,全套Redis高频面试题,大厂必备技能! 面试官心理分析 从面试官的角度分析,出这道题的目的 ...

  7. 史上最全Redis面试题及答案。

    花了大量时间整理了这套Redis面试题 首发50题,绝无仅有,从入门到精通 从基础,高级知识点,再到集群,运维,方案- 弄明白了这些题可以说可以成为面霸了 面试官都得折服,Redis学得怎么样,都来检 ...

  8. java常见面试题及答案(基础题122道,代码题19道),java高级面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  9. 移动端软件测试面试题及答案-2021年最新版

    一.基础题(软能力) 主要考察面试者的语言表达能力.逻辑思维能力.反应能力.理解能力.协调能力等,一般会在面试开始热身的时候问一两道题. 1.自我介绍 2.换工作的意图,遇到了什么问题,你想要新的公司 ...

  10. java如何保证redis设置过期时间的原子性_2020年4月Redis面试题和答案整理

    点关注,不迷路:持续更新Java相关技术及资讯!!! 关注.转发.评论头条号每天分享java 知识,私信回复"源码" 赠送Spring源码分析.Dubbo.Redis.Netty. ...

最新文章

  1. MVC 4.0 Razor模板引擎 @Html.RenderPartial 与 @Html.RenderAction 区别
  2. Nginx的常用配置项
  3. 51Nod- 1915 西湖游船
  4. 深入剖析神秘的“零拷贝”
  5. PHP语言弹窗图片,PHP_php中随机显示图片的函数代码,例如博客的展示窗 复制代码...
  6. Python 开发者 2017 应该关注的 7 个类库
  7. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京)签到题F Fireworks
  8. C++操作系统注册表读取默认键值
  9. Dwg TrueView 2018中文版
  10. Sentinel Slot扩展实践-流控熔断预警实现
  11. web开发需要用什么软件
  12. 计算机主板外频,笨鸟先飞 主板超频BIOS选项接触(图解)
  13. NVIDIA GPU SM和CUDA编程理解
  14. 用友t3远程无法找到远程计算机,用友远程通安装打印常见问题
  15. hdu1176 免费馅饼 (动态规划)
  16. Springboot综合案例锦集
  17. app毕业设计 基于uni-app框架商城app、图书商城app毕设题目课题选题作品(1)app界面和功能
  18. 这15年专业之外的吐血学习总结。
  19. 【iMessage苹果相册日历推位置推送】软件安装deviceToken是由APNs生成的
  20. 广告行业中那些趣事系列26:基于PoseNet算法的人体姿势相似度识别

热门文章

  1. matlab如何绘制状态图,[转载]MATLAB画状态方程的向量图
  2. python手机桌面开发_将Android手机打造成你的Python开发者桌面#华为云·寻找黑马程序员#...
  3. 关于大麦网接口抢票构造的一些思路
  4. axure能做剪切蒙版吗_二手车销售好做吗?没经验能做二手车销售吗?
  5. android图片添加文字,android图片上添加文字
  6. python图片标记_用python找出那些被“标记”的照片
  7. mac如何设置默认输入法
  8. C语言12进制逆序输出,C语言将整数以二进制逆序
  9. iPad,下载迅雷电影,迅雷HD出现“应版权方要求,文件无法下载”解决方法!
  10. RS485MODBUS转PROFINET网关配置-科隆OPTIFLUX7000MODBUS通信协议电磁流量计接入西门子PLC S7-1500PROFINET以太网通讯网络配置方法