广告
返回顶部
首页 > 资讯 > 数据库 >redis持久化存储
  • 992
分享到

redis持久化存储

redis持久化存储 2020-12-12 02:12:11 992人浏览 绘本
摘要

Redis持久化存储 redis持久化存储 redis多被用于缓存和消息中间件,当被用作缓存时,数据的读写都是在内存中进行的,而内存一旦在主机断电或者主机重启时里面的数据将被清空,为保证数据不被丢失,r

redis持久化存储

Redis持久化存储

redis持久化存储

redis多被用于缓存和消息中间件,当被用作缓存时,数据的读写都是在内存中进行的,而内存一旦在主机断电或者主机重启时里面的数据将被清空,为保证数据不被丢失,redis为我们提供两种数据持久化存储方式:RDB,AOF。

RDB持久化存储

RDB持久化是按配置文件中指定的时间间隔,每隔一段时间将当前进程生成数据保存到硬盘名为xx.rdb的二进制文件中。我们也可以手动使用save或者bgsave命令,将新生成的数据手动保存到硬盘的xx.rdb二进制文件中。

save命令:使用save命令要注意,它会阻塞当前redis服务器,直到RDB将数据全部保存到xx.rdb文件中为止,如果是线上环境不建议使用该命令。

使用save命令RDB存储过程如下:

  • 1、用户执行save命令触发RDB存储。
  • 2、redis主进程执行RDB存储,程序当前处于阻塞状态。
  • 3、拷贝xx.rdb到一个临时文件中。
  • 4、将新增的数据写入到xx.rdb的临时文件中。
  • 5、将xx.rdb的临时文件覆盖原来的xx.rdb文件。
  • 6、RDB存储结束,响应其它用户请求。

bgsave命令:redis进程会创建一个子进程,RDB的存储过程是由子进程来负责完成的,完成后自动退出子进程,阻塞只发生在创建子进程这个阶段,因此时间很短,不会影响主进程。

使用save命令RDB存储过程如下:

  • 1、用户执行bgsave命令触发RDB存储。
  • 2、redis主进程先检查当前是否有子进程,如果当前有子进程将不会执行本次操作。如果没有子进程,创建子进程。
  • 3、子进程执行RDB存储,主进程响应用户请求。
  • 4、子进程拷贝xx.rdb到一个临时文件中。
  • 5、子进程将新增的数据写入到xx.rdb的临时文件中。
  • 6、子进程将xx.rdb的临时文件覆盖原来的xx.rdb文件。
  • 7、RDB存储结束,子进程退出。

AOF持久化存储

AOF(append only file 仅追加模式):它是以写日志的方式,将每次写命令追加到xx.aof文件中,当设备断电或重启时,redis server会执行xx.aof文件中记录的命令,通过此种方式实现恢复数据的目的。

AOF持久化存储过程如下:

1、所有写入命令会追加到aof_buf的缓冲区中。
2、AOF根据配置文件中的策略向硬盘的xx.aof文件中追加命令。

对比RDB和AOF

1、RDB是以二进制的方式将数据保存到文件中,AOF是以文本的形式将数据保存在文件中,因此AOF生成的文件会比RDB生成的文件要大的多。
2、RDB是redis server通过子进程来执行持久化存储的,并且RDB是以全量的方式进行保存,因此执行RDB的时间间隔不宜太频繁,否则会影响性能,这样便存在一个空档期,当在这个空档期发生断电或者系统重启时会出现丢失数据的情况。AOF当有写入时,将写入的命令记录到xx.aof文件中,因此它能更好的保证数据不丢失。
3、数据恢复:RDB的方式redis server直接读取xx.rdb文件到内存中,AOF的方式redis server读取xx.aof文件,通过执行文件中的命令的方式来实现数据恢复,因此它的数据恢复速度相比于RDB的方式要慢。

RDB存储实例

由于是演示,这里的配置文件也就进行了简单设置,我的配置文件内容如下:

