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