Redis进阶一之线程模型、数据持久化
线程模型
一、Redis到底是单线程还是多线程?
Redis 不是完全意义上的单线程。它的核心命令执行是单线程的,客户端发来的命令最终由主线程按顺序执行。
但是 Redis 可以同时支撑大量客户端连接,这是因为它使用了 I/O 多路复用机制。I/O 多路复用可以让一个线程监听多个 socket 连接,哪个连接有请求就处理哪个,避免了一个连接创建一个线程带来的资源浪费。
Redis 6.0 以后引入了多线程 I/O,但主要用于网络读写,不是多线程并发执行命令。所以可以总结为:多连接监听,单线程执行命令,多线程辅助网络 I/O 和后台任务。
Redis 不是完全意义上的单线程。它的核心命令执行是单线程的,客户端发来的命令最终由主线程按顺序执行。
但是 Redis 可以同时支撑大量客户端连接,这是因为它使用了 I/O 多路复用机制。I/O 多路复用可以让一个线程监听多个 socket 连接,哪个连接有请求就处理哪个,避免了一个连接创建一个线程带来的资源浪费。
Redis 6.0 以后引入了多线程 I/O,但主要用于网络读写,不是多线程并发执行命令。所以可以总结为:多连接监听,单线程执行命令,多线程辅助网络 I/O 和后台任务。

数据持久化
Redis提供了很多跟数据持久化相关的配置,⼤体上,可以组成以下⼏种策略:
· ⽆持久化:完全关闭数据持久化,不保证数据安全。相当于将Redis完全当做缓存来⽤
· RDB:按照⼀定的时间间隔缓存Redis所有数据快照。
· AOF:记录Redis收到的每⼀次写操作。这样可以通过操作重演的⽅式恢复 Redis的数据
· RDB+AOF:同时保存Redis的数据和操作。
RDB
优点:
1、RDB⽂件⾮常紧凑,⾮常适合定期备份数据。
2、RDB快照⾮常适合灾难恢复。
3、RDB备份时性能⾮常快,对主线程的性能⼏乎没有影响。RDB备份时,主线程只需要启
动⼀个负责数据
4、与AOF相⽐,RDB在进⾏⼤数据量重启时会快很多。
缺点:
1、RDB不能对数据进⾏实时备份,所以,总会有数据丢失的可能。
2、RDB需要fork化⼦线程的数据写⼊情况,在fork的过程中,需要将内存中的数据克隆⼀
份。如果数据量太⼤,或者CPU性能不是很好,RDB⽅式就容易造成Redis短暂的服务停
⽤。相⽐之下,AOF也需要进⾏持久化,但频率较低。并且你可以调整⽇志重写的频率。
redis.conf常见配置:
save 3600 1 300 100 60 10000
意思是满足任意一个条件,就生成 RDB:
3600 秒内至少 1 个 key 发生变化
300 秒内至少 100 个 key 发生变化
60 秒内至少 10000 个 key 发生变化
AOF
优点:
1、AOF持久化更安全。例如Redis默认每秒进⾏⼀次AOF写⼊,这样,即使服务崩溃,最多
损失⼀秒的操作。
2、AOF的记录⽅式是在之前基础上每次追加新的操作。因此AOF不会出现记录不完整的情
况。即使因为⼀些特殊原因,造成⼀个操作没有记录完整,也可以使⽤redis-check-aof⼯
具轻松恢复。
3、当AOF⽂件太⼤时,Redis会⾃动切换新的⽇志⽂件。这样就可以防⽌单个⽂件太⼤的
问题。
4、AOF记录操作的⽅式⾮常简单易懂,你可以很轻松的⾃⾏调整⽇志。⽐如,如果你错误
的执⾏了⼀次 FLUSHALL 操作,将数据误删除了。使⽤AOF,你可以简单的将⽇志中最后
⼀条FLUSHALL指令删掉,然后重启数据库,就可以恢复所有数据。
缺点:
1、针对同样的数据集,AOF⽂件通常⽐RDB⽂件更⼤。
2、在写操作频繁的情况下,AOF备份的性能通常⽐RDB更慢。
redis.conf常见配置:
开启 AOF: appendonly yes
AOF 刷盘策略:
appendfsync everysec
#appendfsync always
#appendfsync no

总结:
Redis 持久化主要有 RDB 和 AOF 两种。RDB 是快照持久化,会在满足一定时间和修改次数条件时,把当前内存中的全量数据保存成 dump.rdb 文件。它文件小、恢复快,适合备份和迁移,但缺点是可能丢失最近一次快照之后的数据。
AOF 是追加日志持久化,会把 Redis 执行过的写命令追加到 AOF 文件中。Redis 重启时通过重放这些写命令恢复数据。AOF 数据安全性更高,常用 everysec 策略,最多可能丢失 1 秒数据,但文件通常比 RDB 大,恢复速度也可能更慢,所以需要 AOF 重写来压缩文件。
生产中如果 Redis 只是缓存,可以只用 RDB 或者不开持久化;如果数据比较重要,建议开启 AOF;更稳妥的方式是 RDB 和 AOF 同时开启,RDB 做全量备份,AOF 保证尽量少丢数据。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)