# 安装redis
[root@zabbix-server ~]# wget -P /opt/source/ Http://download.redis.io/releases/redis-5.0.4.tar.gz
[root@zabbix-server ~]# tar -zxvf /opt/source/redis-5.0.4.tar.gz -C /opt/
[root@zabbix-server ~]# cd /opt/redis-5.0.4/
[root@zabbix-server redis-5.0.4]# make && make install  //默认在/usr/local/bin所以就不用我们设置环境变量了

# 创建工作目录
[root@zabbix-server ~]# mkdir /opt/redis-5.0.4/redis_config/  # 存放配置文件的目录
[root@zabbix-server ~]# mkdir /opt/redis-5.0.4/data/  # 日志,RDB,AOF等数据的存储目录

# 自定义配置文件
[root@zabbix-server ~]# vim /opt/redis-5.0.4/redis_config/rdb_config.conf 
bind 192.168.10.100    # 本机地址
port 9000              # 绑定端口
daemonize yes          # 后台运行
dir /opt/redis-5.0.4/data/  # redis数据存放的目录
dbfilename rdb_data.rdb     # RDB文件的名字
# 格式是:save   ,含义是在 seconds 秒之后至少有 changes个keys 发生改变则保存一次
save 900 1  # 900秒后如果有一个KEY发生了变化触发RDB
save 300 10
save 60 10000

验证配置

运行redis服务

[root@zabbix-server ~]# redis-server /opt/redis-5.0.4/redis_config/rdb_config.conf

如果服务运行成功你会看到如下:

登录redis数据库,并写入数据。

[root@zabbix-server ~]# redis-cli -h 192.168.10.100 -p 9000  # 登录redis
192.168.10.100:9000> ping  # 检测连接 
PONG
192.168.10.100:9000> set name XiaoMing  #数据库中添加数据
OK
192.168.10.100:9000> set age 12
OK
192.168.10.100:9000> keys *             # 查看添加后的数据
1) "age"
2) "name"
192.168.10.100:9000> get name
"XiaoMing"
192.168.10.100:9000> get age
"12"
192.168.10.100:9000> save   # 手动触发RDB
OK
192.168.10.100:9000> 

使用kill结束redis server

[root@zabbix-server ~]# kill -9 redis server的PID

如果执行成功你会看到如下:

验证 一: 到/opt/redis-5.0.4/data/目录下查看是否生成了rdb_data.rdb 文件

验证 二:重新运行redis server服务,验证数据是否丢失

到此RDB持久化存储就简单介绍到这里,关于RDB持久化存储需要注意的就是配置文件中的save那个选项。

[root@zabbix-server ~]# vim /opt/redis-5.0.4/redis_config/rdb_config.conf 
bind 192.168.10.100    # 本机地址
port 9000              # 绑定端口
daemonize yes          # 后台运行
dir /opt/redis-5.0.4/data/  # redis数据存放的目录
dbfilename rdb_data.rdb     # RDB文件的名字
# 格式是:save   ,含义是在 seconds 秒之后至少有 changes个keys 发生改变则保存一次,这个是redis默认给的值,我们可以根据具体实际情况自行调整
save 900 1  # 900秒后如果有一个KEY发生了变化触发RDB
save 300 10
save 60 10000

AOF存储实例

我的配置文件内如如下:

[root@zabbix-server ~]# vim /opt/redis-5.0.4/redis_config/aof_config.conf
bind 192.168.10.100   # 绑定IP地址
port 9001             # 绑定端口
daemonize yes
dir /opt/redis-5.0.4/data/   # redis 的工作目录
appendfilename aof_data.aof  # AOF文件的名字
appendonly yes               # 启用AOF持久化存储
appendfsync everysec         # 可选值always、everysec和no
# 设置为always时,每次收到命令写入时,都会调用fsync(linux为调用fdatasync)强制将数据写入到硬盘的xx.aof文件中,
# 此时会出现阻塞直到数据被完全同步到硬盘的xx.aof中,该模式下可以很好的保证数据不被丢失,但会严重影响redis服务器的性能,很少用。
# 设置为everysec时,每次收到命令写入时,先调用系统write将数据写入到系统缓冲区中,由单独的线程每秒调用一次fsync(Linux为调用fdatasync)将数据同步到xx.aof文件中,
# 如果系统在线程还没有调用fsync时会出现数据丢失,推荐使用该模式,该模式是在性能和存储上选用折中的方式,推荐使用。
# 设置为no时,每次收到命令写入时,先调用系统write将数据写入到系统缓冲区中,后由操作系统负责将缓冲区中的数据写入到xx.aof文件中,
# 这个周期是在30秒以内,该模式是性能最好,但是不能很好的保证数据不被丢失,不推荐使用。

