缓存—Redis持久化AOF方式

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: - AOF日志:记录所有的操作命令,并以文本的形式追加到文件中- RDB快照 :将某一时刻的内存数据,以二进制方式写入磁盘- 混合持久化:Redis4.0版本后新增混合持久化方式,集成RDB和AOF的优点

上一篇中提到Redis持久化的三种方式:

  • AOF日志:记录所有的操作命令,并以文本的形式追加到文件中
  • RDB快照 :将某一时刻的内存数据,以二进制方式写入磁盘
  • 混合持久化:Redis4.0版本后新增混合持久化方式,集成RDB和AOF的优点

为什么需要持久化?

redis缓存的谁都存储在内存当中,如服务器关闭或者Redis服务器守护进程退出,那么内存中的数据就会丢失。

适用场景:把Redis当作数据库使用,储存重要业务数据时,更加需要进行将数据持久化,防止造成影响。如果仅当作缓存使用,可不用考虑持久化。

AOF

AOF:Append Only File

AOF日志实现方式

AOF持久化方式会记录客户端对服务器的每一次写操作命令,并将这些写操作以Redis协议追加保存到以aof为后缀的文件,在Redis服务器重启时,会加载并运行aof文件的命令,以恢复数据。

注意内容:

MySQL数据库都是“写前日志”,即在写数据之前,先把修改的数据记到日志文件中。如mysql的redo log。而这一点和redis是相反的。Redis先执行命令,把数据写入内存,再把日志写入文件

为什么Redis先执行命令,再把数据写入日志?

  • redis写日志之前,无需对命令进行语法检查
  • redis只记录成功的命令
  • 先执行后记录文件,避免阻塞当前的写操作

这样做,产生的不好的后果:

  • 数据可能丢失
  • 可能阻塞其他操作

开启AOF持久化方式

Redis默认不开启AOF持久化,我们自己修改redis.conf配置文件进行启动持久化

# 启动AOF机制
appendonly yes

# AOF文件名
appendfilename “appendonly.aof”

## 写入策略
appendfsync always

## 默认不重写aof文件
no-appendfsync-on-rewrite no

## 保存目录
dir ~/redis/

写入策略三种方式

appendfsync always
#appendfsync everysec
#appendfsync no
  • always:客户端的每个写操作都保存到aof文件中,这种策略安全,但每个写请求都有IO操作,所以也很慢
  • everysec:appendfsync的默认写入策略,每秒写入一次AOF文件
  • no:由操作系统负责何时写入AOF文件,Redis服务器不负责写入,所以此方式不安全,不推荐使用

AOF优缺点:

AOF优点:

  • AOF只追加日志文件,对服务器性能影响小,速度比RDB方式要快,消耗内存较少

AOF缺点:

  • AOF生成的日志文件太大
  • 恢复数据的速度比RDB慢
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1天前
|
存储 缓存 NoSQL
缓存中的主要数据结构和持久化
【5月更文挑战第11天】Redis缓存数据库采用多种数据结构,如动态字符串、链表、字典、跳跃表、整数集合、压缩列表。动态字符串支持高效修改,链表用于列表,字典保存键值对,跳跃表实现有序集合,整数集合存储少量整数,压缩列表节省内存。Redis对象系统支持共享和内存管理,数据库通过键空间和过期策略管理键,过期键通过定时、惰性或定期删除。服务器使用文件事件处理器处理网络I/O,时间事件处理定时任务,如清理过期键。服务器以事件驱动方式运行,兼顾文件事件和时间事件。
81 1
|
1天前
|
缓存 NoSQL 中间件
【后端面经】【缓存】36|Redis 单线程:为什么 Redis 用单线程而 Memcached 用多线程?epoll、poll和select + Reactor模式
【5月更文挑战第18天】`epoll`、`poll`和`select`是Linux下多路复用IO的三种方式。`select`需要主动调用检查文件描述符,而`epoll`能实现回调,即使不调用`epoll_wait`也能处理就绪事件。`poll`与`select`类似,但支持更多文件描述符。面试时,重点讲解`epoll`的高效性和`Reactor`模式,该模式包括一个分发器和多个处理器,用于处理连接和读写事件。Redis采用单线程模型结合`epoll`的Reactor模式,确保高性能。在Redis 6.0后引入多线程,但基本原理保持不变。
15 2
|
2天前
|
缓存 NoSQL Redis
【后端面经】【缓存】36|Redis 单线程:为什么 Redis 用单线程而 Memcached 用多线程?--epoll调用和中断
【5月更文挑战第18天】`epoll`包含红黑树和就绪列表,用于高效管理文件描述符。关键系统调用有3个:`epoll_create()`创建epoll结构,`epoll_ctl()`添加/删除/修改文件描述符,`epoll_wait()`获取就绪文件描述符。`epoll_wait()`可设置超时时间(-1阻塞,0立即返回,正数等待指定时间)。当文件描述符满足条件(如数据到达)时,通过中断机制(如网卡或时钟中断)更新就绪列表,唤醒等待的进程。
27 6
|
3天前
|
NoSQL Redis 缓存
【后端面经】【缓存】36|Redis 单线程:为什么 Redis 用单线程而 Memcached 用多线程?
【5月更文挑战第17天】Redis常被称为单线程,但实际上其在处理命令时采用单线程,但在6.0后IO变为多线程。持久化和数据同步等任务由额外线程处理,因此严格来说Redis是多线程的。面试时需理解Redis的IO模型,如epoll和Reactor模式,以及其内存操作带来的高性能。Redis使用epoll进行高效文件描述符管理,实现高性能的网络IO。在讨论Redis与Memcached的线程模型差异时,应强调Redis的单线程模型如何通过内存操作和高效IO实现高性能。
30 7
【后端面经】【缓存】36|Redis 单线程:为什么 Redis 用单线程而 Memcached 用多线程?
|
5天前
|
NoSQL 算法 Java
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
|
6天前
|
缓存 NoSQL 关系型数据库
【Redis】Redis 缓存重点解析
【Redis】Redis 缓存重点解析
19 0
|
6天前
|
存储 NoSQL 关系型数据库
【Redis】Redis的特性和应用场景 · 数据类型 · 持久化 · 数据淘汰 · 事务 · 多机部署
【Redis】Redis的特性和应用场景 · 数据类型 · 持久化 · 数据淘汰 · 事务 · 多机部署
17 0
|
6天前
|
缓存 NoSQL 关系型数据库
【Redis】Redis作为缓存
【Redis】Redis作为缓存
8 0
|
6天前
|
存储 缓存 监控
利用Redis构建高性能的缓存系统
在现今高负载、高并发的互联网应用中,缓存系统的重要性不言而喻。Redis,作为一款开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息代理。本文将深入探讨Redis的核心特性,以及如何利用Redis构建高性能的缓存系统,并通过实际案例展示Redis在提升系统性能方面的巨大潜力。
|
6天前
|
存储 缓存 NoSQL
【技术分享】求取列表需求的redis缓存方案
【技术分享】求取列表需求的redis缓存方案
30 0