Redis面试题1

1.1 Redis的作用?

(1)缓存:是实现分布式缓存的首选中间件;
(2)数据库:实现诸如点赞、关注、排行等对性能要求极高的互联网需求;

1.2 Redis和传统的关系型数据库的区别?

(1)Redis
1)Redis是一种基于键值对的NoSQL数据库;
2)Redis的数据都存储在内存中,读写速度可达10万/秒;
(2)关系型数据库
1)关系型数据库是基于二维表来存储数据的,数据格式更为严谨,支持关系查询;
2)数据存储在硬盘中,存储数据量大,但读写速度远不如Redis;

1.3 Redis的数据类型?

(1)5种核心数据类型:
1)字符串;
2)哈希;
3)列表;
4)集合;
5)有序集合;
(2)其它类型:
1)Bitmap、HyperLogLog、Geo类型(这些类型都是基于5中基本类型实现的);

1.4 Redis是单线程的,为什么还能这么快?

(1)Redis的大部分操作都是在内存中完成;
(2)单线程避免了线程切换和竞争所产生的消耗;
(3)Redis采用IO多路复用机制,使其在网络中能并发处理大量客户端请求,实现高吞吐量;
(4)Redis 单线程指的是网络请求模块使用了一个线程,即一个线程处理所有网络请求,其他模块该使用多线程,仍会使用了多个线程;
Redis的单线程模型
Redis基于Reactor模式开发了自己的网络事件处理器,称之为文件事件处理器(File Event Hanlder)。文件事件处理器由Socket、IO多路复用程序、文件事件分派器(dispather),事件处理器(handler)四部分组成。
在这里插入图片描述

1.6 set和zset有什么区别?

(1)set:
1)set集合中的元素是无序、不可重复的;
2)一个set集合最多能存储2^32 -1个成员;
3)set集合支持对元素的增删改查,对多个集合取交集、并集、差集;
(2)zset:
1)zset集合存储元素不能重复;
2)zset集合会给每一个元素设置一个分数,并以此作为排序及依据;
3)zset集合元素不能重复,但是不同元素的分数可以重复;

1.7 Redis中的watch命令?

这是与Redis事务相关的命令,为解决在一个事务中的数据没有被其它客户端修改,而使用的命令。Redis中的watch命令采用乐观锁机制,当客户端采用watch命令,对服务器中的一个或者多个key进行监视时,如果客户端在执行事务之前这些key发生改变,该事务将执行失败,服务器返回空值。

1.8 Redis中List结构相关操作

List机构存储有序可重复数据,最多可存储2^32 -1个元素,常使用的命令有:
(1)lpush/rpush:从列表的左侧/右侧添加数据;
(2)lange:返回指定索引范围内的数据;
(3)index:返回指定索引处的数据;
(4)lpop/rpop:从列表左侧/右侧弹出一个数据;
(5)blpop/brpop:从列表左侧/右侧弹出一个数据,若列表为空则进入阻塞状态;

1.9 Redis持久化–RDB持久化

(1)RDB持久化是什么?
RDB是Redis默认采用持久化的一种方式,将内存中的数据集快照写入到硬盘中。在持久化的过程中,RDB会创建一个经过压缩的二进制文件,文件以".rdb"结尾,内部存储了数据库的键值对信息,恢复时将快照文件直接读入到内存中。
(2)触发RDB持久化方式
1)手动触发:通过SAVE或BGSAVE命令触发RDB持久化,创建".rdb"文件;
2)自动触发:通过配置.conf(配置)文件,当达到条件时自动执行BGSAVE命令;
(3)RDB持久化流程
1)Redis RDB持久化,调用bgsave命令,父线程会fork(创建)一个子进程来进行持久化,子进程会将数据写入到一个临时文件中,父进响应其它命令,待数据写入完毕,子进程通知父进程,将新文件替换旧文件。
2)执行流程示意图:
在这里插入图片描述
3)执行细节:
* 若父进程正在执行(fork)子进程,直接返回;
* fork操作过程中,父线程进入阻塞状态;
* fork操作完成后,父进程继续响应其它命令,不进行任何IO操作;
* fork出的子进程,所有数据(变量、环境变量、程序计数器等)都和原进程一致,但是子进程是一个全新的进程;
(4)BGSAVE命令原理
在这里插入图片描述
(5)RBD持久化特点
1)优势:
* 适合大规模数据恢复;
* 节省磁盘空间;
* 恢复速度快;
2)缺点:
* 最后一次持久化的数据可能丢失,只能适应对数据完整性和一致性要求不高的场合;

1.10 Redis持久化–AOF持久化

(1)AOF是什么?
AOF即Append Only File,以日志的形式来记录每个写操作(增量保存),将Redis执行过程中的所有写指令记录下来(读操作不记录),只许追加文件不可以改写文件。Redis启动恢复数据时,根据日志文件的内容将写指令从前到后执行一次完成数据恢复工作。
(2)AOF持久化流程
1)客户端的请求写命令会被append追加到AOF缓冲区;
2)AOF缓冲区根据AOF持久化策略[always、everysec、no]将操作sync同步到磁盘的AOF文件中;
3)当AOF文件大小超过重写策略或手动重写时,会对AOF rewrite(重写),压缩AOF容量;
4)Redis服务重启时,会重写load(加载)AOF文件中的写操作达到数据恢复的目的;
在这里插入图片描述
(3)开启AOF持久化机制
修改配置文件,将appendonly后面的no改为yes
在这里插入图片描述
(4)AOF持久化的文件同步机制:
为提高程序的写入性能,操作系统会把针对硬盘的多次写操作优化为一次写操作。
1)当Redis调用写命令是,首先会将数据追加到AOF缓冲区;
2)当达到特定的时间周期或缓存区写满是,系统执行flush操作,将缓冲区数据写入到硬盘中;
但是这种优化机制虽然提高了性能,但也给程序的写入操作带来了不确定性,为消除这种不确定性,Redis提供appendffync选项,来控制系统冲洗AOF文件的频率;
在这里插入图片描述
(5)特点
1)优点:
* AOF持久化安全性很高,可以将数据丢失的限制在1秒之内;
2)缺点:
* AOF文件较大;
* 恢复速度慢;

1.11 Redis持久化–RDB-AOF混合持久化

(1)RDB-AOF混合持久化是什么?
Redis从4.0开始引入RDB-AOF混合持久化机制,这种机制是基于AOF持久化构建而来的,通过配置文件中的“aof-use-rdb-preamble yes”配置项开启AOF混合持久化。
(2)持久化流程
1)像执行BGSAVE命令一样,根据数据库当前的状态生成相应的RDB数据,并将其写入AOF文件中;
2)对于重写之后执行的Redis命令,则以协议文本的方式追加到AOF文件的末尾,即RDB数据之后。
(3)特点
通过使用RDB-AOF混合持久化,用户可以同时获得RDB持久化和AOF持久化的优点,服务器既可以通过AOF文件包含的RDB数据来实现快速的数据恢复操作,又可以通过AOF文件包含的AOF数据来将丢失数据的时间窗口限制在1s之内。(既保证了文件不会太大,同时能够将数据丢失时间限制在1s之内)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值