# AOF是向xx.aof文件追加写命令,因此文件会越来越大,并且有可能会有重复的命令,因此需要对xx.aof文件进行重写去掉重复的命令,来减小文件的体积。
auto-aof-rewrite-min-size 64mb   # AOF文件初始最小值
auto-aof-rewrite-percentage 100  # 当前AOF文件大小是上一次重写后的AOF文件大小的2倍后,进行重写

启动redis 服务

[root@zabbix-server ~]# redis-server /opt/redis-5.0.4/redis_config/aof_config.conf 

登录redis写入数据

[root@zabbix-server ~]# redis-cli -h 192.168.10.100 -p 9001  # 登录redis
192.168.10.100:9001> ping   # 查看链接状态
PONG
192.168.10.100:9001> keys *  # 查看数据库中的键
(empty list or set)
192.168.10.100:9001> set test HelloWorld  # 添加数据
OK
192.168.10.100:9001> set damo HaHaHa
OK
192.168.10.100:9001> keys *  # 查看添加后的数据
1) "test"
2) "damo"
192.168.10.100:9001> get test
"HelloWorld"
192.168.10.100:9001> get damo
"HaHaHa"
192.168.10.100:9001> 

结束redis服务

[root@zabbix-server ~]# kill -9  AOF的进程PID # 杀掉AOF的redis服务

执行完成后你会看到如下:

验证 一:在/opt/redis-5.0.4/data/下查看是否存在aof_data.aof

验证 二:登录数据库查看数据是否丢失

启动redis服务

[root@zabbix-server ~]# redis-server /opt/redis-5.0.4/redis_config/aof_config.conf 

登录数据库查看结果

 到此redis持久化存储就简单介绍到这里,关于AOF还有很多配置选项这里就不一一列举了,感兴趣的朋友可以查看配置文件根据具体情况了解更多内容。

 

您可能感兴趣的文档:

--结束END--

本文标题: redis持久化存储

