作者 | 浩说编程 来源 | 公众号:浩说编程 [ 大厂技术资源 | 研发必备安装包 | 限时免费获取 ] 问题导读 一、你对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设置过期时间,过期后将会自动删除 每日小结 如果你的朋友也在准备面试,请将这个系列分享给他,如果他认真对待,肯定会感谢你的!! 好了,今天就到这里,学废了的同学,记得三连,也会给我继续更新的动力。 作者 | 浩说编程 来源 | 公众号:浩说编程