Redis数据库【二】持久化

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 文章目录前言RDBAOF

前言

什么是持久化?

为什么需要持久化?

众所周知Redis数据库中的数据都是存放在内存中,这种方式效率虽高,但是存在一个非常严重的问题,那就是如果突然停电,数据不久没了吗,所以…

持久化派上用场了,我们需要将我们的数据备份到硬盘上,防止断电或是机器故障导致的数据丢失。

持久化的实现方式有两种:

  1. RDB:直接保存当前已经存储的数据,相当于复制内存中的数据到硬盘上,需要恢复数据时直接读取即可;
  2. AOF:保存我们存放数据的所有过程,需要恢复数据时,只需要将整个过程完整地重演一遍就能保证与之前数据库中的内容一致。

RDB

save
-- 在执行过程中会占用一定时间,但是也可以单独开一个进程
bgsave

命令执行后,会在服务端目录下生成一个dump.rdb文件,

文件中保存了内存中存放的数据,

当服务器重启后,会自动加载里面的内容到对应数据库中。保存后我们可以关闭服务器:

shutdown

大致流程

不是所以方法都是十全十美的,肯定是有缺点的,当数据库的数据量太大,那么复制一次就需要花费大量的时间。所以我们可以设置每隔一段时间自动进行保存。

save 10 66 # 10秒)内有66个写入

AOF

虽然RDB能够很好地解决数据持久化问题,但是它的缺点也很明显:每次都需要去完整地保存整个数据库中的数据,同时后台保存过程中也会产生额外的内存开销,最严重的是它并不是实时保存的,如果在自动保存触发之前服务器崩溃,那么依然会导致少量数据的丢失。

而AOF就是另一种方式:

它会以日志的形式将我们每次执行的命令都进行保存,服务器重启时会将所有命令依次执行,通过这种重演的方式将数据恢复,这样就能很好解决实时性存储问题。

AOF持久化策略(默认每秒):

在redis.windows.conf修改参数

appendfsync always 
--同步持久化,每次发生数据变更会被立即记录到磁盘,性能差但数据完整性比较好
appendfsync everysec 
--(异步操作,每秒记录,如果一秒钟内宕机,有数据丢失)
appendfsync no 
--(将缓存回写的策略交给系统,linux 默认是30秒将缓冲区的数据回写硬盘的)
appendonly yes
# appendfsync always
appendfsync everysec
# appendfsync no

但是AOF的缺点也很明显,每次服务器启动都需要进行过程重演,相比RDB更加耗费时间,并且随着我们的操作变多,不断累计,可能到最后我们的aof文件会变得很大。但是我们也有相应的办法来解决。

Redis有一个AOF重写机制进行优化,比如我们执行了这样的语句:

lpush test 666
lpush test 777
lpush test 888

实际上用一条语句也可以实现

lpush test 666 777 888

也可以在配置文件中配置自动重写

# 百分比计算
auto-aof-rewrite-percentage 100
# 当达到这个大小时,触发自动重写
auto-aof-rewrite-min-size 64mb

最后我们再来进行一下总结:

  • 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
相关文章
|
22天前
|
存储 NoSQL Redis
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
Redis持久化、RDB和AOF方案、Redis主从集群、哨兵、分片集群、散列插槽、自动手动故障转移
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
|
5天前
|
存储 缓存 NoSQL
Redis 大 Key 对持久化的影响及解决方案
Redis 大 Key 对持久化的影响及解决方案
13 1
|
5天前
|
存储 NoSQL 安全
8)详解 Redis 的配置文件以及数据持久化
8)详解 Redis 的配置文件以及数据持久化
12 0
|
5天前
|
存储 缓存 NoSQL
深入探究Redis的AOF持久化:保障数据安全与恢复性能的关键机制
深入探究Redis的AOF持久化:保障数据安全与恢复性能的关键机制
14 0
|
2月前
|
NoSQL Redis
Redis 临时manifest修改问题之确保被持久化到磁盘如何解决
Redis 临时manifest修改问题之确保被持久化到磁盘如何解决
|
3月前
|
canal 缓存 NoSQL
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;先删除缓存还是先修改数据库,双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
|
3月前
|
NoSQL Redis 数据库
redis 持久化机制及配置
redis 持久化机制及配置
68 4
|
3月前
|
NoSQL Linux Redis
Redis性能优化问题之想确认Redis延迟变大是否因为fork耗时导致的,如何解决
Redis性能优化问题之想确认Redis延迟变大是否因为fork耗时导致的,如何解决
|
3月前
|
监控 NoSQL Redis
下一篇
无影云桌面