本文链接: https://www.lsjlt.com/news/6977.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • redis持久化存储
    redis持久化存储 redis持久化存储 redis多被用于缓存和消息中间件,当被用作缓存时,数据的读写都是在内存中进行的,而内存一旦在主机断电或者主机重启时里面的数据将被清空,为保证数据不被丢失,r...
    99+
    2020-12-12
    redis持久化存储
  • Redis持久化存储详解
    为什么要做持久化存储 持久化存储是将 Redis 存储在内存中的数据存储在硬盘中,实现数据的永久保存。我们都知道 Redis 是一个基于内存的 nosql 数据库,内存存储很容易造成数据的丢失,因为当服务器关机等一些异常情况都会...
    99+
    2018-04-22
    Redis持久化存储详解
  • redis怎么做持久化存储
    Redis可以通过持久化存储来保证数据的持久性。Redis提供了两种持久化存储的方式:1. RDB(Redis Database)持...
    99+
    2023-09-04
    redis
  • Redis持久化存储(AOF与RDB)
    Redis持久化存储 一部分转自: https://blog.csdn.net/canot/article/details/52886923 不能说的秘密的博客 求知若饥,虚心若愚 一部分来自: http://redis.io/topics...
    99+
    2015-06-04
    Redis持久化存储(AOF与RDB)
  • redis持久化存储是什么
    这篇文章主要介绍redis持久化存储是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!redis概述 REmote DIctionary Server(Redis)是一个基于key...
    99+
    2022-10-18
  • Redis持久化存储详解(一)
    为什么要做持久化存储 持久化存储是将 Redis 存储在内存中的数据存储在硬盘中,实现数据的永久保存。我们都知道 Redis 是一个基于内存的 nosql 数据库,内存存储很容易造成数据的丢失,因为当服...
    99+
    2022-10-18
  • Redis持久化存储机制是什么
    这篇文章主要讲解了“Redis持久化存储机制是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis持久化存储机制是什么”吧!Redis 的数据全部在内存里,如果突然宕机,数据就会全部...
    99+
    2023-06-27
  • Scrapy持久化存储
    基于终端指令的持久化存储   保证爬虫文件的parse方法中有可迭代类型对象(通常为列表or字典)的返回,该返回值可以通过终端指令的形式写入指定格式的文件中进行持久化操作; 执行输出指定格式进行存储:将爬取到的数据写入不同格式的文件中进行...
    99+
    2023-01-30
    持久 Scrapy
  • redis的持久化
    为什么要持久化?在不考虑服务器宕机的情况下,是不需要把内存中的数据保存到磁盘,来做持久化的。持久化,就是专门为宕机准备的补救措施。redis有rdb和aof两种持久化机制。一、RDB (Redis Data...
    99+
    2022-10-18
  • Redis 的持久化
    原文链接: https://www.changxuan.top/p=1386   Redis 是一个非关系型的内存数据库,使用内存存储数据是它能够进行快速存取数据的原因之一。 在实际应用中,常有人提倡把 Redis 只作为一种能够提高用...
    99+
    2018-01-28
    Redis 的持久化
  • Redis之持久化
    redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化。redis支持两种持久化方式: 1、snapshotting(快照)也是默认方式。将内存中的数据以快照...
    99+
    2022-10-18
  • Redis如何监控持久化和优化持久化?
    Redis持久化过程一直是影响redis性能的常见因素,如何监控持久化以及如何优化持久化过程呢?下面我们就一起来看看吧。fork的监控及优化不管是使用哪种持久化,RDB持久化或AOF重写,主进程都会fork...
    99+
    2022-10-18
  • Redis持久化机制
    1、Redis数据持久化的必要性 由于redis是基于内存的数据库,面临数据掉电易失的风险,要避免数据丢失,最好将内存数据持久化到磁盘等永久存储介质上。服务重启时,会先加载磁盘文件内的数据到内存,完成数据恢复。 2、RDB(Red...
    99+
    2020-06-06
    Redis持久化机制
  • redis数据持久化
    1 redis是内存型的数据库 redis数据放在内存中 重启服务器丢失数据 重启redis服务丢失数据 断电丢失数据 为了防止redis数据丢失, 进行持久化, 所以将数据写入到一个文件中来实现 2 rdb持久化 在配置文件中, 添加rd...
    99+
    2021-06-10
    redis数据持久化
  • Redis之--rdb持久化
    持久化:通俗讲,下次开机还有数据,断电后不会丢失数据,存放于磁盘。 Redis:rdb快照持久化每隔N分钟或N次写操作后,从内存dump数据形成RDB文件。压缩,放在备份目录。 参数详解:从下往上看save...
    99+
    2022-10-18
  • Redis 持久化详解
    http://www.redis.cn/topics/persistence.html 持久化 Redis 如同其他的存储组件一样,提供了两类持久化方式:快照,和全量追加日志。 RDB - 快照 在默认情况下, Redis 将数据库...
    99+
    2015-08-16
    Redis 持久化详解
  • Redis的持久化RDB
    dbfilename redis.db  //持久化的文件dir /home/redis/6379    //文件所在目录save 900 1  ...
    99+
    2022-10-18
  • Redis持久化之AOF
    背景:RDB不足之处1.耗时,耗性能生成快照文件耗时,load快照文件耗时Fork子进程网络开销写文件磁盘I/O开销 2.不可控,丢失数据会丢失最后一次快照最后操作的数据。 一、工作流程Redis写操作...
    99+
    2022-10-18
  • redis怎么持久化
    redis怎么持久化?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。redis怎么持久化1.RDB保存多份完整备份,对 IO 影...
    99+
    2022-10-18
  • ActiveMQ(09):ActiveMQ消息存储持久化
    一、简介1.1 描述 ActiveMQ不仅支持persistent和non-persistent两种方式,还支持消息的恢复(recovery)方式、重新投递等1.2 PTP与PUB/SUB1.2....
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作