Redis 的一些面试题2

Redis 的一些面试题

1.持久化方式有哪些?有什么区别?
 	redis的持久化分为RDB和AOF两种
 	RDB
 	RDB持久化可以手动执行也可以配置定期执行,他的做用是将某个时间点上的内存保存到RDB文件中,
 RDB文件是一个压缩的二进制文件,通过他可以还原数据。由于RDB文件是保存到硬盘上的所以即使redis
 崩溃或者退出,只要RDB文件存在,就可以用它来恢复数据。
 
 可以通过save或者bgsave来生成RDB文件。
	 SAVE命令会阻塞redis进程,直到RDB文件生成完毕,在进程阻塞期间,redis不能处理任何命令请求,
 这显然是不合适的。
	 BGSAVE则是会创建一个子进程,然后由子进程去负责生成RDB文件,父进程还可以继续处理命令请求,
 不会阻塞进程。
	AOF:
	AOF和RDB不同,AOF保存的是命令,将写的命令保存起来。AOF通过追加、写入、同步三个步骤
 来实现持久化机制。
	1.当AOF持久化处于激活状态,服务器执行完写命令之后,写命令将会被追加aof缓冲区的末尾
	2.在服务器结束一个事件之前,将会调用flushAppendOnlyFile函数决定是否要将aof缓冲区的
 内容保存到AOF文件中,可以通过配置appendfsync来决定。
 配置如下:
always 实时同步
everysec 每秒同步
no 同步时间由操作系统决定

默认选项将会是everysec,每秒同步

2.	什么是悲观锁?什么是乐观锁?
(redis、mysql、oracle、mybatis-plus)
	悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,
所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会等待,直到拿到锁。
传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。
	乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,
所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。
乐观锁适用于多读的应用类型,这样可以提高吞吐量。Redis就是利用这种check-and-set机制实现事务的。

3.主从复制的原理:
	1)当从服务器连接上主服务器之后,从服务器就会向主服务器发送一个sync命令进行数据同步操作
	2)主服务器接到从服务器发过来的同步命令,先将主服务器数据进行持久化,生成rdb文件,
然后把rdb文件发送给从服务器,从服务器拿到rdb进行读取,完成复制
	3)每次主服务器进行写操作之后,和从服务器进行数据同步
	4)全量复制:从机第一次连接主机,主机所有的数据将会同步给从机。
	5)增量复制:主机继续将新的数据依次传给从机
	6)但是只要是重新连接主机(从机发出slaveof命令),全量复制都会自动执行

在这里插入图片描述

4. 主从复制的三种方式
	方式一:一主多从(N个从机直接跟随主机)
	方式二:薪火相传 (从机可以作为其他机器的主机)
	方式三:反客为主 (主机宕机 ,从机可以通过slaveof no one 变成主机)

5.什么是哨兵机制?哨兵机制的工作原理是什么?
主从架构中,主机宕机,从机无法自动上位,需要手动上位,而哨兵机制就是自动上位

 1.基于主从方案的缺点还是很明显的,假设主机宕机,那么就不能写入数据,那么从机也就失去了作用,
整个架构就不可用了,除非你手动切换,主要原因就是没有自动故障转移机制。而哨兵具备自动故障转移、
集群监控、消息通知等功能。
 2.哨兵可以同时监视多个主从服务器,并且在被监视的主机下线时,自动将某个从机提升为主机,
然后由新的主机继续接收命令。
 3.哨兵会每隔1秒向所有实例(包括主从服务器和其他哨兵)发送ping命令,并且根据回复判断是否已经下线,
这种方式叫做主观下线。当判断为主观下线时,就会向其他监视的哨兵询问,如果超过半数的投票认为已经是
下线状态,则会标记为客观下线状态,同时触发故障转移。

在这里插入图片描述

6.知道什么是热key吗?热key问题怎么解决?
	所谓热key问题就是,突然有几十万的请求去访问redis上的某个特定key,那么这样会造成流量过于集中,
达到物理网卡上限,从而导致服务器宕机。

在这里插入图片描述

针对热key的解决方案:
1.提前把热key打散到不同的服务器,降低压力
2.加入二级缓存,提前把热key加载到二级缓存中,如果redis宕机,走二级缓存查询

猜你喜欢

转载自blog.csdn.net/weixin_47898467/article/details/120659354