redis 持久化

   Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失。

RDB 持久化

redis提供了RDB持久化的功能,这个功能可以将redis在内存中的的状态保存到硬盘中,它可以手动执行。

也可以再redis.conf中配置,定期执行

RDB持久化产生的RDB文件是一个经过压缩二进制文件,这个文件被保存在硬盘中,redis可以通过这个文件还原数据库当时的状态。

RDB(持久化)
内存数据保存到磁盘
在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)
优点:速度快,适合做备份,主从复制就是基于RDB持久化功能实现
rdb通过再redis中使用save命令触发 rdb rdb配置参数: dir /data/6379/
dbfilename dbmp.rdb 每过900秒 有1个操作就进行持久化 save 900秒 1个修改类的操作
save 300秒 10个操作
save 60秒 10000个操作 save 900 1
save 300 10
save 60 10000

实验

1. 启动redis服务端,准备配置文件

redis.conf 写入(也可以在新建个文件--s15redis.conf写入)
port 6379
daemonize yes #后台运行
logfile /data/6379/redis.log # 日志文件存放的绝对路径
dir /data/6379 # redis的数据文件放的地方
dbfilename s15.rdb # 开启rdb功能,s15是自己定义
save 900 1 #rdb机制 每900秒 有1个修>改记录
save 300 10 #每300秒 10个修改
记录
save 60 10000 #每60秒内 10000修>改记录

2. 启动redis,测试RDB功能

[root@localhost redis-4.0.10]# redis-server redis.conf
[root@localhost redis-4.0.10]# redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set name "tom"
OK
127.0.0.1:6379> save # 通过是 save 触发持久化,使数据写入RDB文件
OK
127.0.0.1:6379>
[root@localhost redis-4.0.10]# ps -ef | grep redis
root 4457 1 0 19:13 ? 00:00:00 redis-server *:6379
root 4464 3349 0 19:14 pts/0 00:00:00 grep --color=auto redis
[root@localhost redis-4.0.10]# kill 4457
[root@localhost redis-4.0.10]# redis-server redis.conf
[root@localhost redis-4.0.10]# redis-cli
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379>

AOF 持久化

AOF(append-only log file)
记录服务器执行的所有变更操作命令(例如set del等),并在服务器启动时,通过重新执行这些命令来还原数据集
AOF 文件中的命令全部以redis协议的格式保存,新命令追加到文件末尾。
优点:最大程序保证数据不丢
缺点:日志记录非常大

redis-client   写入数据  ->  redis-server   同步命令   ->  AOF文件

配置参数

AOF持久化配置,两条参数

appendonly yes
appendfsync always 总是修改类的操作
everysec 每秒做一次持久化
no 依赖于系统自带的缓存大小机制

实验

1. 准备 aof 配置文件

# redis.conf
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
dbfilename dbmp.rdb
requirepass redhat
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfsync everysec

2. 启动redis服务

[root@localhost redis-4.0.10]# redis-server  redis.conf

3. 登录 redis-cli

[root@localhost redis-4.0.10]# redis-cli

4. 设置 keys * ,关闭redis,检查数据是否持久化 (同 RDB)

总结

  rdb:基于快照的持久化,速度更快,一般用作备份,主从复制也是依赖于rdb持久化功能

  aof:以追加的方式记录redis操作日志的文件。可以最大程度的保证redis数据安全,类似于mysql的binlog

redis不重启,切换RDB备份到AOF备份

注意 : 确保redis的版本在 2.2 以上.本文在redis4.0中,通过 config set 命令,从而达到目的.

实验

1. redis.conf 服务端的配置文件

  注明: 这是在 RDB持久化模式下

daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
dbfilename dbmp.rdb
save 900 1 #rdb机制 每900秒 有1个修改记录
save 300 10 #每300秒 10个修改记录
save 60 10000 #每60秒内 10000修改记录

2. 启动redis服务端

[root@localhost redis-4.0.10]#redis-server redis.conf

3. 登录 redis-cli

[root@localhost redis-4.0.10]# redis-cli

4. 通过命令,激活AOF持久化

127.0.0.1:6379>  CONFIG set appendonly yes      #用命令激活aof持久化(临时生效,注意写入到配置文件)
OK
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> CONFIG SET save "" #关闭rdb持久化

5. 将AOF操作,写入配置文件中,永久生效

[root@localhost redis-4.0.10]#vim redis.conf :
port 6379
daemonize yes
logfile /data/6379/redis.log
dir /data/6379
#dbfilename s15.rdb
#save 900 1
#save 300 10
#save 60 10000
appendonly yes
appendfsync everysec

6. 测试AOF数据持久化,杀死redis进程,重新启动

[root@localhost redis-4.0.10]# vim redis.conf       #写入AOF操作到配置文件
[root@localhost redis-4.0.10]# redis-cli
127.0.0.1:6379> keys*
(error) ERR unknown command 'keys*'
127.0.0.1:6379> keys *
1) "age"
2) "name"
127.0.0.1:6379> set addr jjjj
OK
127.0.0.1:6379> keys *
1) "age"
2) "addr"
3) "name"
127.0.0.1:6379>
[root@localhost redis-4.0.10]# ps -ef | grep redis
root 4622 1 0 20:01 ? 00:00:02 redis-server *:6379
root 4684 3349 0 20:19 pts/0 00:00:00 grep --color=auto redis
[root@localhost redis-4.0.10]# kill 4622
[root@localhost redis-4.0.10]# redis-server redis.conf
[root@localhost redis-4.0.10]# redis-cli
127.0.0.1:6379> keys *
1) "addr"
2) "name"
3) "age"
127.0.0.1:6379>

