Redis - 缓存持久化

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis 持久化的两种方式 RDB 和 AOF ,它们的工作原理以及优缺点

Redis 的缓存持久化有两种技术 : RDB 和 AOF

RDB

Redis 的数据快照

简单说就是将缓存中的所有数据都记录到磁盘中,当Redis发生故障的时候,只需读取快照文件,就可恢复数据

相应的命令是 save 和 bgsave ,这两个命名都可以手动执行RDB持久化,不过

  • save 由 Redis 主线程来执行RDB,会阻塞所有命令
  • bgsave 开启子线程执行RDB,主线程不受影响

如果每次RDB都需要手动输入save或bgsave命令未免太麻烦

因此Redis内部有RDB触发机制,格式 :save [时间] [key的修改次数]
比如 save 300 1 表示300秒内至少有一个key被修改了,则执行 bgsave

AOF

AOF全称 Append Only File (追加文件)。Redis 处理的每一个写命令都会记录在AOF文件中,相当于一个命令日志文件

AOF 的开启方法

找到 redis.conf 文件,其中有一行语句是 appendonly no,因为Redis默认关闭AOF,改为appendonly yes,就可开启AOF,下面还有一行语句 appendfilename "appendonly.aof" 指定AOF文件名

设置 AOF 的记录频率

AOF的执行频率也叫刷盘策略,同样是通过redis.conf 文件进行配置,总共有三档频率

  • appendfsync always : 同步刷盘,每执行一次写命令,就立刻记录到AOD文件
  • appendfsync everysec : 每秒刷盘,写命令先放入AOF缓冲区,然后每隔一秒将缓冲区数据写到AOF文件,这是Redis默认的AOF刷盘策略
  • appendfsync no:操作系统控制,写命名都先放入AOF缓冲区,由操作系统决定何时将缓冲内容写回磁盘

三种刷盘策略由上到下,性能原来越好,但可靠性越来越差,因此实际开发过程中大部分选择 appendfsync everysec 刷盘策略

另外 AOF文件比RDB文件要大的多,而且AOF会记录对同一个key的多次写操作,但只有最后一次是有效的。我们可以通过 bgrewriteaof 命令,让AOF文件执行重写功能,用最少的命令达到相同的效果

比如:
set num 1
set name zyj
set num 3

执行bgrewriteaof命令后,可重写为 mset name zyj num 3

Redis也会在触发阈值时自动去重写AOF文件。阈值也可以在redis.conf中配置:

  • 找到语句 auto-aof-rewrite-percentage [百分比],该语句表示 AOF文件比上次文件增长超过多少百分比触发重写
  • 语句 auto-aof-rewrite-min-size [AOF文件大小],该语句表示AOF文件达到多大就触发重写

RDB 和 AOF 对比

RDB -
优点 : 文件小; 宕机恢复速度快
缺点 : 数据完整性较低; 占用的CPU和内存资源较大

AOF -
优点 :数据完整性较高; 在记录时占用的CPU和内存资源较小(但重写的时候占有很大)
缺点 :文件体积大,较占用磁盘空间;宕机恢复速度较慢

RDB和AOF各有自己的优缺点,如果对数据安全性要求较高,在实际开发中往往会结合两者来使用。

目录
相关文章
|
18天前
|
NoSQL 安全 关系型数据库
Redis:持久化的两种方式
Redis持久化机制主要包括RDB和AOF两种方式。RDB通过生成数据快照进行持久化,支持手动或自动触发,具有加载速度快、文件紧凑等特点,但无法实时保存数据。AOF则记录每个操作命令,保障数据更安全,支持多种写入策略,并可通过重写机制优化文件大小。两者各有优劣,常结合使用以兼顾性能与数据安全。
|
5月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
18天前
|
存储 缓存 NoSQL
Redis专题-实战篇二-商户查询缓存
本文介绍了缓存的基本概念、应用场景及实现方式,涵盖Redis缓存设计、缓存更新策略、缓存穿透问题及其解决方案。重点讲解了缓存空对象与布隆过滤器的使用,并通过代码示例演示了商铺查询的缓存优化实践。
107 1
Redis专题-实战篇二-商户查询缓存
|
10天前
|
存储 缓存 NoSQL
Redis持久化深度解析:数据安全与性能的平衡艺术
Redis持久化解决内存数据易失问题,提供RDB快照与AOF日志两种机制。RDB恢复快、性能高,但可能丢数据;AOF安全性高,最多丢1秒数据,支持多种写回策略,适合不同场景。Redis 4.0+支持混合持久化,兼顾速度与安全。根据业务需求选择合适方案,实现数据可靠与性能平衡。(238字)
|
5月前
|
缓存 NoSQL Java
Redis+Caffeine构建高性能二级缓存
大家好,我是摘星。今天为大家带来的是Redis+Caffeine构建高性能二级缓存,废话不多说直接开始~
731 0
|
18天前
|
缓存 NoSQL 关系型数据库
Redis缓存和分布式锁
Redis 是一种高性能的键值存储系统,广泛用于缓存、消息队列和内存数据库。其典型应用包括缓解关系型数据库压力,通过缓存热点数据提高查询效率,支持高并发访问。此外,Redis 还可用于实现分布式锁,解决分布式系统中的资源竞争问题。文章还探讨了缓存的更新策略、缓存穿透与雪崩的解决方案,以及 Redlock 算法等关键技术。
|
4月前
|
存储 监控 NoSQL
流量洪峰应对术:Redis持久化策略与内存压测避坑指南
本文深入解析Redis持久化策略与内存优化技巧,涵盖RDB快照机制、AOF重写原理及混合持久化实践。通过实测数据揭示bgsave内存翻倍风险、Hash结构内存节省方案,并提供高并发场景下的主从复制冲突解决策略。结合压测工具链构建与故障恢复演练,总结出生产环境最佳实践清单。
119 9
|
5月前
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
194 32
|
5月前
|
缓存 NoSQL Java
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
111 5
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
|
7月前
|
缓存 NoSQL Java
Redis应用—8.相关的缓存框架
本文介绍了Ehcache和Guava Cache两个缓存框架及其使用方法,以及如何自定义缓存。主要内容包括:Ehcache缓存框架、Guava Cache缓存框架、自定义缓存。总结:Ehcache适合用作本地缓存或与Redis结合使用,Guava Cache则提供了更灵活的缓存管理和更高的并发性能。自定义缓存可以根据具体需求选择不同的数据结构和引用类型来实现特定的缓存策略。
405 16
Redis应用—8.相关的缓存框架