编辑
2023-02-19
面试
00
请注意,本文编写于 754 天前,最后修改于 7 天前,其中某些信息可能已经过时。

目录

Redis 线程模型
Redis 是单线程吗?
通信协议
Redis 持久化
Redis 如何实现数据不丢失?
快照原理
AOF日志
Redis4.0混合持久

Redis 线程模型

Redis 是单线程吗?

是单线程,因为所以运算都在内存级别的运算。 Redis使用的是非阻塞IO,和多路复用

通信协议

RESP 是一种直观的文本协议

Redis 持久化

Redis 如何实现数据不丢失?

Redis 持久化分为两种,一种是快照,还有一种是AOF日志模式。快照是一次全量备份,AOF是日志连续增量备份。AOF日志在长期运行过程中会变得无比庞大,数据库重启是会加载AOF日志,时间会变得无比漫长。所以需要定期给AOF日志重写,给AOF日志瘦身。

快照原理

快照使用了操作系统的多进程COW机制来进行快照持久化的。 在持久化时,通过glibc的函数fork一个子进程出来,用来执行快照持久化。子进程和父进程共享内存的数据。 如果在持久化过程中,有对数据进行修改操作,则父进程会复制一份数据页出来,进行修改。原数据页不会被修改。 Redis可以通过配置来设置什么时候执行持久化bgsave

save 900 1 save 300 1 save 60 100000

表示 900秒内 至少执行一次 表示 300 秒内 至少执行10次

AOF日志

AOF日志存储是Redis服务器的顺序指令序列。只记录对内存的修改指令记录。 Redis会先执行指令,然后才会写入AOF日志。 Redis长时间运行,AOF日志特别大,就需要给AOF日志瘦身。 也是开辟一个新的子进程来重写,在重写过程中新的AOF日志,要等重写完之后写入重写之后的AOF日志就算完成了

Redis4.0混合持久

单独使用RDB快照模式,会导致数据不是最新的, 单独使用AOF日志,会导致启动需要很久 混合持久就是把rdb的文件内容和Aof日志一起使用,在这里AOF不再是全量日志而是,持久化开始到持久化结束这段时间内的增量日志。

本文作者:游戏币

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!