现在,所有的数据就都保存到了AOF文件中.

我们可以坚持RDB或者AOF文件

[root@localhost ~]# cd /data
[root@localhost data]# ls
6379 AllMysql.dump
[root@localhost data]# ls 6379
appendonly.aof redis.log s15.rdb # 有s15.rdb 说明是有RDB备份
# 有appendonly.aof 说明是有 AOF备份

redis的持久化RDB与AOF的更多相关文章

  1. Redis(五)--- Redis的持久化RDB与AOF

    一.Redis数据库 我们都知道Redis是基于内存的数据库,数据是以key-value键值对的方式存储的,那么key-value键值对是随意放在内存中的么,其实Redis的服务会创建很多的数据库空间 ...

  2. redis之持久化RDB与AOF

    redis数据持久化 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. RDB持 ...

  3. Redis的持久化——RDB和AOF

    推荐阅读 Redis 持久化之RDB和AOF --来自ITDragon龙 Redis Persistence --来自Redis官网文档

  4. redis的持久化 rdb和aof

    1.rdb(Redis DataBase) 当满足条件时,redis单独会fork(创建)一个新的线程,会先将内存中的数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次已经持久化 ...

  5. Redis之持久化(RDB AOF)

    Redis 提供了 RDB 和 AOF 两种持久化方案: RDB:生成指定时间间隔内的 Redis 内存中数据快照,是一个二进制文件 dumpr.rdb AOF:记录 Redis 除了查询以外的所有写 ...

  6. 配置方案:Redis持久化RDB和AOF

    Redis持久化方案 Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘.当下次Redis重启时,利 ...

  7. Redis之数据持久化RDB与AOF

    Redis之数据持久化RDB与AOF https://www.cnblogs.com/zackku/p/10087701.html 大家都知道,Redis之所以性能好,读写快,是因为Redis是一个内 ...

  8. redis的持久化(RDB&AOF的区别)

    RDB 是什么? 在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里. Redis会单独创建(fork)一个子进程来进行持久化,会 ...

  9. Linux - redis持久化RDB与AOF

    目录 Linux - redis持久化RDB与AOF RDB持久化 redis持久化之AOF redis不重启,切换RDB备份到AOF备份 确保redis版本在2.2以上 实验环境准备 备份这个rdb ...

随机推荐

  1. Android BroadcastReceiver 注册和反注册

    说起来这个问题很简单,只要注册和反注册成对出现就行,好像很多教材都是如此介绍.但实际开发中,对广播注册和反注册的时机把握还是很重要的. 关于广BroadcastReceiver注册和反注册时机,主要有 ...

  2. EasyMvc入门教程-基本控件说明(7)文字块导航

    文字块导航其实就是开发winform时候常见的 带Title的Group面板..~!@#¥..好吧,没开发过winform的同学看下图: 实现代码如下: @Html.Q().BlockField(). ...

  3. Mockito图书馆

    转载:https://static.javadoc.io/org.mockito/mockito-core/2.12.0/org/mockito/Mockito.html#42 org.mockito ...

  4. UE把环境变量Path改了

    为了比较个文件,装了UE. 文件比较完了,环境变量也被改了. 改还不是写添加式的改,是写覆盖式的改. 搞得ant都起不动了,一看Path被改的那样(C:\hy\soft\ultraedit\Ultra ...

  5. mysql if()一个奇怪的问题

    看起来一切正常......... 但是当使用不等于时 SELECT IF(1!=NULL,1,2) 居然返回2 SELECT IF(1!=NULL,1,2) >2 -- ------------ ...

  6. 2017.04.20 Adams仿真介绍

    Adams 仿真 | 验证"隐性机器人模型"概念,提高视觉伺服精度 产品:Adams行业:科研优势: 1.Adams 仿真可精确预测机器人的位置和方位 2.仿真在理论工作验证中起着 ...

  7. SM Java实现

    [摘要] 本文主要解说"国密加密算法"SM系列的Java实现方法,不涉及详细的算法剖析,在网络上找到的java实现方法比較少.切在跨语言加密解密上会存在一些问题.所以整理此文志之. ...

  8. Android---61---TabHost简单使用

    与TabHost结合使用的组件: TabWidget:代表选项卡的标签条 TabSpec:代表选项卡的一个Tab页面 TabHost不过一个简单的容器,它提供两个方法来创建.加入选项卡 newTabS ...

  9. Leetcode Array 1 twoSum

    Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...

  10. chm文件打不开的解决办法

    我今天在网上找了找C++函数库,下载下来一个 .chm 文件,打开之后发现只显示了目录,内容却显示不出来. 显示是这样:右边区域显示不出来. 在网上查了一下发现CHM文件是网上比较多的电子书籍显示格式 ...