redis单线程为什么快redis持久化机制redis的过期删除策略

Posted Acmen-zym

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis单线程为什么快redis持久化机制redis的过期删除策略相关的知识,希望对你有一定的参考价值。

单线程快的原因:

1、纯内存操作
2、核心是基于非阻塞的IO多路复用
3、避免了多线程频繁切换上下文的性能消耗

持久化机制

RDB:Redis DabaBase 将某个时间的内存快照,以二进制方式写入磁盘
手动触发:
1、save命令,会让redis出现阻塞,直到rdb持久化完成,才会去处理其他的命令,这个要慎用;
2、bgsave名字,fork一个子进程执行持久化,主进程只有在fork的时候才会出现短暂阻塞,子进程创建完毕后,就可以响应其他处理请求了;
自动触发
1、save m n ,在指定m秒内,如果n个key发生了变化,则会自动持久化,通过bgsave执行持久化,如果配置了多个触发条件,那么只要有一个达到触发条件就会执行持久化,配置文件中有默认配置,可以关闭掉这个配置;
2、flushall,用于清空所有的库,flushdb是清空当前所在的库,会清空rdb文件,同时生成空的dump.rdb
3、主从同步,如果是全量同步则会自动触发bgsave命令,生成rdb文件发送给从节点
优点
1、整个redis包含一个dump.rdb文件,方便持久化
2、容灾行好,方便备份
3、性能最大化,fork子进程完成写的操作,让主进程继续处理。使单独子进程进行持久化,主进程不会进行任何IO操作,保证了redis高性能
4、相对于数据较大时,比AOF的效率更高
缺点
1、数据安全 低,因为rdb是间隔时间持久化,如果在持久化之间发生故障,会出现数据丢失,这个方式更适合要求不严谨的业务需求
2、由于rdb是通过fork子进程来完成持久化的,如果数据量较大时,可能会导致整个服务停止一些时间,会占用cpu

AOF:Append Only File 是以日志的形式记录的,会记录每一个写、删除的操作,查询记录不会被保存,以文本方式记录,可以打开文件看到详细的操作记录
1、所有的写命令都是追击到AOF缓冲中
2、AOF缓冲区根据对应的策略向磁盘进行同步
3、随着AOF文件越来越大,需要定期对AOF进行重写,达到压缩的效果
4、当redis重启时,可以加载AOF文件进行数据恢复
同步策略
1、每秒同步,异步同步完成,效率高,但是系统出现宕机的情况,那么这一秒的数据会丢失;
2、每修改同步,同步持久化,每次发送数据变化会被立刻记录,最多丢失一条数据
3、不同步,由操作系统控制,可能会丢失较多数据
优点
1、数据安全
2、通过append模式写文件,中途出现宕机也不会破坏已存在的内容,可以通过redis-check-aof工具解决数据一致性
缺点
1、AOF文件比RDB文件大,数据恢复速度慢
2、数据较大时,比rdb启动效率低
3、运行效率没有rdb高

Redis的过期删除策略

惰性过期:只有当访问这个key时,才判断这个key是不是过期了,如果过期则清除。这个策略可以最大化节省CPU资源,但是对比较占用内存资源。
定期过期:每隔一定时间,会扫描expires一定数量的key,并且清除期中过期的key。当前策略比较均衡,不会频繁的使用CPU资源,也不会导致过期数据大量堆积

以上是关于redis单线程为什么快redis持久化机制redis的过期删除策略的主要内容,如果未能解决你的问题,请参考以下文章

Redis基本数据类型数据持久化过期策略及淘汰机制

为什么单线程Redis能那么快?

Day729.为什么单线程的Redis能那么快 -Redis 核心技术与实战

为什么单线程的Redis这么快?

读源码搞懂为什么Redis用单线程还这么快

java面试之Redis篇