redis-相关面试技术

wangxiaoxue 2020-01-17

1,什么是redis?
redis是开源的、用c语言编写的,非关系型、 存储结构为Key-Value的数据库

2,redis的数据类型

String,List,Hash,Set,Sorted Set

3,使用redis有哪些好处?

①数据存在内存中,读取速度快

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

③支持事务,操作都是原子性的

④可以设置存储数据的过期时间

4,redis相比memcached有哪些优点、区别?

区别、优点

①memcached 只支持string类型的数据,而redis支持五种数据类型

②memcached不支持持久化,关闭服务器,数据就消失了;redis支持持久化,会将数据保存到硬盘

③memcached不支持分布式部署,各个memcached服务器之间互不通信,独立存取数据; redis支持分布式部署,支持集群,支持主从复制,以及读写分离等。

④redis的读取速度比memcached快很多

区别:

①memcached是多线程模型,redis是单线程模型

5,Redis为什么单进程单线程也那么快?

①完全基于内存

②数据结构简单,对数据操作简单

③使用IO多路复用模型(多路:多个网络连接,复用:共用一个redis线程,且redis在内存中操作数据的速度非常快)

6,单线程的好处,弊端?

好处:

①代码清晰,处理逻辑简单

②不用去考虑各种锁的问题,不存在加锁和释放锁操作,没有因为可能出现的死锁而导致的性能消耗

③不存在多进程或者多线程的切换而消耗cpu

弊端:

①无法发挥多核cpu的性能,不过可以通过在单机中开多个redis实例来完善

7,一个字符串类型的值能存储最大容量是多少?512M

8,Redis的持久化机制是什么?各自的优缺点哪些?

RDB持久化:

RDB优点:
(1)RDB会生成多个数据文件,每个数据文件都代表了某一个时刻中redis的数据,这种多个数据文件的方式,非常适合做冷备。
(2)RDB对redis对外提供读写服务的时候,影像非常小,因为redis 主进程只需要fork一个子进程出来,让子进程对磁盘io来进行rdb持久化
(3).RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。

RDB缺点
(1)如果redis要故障时要尽可能少的丢失数据,RDB没有AOF好,例如1:00进行的快照,在1:10又要进行快照的时候宕机了,这个时候就会丢失10分钟的数据。
(2)RDB每次fork出子进程来执行RDB快照生成文件时,如果文件特别大,可能会导致客户端提供服务暂停数毫秒或者几秒

AOF持久化:

AOF优点:

(1)AOF可以更好的保护数据不丢失,一般AOF会以每隔1秒,通过后台的一个线程去执行一次fsync操作,如果redis进程挂掉,最多丢失1秒的数据。
(2)AOF以appen-only的模式写入,所以没有任何磁盘寻址的开销,写入性能非常高。
(3)AOF日志文件的命令通过非常可读的方式进行记录,这个非常适合做灾难性的误删除紧急恢复,如果某人不小心用flushall命令清空了所有数据,只要这个时候还没有执行rewrite,那么就可以将日志文件中的flushall删除,进行恢复。
 
AOF的缺点
(1)对于同一份文件AOF文件比RDB数据快照要大。
(2)AOF开启后支持写的QPS会比RDB支持的写的QPS低,因为AOF一般会配置成每秒fsync操作,每秒的fsync操作还是很高的
(3)数据恢复比较慢,不适合做冷备。
 
RDB和AOF到底如何选择?(一起使用)
(1)不要仅仅使用RDB这样会丢失很多数据。
(2)也不要仅仅使用AOF,因为这一会有两个问题,第一通过AOF做冷备没有RDB做冷备恢复的速度快;第二RDB每次简单粗暴生成数据快照,更加健壮。
(3)综合AOF和RDB两种持久化方式,用AOF来保证数据不丢失,作为恢复数据的第一选择;用RDB来做不同程度的冷备,在AOF文件都丢失或损坏不可用的时候,可以使用RDB进行快速的数据恢复。

相关推荐

DiamondTao / 0评论 2020-08-30