Redis持久化方案

  前言:Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。

      Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。可以单独使用其中一种或将二者结合使用。


RDB持久化

  RDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的数据进行快照并持久化到硬盘。

  RDB是Redis默认采用的持久化方式,在redis.conf配置文件中默认有此下配置:

save 900 1

save 300 10

save 60 10000

  save 开头的一行就是持久化配置,可以配置多个条件(每行配置一个条件),每个条件之间是“或”的关系,“save 900 1”表示15分钟(900秒钟)内至少1个键被更改则进行快照,“save 300 10”表示5分钟(300秒)内至少10个键被更改则进行快照。

  在redis.conf中:

         配置dir指定rdb快照文件的位置

         配置dbfilenam指定rdb快照文件的名称

 

  Redis启动后会读取RDB快照文件,将数据从硬盘载入到内存。根据数据量大小与结构和服务器性能不同,这个时间也不同。通常将记录一千万个字符串类型键、大小为1GB的快照文件载入到内存中需要花费20~30秒钟。

 

  问题总结:

    通过RDB方式实现持久化,一旦Redis异常退出,就会丢失最后一次快照以后更改的所有数据。这就需要开发者根据具体的应用场合,通过组合设置自动快照条件的方式来将可能发生的数据损失控制在能够接受的范围。如果数据很重要以至于无法承受任何损失,则可以考虑使用AOF方式进行持久化。


 AOF持久化

  默认情况下Redis没有开启AOF(append only file)方式的持久化,可以通过appendonly参数开启:

    appendonly yes

  开启AOF持久化后每执行一条会更改Redis中的数据的命令,Redis就会将该命令写入硬盘中的AOF文件。AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的,默认的文件名是appendonly.aof,可以通过appendfilename参数修改:appendfilename
appendonly.aof

方案的选择

Redis中数据两种情况:

  一、数据库中有数据,redis中存储的是从数据库中取出的内容,例如首页的图片,这个就不用使用持久化方案;

  二、数据中没有数据,是首先向redis中写入数据,然后通过持久化方案向数据库中保存,这就需要使用持久化方案,例如微博网站,它首先将用户发布的动态、博文等存入redis,然后通过redis向数据库中进行保存。

  这时候,该如何选择持久化方案:如果数据不是非常重要和昂贵,可以选择RDB快照方案(其实只要保持redis不断电,硬盘不损坏的情况下也不会丢失数据);如果数据很重要就要使用AOF方案,保存每一条更改redis数据的命令。




时间: 2024-11-08 19:47:39

Redis持久化方案的相关文章

Redis持久化

Redis持久化 今天在被电话面试的时候问到Redis持久化的问题了,说实话还是自己对Redis并不是太熟悉,导致这块回答的并不是太好,因此打算用这篇文章帮助自己整理一下.文章参考了互联网上的诸多文章,文章末尾给出了原文地址,在此感谢原作者. 持久化 持久化,简单来讲就是将数据放到断电后数据不会丢失的设备中.也就是我们通常理解的硬盘上. 写操作的流程 首先我们来看一下数据库在进行写操作时到底做了哪些事,主要有下面五个过程. 客户端向服务端发送写操作(数据在客户端的内存中) 数据库服务端接收到写请

深度剖析Redis持久化

Redis是一种面向"key-value"类型数据的分布式NoSQL数据库系统,具有高性能.持久存储.适应高并发应用场景等优势.它虽然起步较晚,但发展却十分迅速.  近日,Redis的作者在博客中写到,他看到的所有针对Redis的讨论中,对Redis持久化的误解是最大的,于是他写了一篇长文来对Redis的持久化进行了系统性的论述.文章主要包含三个方面:Redis持久化是如何工作的.这一性能是否可靠以及和其它类型的数据库比较.以下为文章内容:  一.Redis持久化是如何工作的?  什么

redis 持久化 RDB 和 AOF

Redis 持久化: 提供了多种不同级别的持久化方式:一种是 RDB ,另一种是 AOF . RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(points-to-time snapshot) AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集.AOF 文件中的命令全部以Redis协议的格式来保存,新命令会被追加到文件的末尾.Redis还可以在后台对AOF 文件进行重写(rewrite),使得 AOF 文件的体积不会超出保存数据集状态所需的

Redis持久化之大数据服务暂停问题

Redis持久化是有两种方式:RDB和AOF 对这两种方式的官方文档的翻译请看: http://latteye.com/2011/11/redis-persistence.html   RDB就是快照存储,比如"每1个小时对redis进行快照存储".那么, save这个参数就应该设置 save 3600 1000 //前一次快照3600秒后,当有超过1000个key被改动的时候就进行一次快照更新 RDB快照产生dump.rdb文件,当每到快照时间,更新文件. AOF是存储所有的写操作,

redis持久化问题,修改dump快照配置文件不产生预期效果

问题描述 redis持久化问题,修改dump快照配置文件不产生预期效果 redis修改了配置文件rdb存放位置, 用redis-benchmark执行10000次命令,为啥在指定路径下不生成dump.rdb文件? 具体操作如下: 在redis-conf中修改: 1.save 60 3000 2.dir /var/rdb #此路径我已经mkdir 然后,kill掉redis进程,重启redis-server,借用redis自带的压力测试工具,执行10000次命令: ./bin/redis-benc

iOS中几种数据持久化方案:我要永远地记住你!

概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件(属性列表) preference(偏好设置) NSKeyedArchiver(归档) SQLite 3 CoreData 沙盒 在介绍各种存储方法之前,有必要说明以下沙盒机制.iOS程序默认情况下只能访问程序自己的目录,这个目录被称为"沙盒". 1.结构 既然沙盒就是一个文件夹,那就看看里面有什么吧

redis持久化机制

一.Redis提供了哪些持久化机制:       1). RDB持久化:     该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘.        2). AOF持久化:     该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的.     3). 无持久化:     我们可以通过配置的方式禁用Redis服务器的持久化功能,这样我们就可以将Redis视为一个功能加强版的memcached了.   

Redis - 持久化

Redis 分别提供了 RDB 和 AOF 两种持久化机制: RDB 将数据库快照用二进制数据保存到磁盘 AOF 以协议文本的方式将对数据库的写入命令和参数保存在AOF文件中 RDB 拢共分两步,比把大象装冰箱还简单: rdbSave() 保存到磁盘 rdbLoad,重启后加载还原 保存 save和bgsave命令都会保存,前者阻塞主进程,后者fork出子进程进行保存 SAVE时因为AOF写入时后台线程完成所以可以同步进行 BGSAVE时,进行SAVE或者是BGSAVE都会提示错误 还原 启动时

使用Redis搭建持久化K-V存储

最近在项目中需要在多机之间共享一些集合,Hash等有类型的数据结构,如果基于Mysql来存储的话需要预先定义一系列表结构并维护表结构和数据结构的一致性,后续还需要根据时间对数据库做旧数据清理工作,所以开始调研一些能满足下列需求的存储引擎. 具有高可用,持久化的特性. 数据可以设置失效时间,方便自动数据清理. 支持常用数据结构,如集合,有序集合,Hash map,列表等. 支持事务操作,方便原子化的对多个key进行操作. 有Python,Golang语言的客户端. 通过对公司内部的Tair,开源的