热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于redis:Redis的持久化

开发环境原本一片祥和(外表上看起来),就在为上线做筹备,验证零碎某一个关键性问题的时候,Redis集群忽然不能用了,并给出了上面这段十分“敌对”的提醒。

开发环境原本一片祥和(外表上看起来),就在为上线做筹备,验证零碎某一个关键性问题的时候,Redis集群忽然不能用了,并给出了上面这段十分“敌对”的提醒。

Caused by: redis.clients.jedis.exceptions.JedisDataException: 
    MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk.
    Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). 
    Please check the Redis logs for details about the RDB error.

尽管第一次见到这个问题,然而这里呈现的RDB,只能联想到Redis的长久化。

于是,从长久化开始找问题。
首先是确保生成的rdb文件没有问题,在服务器上执行命令查看rdb的合法性
redis-check-rdb dump.rdb

顺带将aof也检测一下
redis-check-aof appendonly.aof

如果aof文件存在问题,还能够通过命令修复(这里的修复是将有问题的局部删除)
redis-check-aof --fix appendonly.aof

我啰嗦一下redis的长久化机制,Redis是折腾内存的,但内存有个问题,一旦断电,所有的数据都会失落。所以就须要有一个机制来解决这种可能呈现的状况。于是Redis呈现了两种长久化策略,别离是RDBAOF


RDB

RDB就是指Redis DataBase,是Redis中默认开启的长久化策略,在配置文件中处于SNAPSHOTTING模块。

规定

当满足某一种规定时,Redis就会fork一个子过程(一说Redis单线程),将数据写入到一个临时文件,当这个临时文件写完之后,再将原来的dump.rdb文件替换为这个临时文件,这就实现了一次长久化操作。Redis配置文件中默认提供了三种规定:

  • 900秒内(15分钟)至多有一个key变更
  • 300秒内(5分钟)至多有十个key变更
  • 60秒内至多有一万个key变更
    每一种规定被满足都会触发长久化,咱们就能够依据本人的状况批改这个配置或增减配置。
    当然,还有另外两种状况也会生成rdb文件,一种是敞开redis的时候,还有一种是执行save或者bgsave命令的时候;尽管flushall命令也会生成rdb文件,但这条命令是清空数据库,会失去一个空的rdb文件。

复原RDB

将rdb文件放到dir指定的目录下,并确保rdb开启,启动redis即可。

敞开RDB

将所有规定正文后,配置 save ' '

其余配置

  • stop-writes-on-bgsave-error: 当长久化呈现问题时,进行写入redis,默认yes
  • rdbcompression: 对rdb文件做压缩,默认yes
  • rdbchecksum: 对生成的rdb文件做校验,默认yes
  • dbfilename: 保留的rdb文件名称,默认dump.rdb
  • dir: 保留rdb文件的门路;复原rdb数据时将rdb文件放在此目录下

优缺点

RDB文件紧凑,占用空间小;写入rdb时不会占用主过程;适宜大量数据的备份与复原;
RDB只能备份到某个工夫节点,并且可能会失落最初一次备份后的更改数据;此外,fork子过程时,须要一块与主过程雷同大小的内存空间;


AOF

AOF是指 append only file,是一种记录执行命令的形式,将执行命令追加到文件开端,redis配置种默认敞开。处于配置种的 APPEND ONLY MODE模块。

开启

配置文件中批改appendonly值为yes

规定

AOF也有本人的规定:

  • appendfsync always:每一条命令都会做长久化,性能耗费大
  • appendfsync everysec:每一秒做一次长久化,可能会失落一秒内的数据
  • appendfsync no:长久化机会交由操作系统管制,安全性低

复原RDB

将aof文件放到dir指定的目录下,并确保rdb开启,启动redis即可。

其余配置

  • appendfilename:生成aof文件名称,默认appendonly.aof
  • no-apendfsync-on-rewrite: 这个配置就是我查到的解决问题的配置,默认为no,搜到的材料都让我改成yes。不明确为什么要这么改,所以没有批改。
  • auto-aof-rewrite-min-size: 为了防止aof文件过于臃肿,容许aof文件达到某一大小后触发重写,重写会将aof做整合,升高磁盘占用。该配置须要满足上面的百分比。
  • auto-aof-rewrite-percentage: aof重写百分比配置,默认100%。当aof文件达到上一个文件的某个百分比时,触发重写,该配置需满足下面的重写最小尺寸。

完结

在解决问题的时候,还找到了一个很奇怪的景象,cpu为什么这么高?

接下来不晓得怎么解决,又想到之前看过的文章Redis和es被利用挖矿,索性不深究,间接kill。


推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • 本文介绍了2020年计算机二级MSOffice的选择习题及答案,详细解析了操作系统的五大功能模块,包括处理器管理、作业管理、存储器管理、设备管理和文件管理。同时,还解答了算法的有穷性的含义。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 服务器上的操作系统有哪些,如何选择适合的操作系统?
    本文介绍了服务器上常见的操作系统,包括系统盘镜像、数据盘镜像和整机镜像的数量。同时,还介绍了共享镜像的限制和使用方法。此外,还提供了关于华为云服务的帮助中心,其中包括产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题和视频帮助等技术文档。对于裸金属服务器的远程登录,本文介绍了使用密钥对登录的方法,并提供了部分操作系统配置示例。最后,还提到了SUSE云耀云服务器的特点和快速搭建方法。 ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
author-avatar
包千卿_413
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有