文档章节

redis问题接囧办法及经验

Nob
 Nob
发布于 2014/10/05 15:31
字数 968
阅读 9962
收藏 16

1、redis持久化,来自官方说明

如何选择使用哪种持久化方式?

一般来说, 如果想达到足以媲美 PostgreSQL 的数据安全性, 你应该同时使用两种持久化功能。

如果你非常关心你的数据, 但仍然可以承受数分钟以内的数据丢失, 那么你可以只使用 RDB 持久化。

有很多用户都只使用 AOF 持久化, 但我们并不推荐这种方式: 因为定时生成 RDB 快照(snapshot)非常便于进行数据库备份, 并且 RDB 恢复数据集的速度也要比 AOF 恢复的速度要快, 除此之外, 使用 RDB 还可以避免之前提到的 AOF 程序的 bug 。

Note: 因为以上提到的种种原因, 未来我们可能会将 AOF 和 RDB 整合成单个持久化模型。 (这是一个长期计划。)

接下来的几个小节将介绍 RDB 和 AOF 的更多细节。

快照

在默认情况下, Redis 将数据库快照保存在名字为 dump.rdb的二进制文件中。你可以对 Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时, 自动保存一次数据集。你也可以通过调用 SAVE或者 BGSAVE , 手动让 Redis 进行数据集保存操作。

比如说, 以下设置会让 Redis 在满足“ 60 秒内有至少有 1000 个键被改动”这一条件时, 自动保存一次数据集:

save 60 1000

这种持久化方式被称为快照 snapshotting.

工作方式

当 Redis 需要保存 dump.rdb 文件时, 服务器执行以下操作:

  • Redis 调用forks. 同时拥有父进程和子进程。

  • 子进程将数据集写入到一个临时 RDB 文件中。

  • 当子进程完成对新 RDB 文件的写入时,Redis 用新 RDB 文件替换原来的 RDB 文件,并删除旧的 RDB 文件。

这种工作方式使得 Redis 可以从写时复制(copy-on-write)机制中获益。

只追加操作的文件(Append-only file,AOF)

快照功能并不是非常耐久(durable): 如果 Redis 因为某些原因而造成故障停机, 那么服务器将丢失最近写入、且仍未保存到快照中的那些数据。

从 1.1 版本开始, Redis 增加了一种完全耐久的持久化方式: AOF 持久化。

你可以在配置文件中打开AOF方式:

appendonly yes

从现在开始, 每当 Redis 执行一个改变数据集的命令时(比如 SET), 这个命令就会被追加到 AOF 文件的末尾。这样的话, 当 Redis 重新启时, 程序就可以通过重新执行 AOF 文件中的命令来达到重建数据集的目的。



2、问题MISCONF Redis is configured to save RDB snapshots

127.0.0.1:6379> set k1 "nob"

(error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

出现如上错误是因为磁盘无法写入,缘由:应该是之前强制停止redis快照导致

我的解囧,重启机器没问题了,哈哈哈,就是因为几次强制停止造成的

有人的解囧如下

config set stop-writes-on-bgsave-error no

如果是内存问题应该如下办法,具体查看日志,

请在/etc/sysctl.conf 添加一项 'vm.overcommit_memory = 1' ,然后重启(或者运行命令'sysctl vm.overcommit_memory=1' )使其生效。


[参考文献]

1、http://www.redis.cn/topics/persistence.html  官方文档对于持久化的说明

2、http://www.linuxidc.com/Linux/2012-07/66079.htm  从Redis的数据丢失说起

3、http://www.redicecn.com/html/Linux/20131125/468.html  MISCONF Redis is configured to save RDB 内存问题引起

4、http://blog.csdn.net/chenggong2dm/article/details/17325241   磁盘满了也报错 MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk


© 著作权归作者所有

下一篇: redis实践总结
Nob

Nob

粉丝 18
博文 87
码字总数 58773
作品 0
东城
个人站长
私信 提问
redis 缓存结构设计问题

最近准备将所有数据统统放入redis中,以减少数据库查询次数。 现需要将简历的信息存入redis中,使用hash结构来保存姓名,性别,年龄,工作年限。 每一份简历还有包含多个标签(tag),还包含...

燧人氏
2015/06/01
1K
9
SELinux开启状态,Redis无法自动启动。

补充一点信息: 问题是,我对audit2allow这个工具完全不了解,不清楚怎么利用这些信息。 -------------------------------------------------------------------------- Redis安装之后,建立...

有欲
2017/04/17
193
1
mac 安装PHPredis扩展

mac 安装PHPredis扩展 redis的PHP的扩展在pecl网站上居然没有。查了下redis官方的clients页面,发现PHP的客户端居然有这么多,囧了呀。仔细看了一遍,发现官方推荐的客户端倒也不多,就只有两...

战斗机
2014/02/25
0
0
聊聊最近带个项目开发心得

唉,趁末日还没到来,赶紧把项目昨晚上线。可是心有余力而不足啊,team有3,4个人,为什么不是3个或是4个呢?由于小公司还有其他的项目维护的杂事经常叫团队开发的人去做其他事,唉这些就别扯...

黄文祥
2012/12/13
1K
14
调用google地图api的简单封装

本来想用闭包,但是发觉貌似callback不能调用闭包内的函数啊。 囧只能全局变量了,不知道有没得人有更好的办法 var node = {};var pro = {};var listener = {}; function map(node,pro,list...

十一文
2012/12/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

iOS TableView层级结构剖析

首先上图 下面来分析一下tableView的层级结构 tableView的组成: 1.整个tableView有且仅有一个头部和尾部就是tableViewHeadView和tableViewFooterView2.tableView 可以有多个section,一个s...

HOrange
20分钟前
2
0
HDFS核心工作原理绘图剖析

namenode元数据管理示意图 客户端写数据到HDFS流程图

须臾之余
35分钟前
1
0
springMVC 文件上传

相关依赖 使用 springMVC 提供的文件上传需要在项目中加入两个 jar 包,对应的 maven 的依赖分别是:commons-io 和 commons-fileupload <dependency> <groupId>commons-io</groupId> ......

dahuil
56分钟前
2
0
以太坊中文文档翻译-智能合约

本文原文链接 点击这里获取Etherscan API 中文文档(完整版) 完整内容排版更好,推荐读者前往阅读。 智能合约(Contracts) 智能合约相关的 API,接口的参数说明请参考Etherscan API 约定, 文...

Tiny熊
今天
3
0
Tomcat

16.1 Tomcat介绍 16.2 安装jdk 16.3 安装Tomcat 16.4 配置Tomcat监听80端口 16.5/16.6/16.7 配置Tomcat虚拟主机 16.8 Tomcat日志 扩展 java容器比较 http://my.oschina.net/diedai/blog/2713......

tobej
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部