Redis regular interview questions and answers (on)

1 Interview questions

1. What is redis?

Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:
	1> 基于内存运行,性能高效
	2> 支持分布式,理论上可以无限扩展
	3> key-value存储系统
  4> 开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API

2. Redis data type?

String
Hash
List
Set
Zset

3. What are the benefits of using Redis?

1 读写性能优秀;
2 支持数据持久化,支持AOF和RDB两种持久化方式;
3 支持主从复制,主机可以自动将数据复制到从机上,可以实现读写分离;
4 数据结构丰富,支持多种数据的存储。

4. What are the advantages of Redis over Memcached?

1 memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型
2 redis的速度比memcached快很多redis的速度比memcached快很多
3 redis可以持久化其数据redis可以持久化其数据

5. What are the differences between Memcached and Redis?

1 数据类型不同,redis有五种(list set string hash zset),memcached只有一种string
2 Redis支持数据的备份,即master-slave模式的数据备份。
3 Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
4 内存的使用率上memcached数据结构简单 只有一种string ,不用记录数据的类型。而reids需要记录

6. Is Redis single-process single-threaded? Why is it so fast and efficient?

单线程
单线程效率高原因:
	1> 纯内存操作
	2> 核心是基于非阻塞的 IO 多路复用机制
  3> 单线程反而避免了多线程的频繁上下文切换问题

7. What is the maximum storage capacity for a string type value?

512M

8. What is the persistence mechanism of Redis? Their advantages and disadvantages?

RDB与AOF
RDB的优缺点:
 => 优点
			1> RDB文件小,非常适合定时备份,用于灾难恢复
			2> Redis加载RDB文件的速度比AOF快很多,因为RDB文件中直接存储的时内存数据,而AOF文件中存储的是一条条命令,需要重演命令。
 => 缺点
			1> RDB无法做到实时持久化,若在两次bgsave间宕机,则会丢失区间(分钟级)的增量数据,不适用于实时性要求较高的场景
			2> RDB的cow机制中,fork子进程属于重量级操作,并且会阻塞redis主进程,存在老版本的Redis不兼容新版本RDB格式文件的问题

AOF的优缺点:
 => 优点
			1> AOF只是追加写日志文件,对服务器性能影响较小,速度比RDB要快,消耗的内存较少

 => 缺点
			1> AOF方式生成的日志文件太大,需要不断AOF重写,进行瘦身。
			2> 即使经过AOF重写瘦身,由于文件是文本文件,文件体积较大(相比于RDB的二进制文件)。
			3> AOF重演命令式的恢复数据,速度显然比RDB要慢。

9. What are the common performance problems and solutions for Redis?

1 Master 最好不要做任何持久化工作,如 RDB 内存快照和 AOF 日志文件
2 如果数据比较重要,某个 Slave 开启 AOF 备份数据,策略设置为每秒同步一次
3 为了主从复制的速度和连接的稳定性, Master 和 Slave 最好在同一个局域网内
4 尽量避免在压力很大的主库上增加从库
5 主从复制不要用图状结构,用单向链表结构更为稳定,
	  即: Master <- Slave1 <- Slave2 <-Slave3…

10. What is the deletion strategy of Redis expired keys?

1 定时删除
	在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即执行对键的删除操作。
2 惰性删除
	放任过期键不管,每次从键空间中获取键时,检查该键是否过期,如果过期,就删除该键,如果没有过期,就返回该键。
3 定期删除
	每隔一段时间,程序对数据库进行一次检查,删除里面的过期键,至于要删除哪些数据库的哪些过期键,则由算法决定。

11. Redis recycling strategy (elimination strategy)?

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(驱逐):禁止驱逐数据

12. Why does Redis need to put all data in memory?

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

13. Do you understand the synchronization mechanism of Redis?

一、全同步

全同步过程如下:

1)在slave启动时,会向master发送一条SYNC指令。
2)master收到这条指令后,会启动一个备份进程将所有数据写到rdb文件中去。
3)更新master的状态(备份是否成功、备份时间等),然后将rdb文件内容发送给等待中的slave。

注意,master并不会立即将rdb内容发送给slave。而是为每个等待中的slave注册写事件,当slave对应的socket可以发送数据时,再讲rdb内容发送给slave。

二、部分同步

当Redis的master/slave服务启动后,首先进行全同步。之后,所有的写操作都在master上,而所有的读操作都在slave上。因此写操作需要及时同步到所有的slave上,这种同步就是部分同步。

部分同步过程如下:

1)master收到一个操作,然后判断是否需要同步到salve。
2)如果需要同步,则将操作记录到aof文件中。
3)遍历所有的salve,将操作的指令和参数写入到savle的回复缓存中。
4)一旦slave对应的socket发送缓存中有空间写入数据,即将数据通过socket发出去。

原文链接:https://blog.csdn.net/look4liming/article/details/83013275

14. What are the benefits of Pipeline, why use Pipeline?

就是一个pipeline管道批量执行指令,可以节省多次IO往返的时间,但是如果指令间有依赖建议分批发送

15. Have you ever used Redis cluster? What is the principle of cluster?

1 Redis Sentinal 着眼于高可用,在 master 宕机时会自动将 slave 提升为master,继续提供服务。
2 Redis Cluster 着眼于扩展性,在单个 redis 内存不足时,使用 Cluster 进行分片存储。

16. Under what circumstances will the Redis cluster solution cause the entire cluster to be unavailable?

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

17. What are the Java clients supported by Redis? Which one is the official recommendation?

Redisson、Jedis、lettuce 等等,官方推荐使用 Redisson。

18. What are the advantages and disadvantages of comparing Jedis and Redisson?

1 Jedis是Redis的Java实现的客户端,其API提供了比较全面的Redis命令的支持;
2 Redisson实现了分布式和可扩展的Java数据结构,和Jedis相比,功能较为简单,不支持字符串操作,不支持排序、事务、管道、分区等Redis特性。Redisson的宗旨是促进使用者对Redis的关注分离,从而让使用者能够将精力更集中地放在处理业务逻辑上。

19. How does Redis set the password and verify the password?

设置密码:config set requirepass auskat
授权密码:auth auskat

20. Tell me about the concept of Redis hash slot?

Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。

2 Related information

  • The blog post is not easy, everyone who has worked so hard to pay attention and praise, thank you

Guess you like

Origin blog.csdn.net/qq_15769939/article/details/113928287