Java高频面试题- 每日三连问?【Day2】 — Redis篇2

作者 | 浩说编程
来源 | 公众号:浩说编程
[ 大厂技术资源 | 研发必备安装包 | 经典必读电子书 | 限时免费获取 ]
在这里插入图片描述

问题导读

一、你对Redis的持久化了解吗?

追问-1:能否说一下Redis持久化有几种方式?

二、聊一下Redis的内存淘汰机制吧

三、Redis为什么是单线程的?

图片

 

一、你对Redis的持久化有了解吗?

图片

正经回答:

Redis持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。

深入追问:

追问1:能否说一下Redis持久化有几种方式?

Redis有两种持久化机制,分别是RDB(默认) 和 AOF 机制。

1、RDB–Redis DataBase缩写快照:

按照一定的时间将内存的数据以快照的形式保存到硬盘中,对应产生的数据文件为dump.rdb。通过配置文件中的save参数来定义快照的周期。:

图片

2、AOF–Append Only File:

将Redis执行的每次写命令记录到单独的日志文件中,当重启Redis会重新将持久化的日志中文件恢复数据。

图片

当两种方式同时开启时,数据恢复Redis会优先选择AOF恢复。

图片

 

二、聊一下Redis的内存淘汰机制吧

正经回答:

redis内存淘汰机制大概有下面这几种:

  • noeviction: 当内存不足以容纳新写入数据时,新写入操作会报错,这个一般没人用吧,实在是太恶心了。

  • allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 key(这个是最常用的)。

  • allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个 key,这个一般没人用吧,为啥要随机,肯定是把最近最少使用的 key 给干掉啊。

  • volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的 key(这个一般不太合适)。

  • volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个 key。

  • volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的 key 优先移除。

图片

 

三、Redis为什么是单线程的?

正经回答:

官方FAQ表示,因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。

既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了(毕竟采用多线程会有很多麻烦!)。

Redis利用队列技术将并发访问变为串行访问。

优点:

1、绝大部分请求是纯粹的内存操作(非常快速)

2、采用单线程,避免了不必要的上下文切换和竞争条件

3、非阻塞IO优点:

  • 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)

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

  • 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行

  • 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除

图片

每日小结

如果你的朋友也在准备面试,请将这个系列分享给他,如果他认真对待,肯定会感谢你的!!

好了,今天就到这里,学废了的同学,记得三连,也会给我继续更新的动力。

作者 | 浩说编程
来源 | 公众号:浩说编程
[ 大厂技术资源 | 研发必备安装包 | 经典必读电子书 | 限时免费获取 ]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值