Redis学习总结 -- 持久化

持久化就是将易失的数据(如内存中的数据)保存到可永久保存的存储设备中(如硬盘上),主要的应用是将内存中的数据保存到数据库、磁盘文件等。
对于单纯的缓存系统,如Memcache,它的目标仅仅是提升系统的查询性能,并不需要持久化,同时也降低了缓存系统的设计复杂度。当缓存系统异常时,只是造成缓存数据的丢失,并不会造成业务数据的丢失。当缓存系统重启后,根据缓存数据特性、缓存数据大小、后台性能等来选择合适的重建方案来重建缓存。
Redis可以仅仅用于缓存,但它还可以用于业务数据存储,如排行榜,此时我们必须对业务数据进行持久化,避免在异常情况下造成业务数据丢失。Redis的持久化有RDB和AOF两种方案,默认使用RDB方案。下面主要讨论两种方案的优缺点及其原理。

Redis持久化的方案

RDB方案

  • 方案描述
    将当前内存数据快照(Snapshot)写入磁盘文件中,恢复时将该快照文件直接读到内存中。

  • 具体流程
    当需要持久化时,主进程fork一个子进程,子进程将当前内存快照写入到临时文件中。写入成功后,对临时文件进行重命名,替换原有的数据快照文件。
    快照过程是fork一个子进程来处理的,一般情况下,并不会影响请求的正常处理;但当数据集比较大时,fork进程会很慢,导致服务卡顿(毫秒级,甚至秒级)。在linux系统中,因为fork子进程是采用写时复制(copy-on-write)机制,快照子进程和主进程间共享未变更的内存,所以当变更数据不多时,内存并不会明显增加。

  • 配置说明

# 快照频率,支持配置多条规则,平衡性能和数据安全
save 900 1   #900s内如果有1条写指令,则触发快照
save 300 10  #300s内如果有10条写指令,则触发快照

# 文件名称
dbfilename dump.rdb

# 文件保存路径
dir /home/work/app/redis/data/

# 如果

你可能感兴趣的:(实战总结分享)