这是一篇包含了介绍性质和吐槽性质的日志。主要介绍一下我学习redis持久化时候被坑的经历。redis的使用介绍现在没有打算写,因为比较多,以我如此懒的性格。。。好吧,还是有点这方面想法的,不过一篇博客肯定是写不下,要写的话以后慢慢写出一个系列来。今天先说序列化。
首先,我们都知道redis是个内存数据库,也就是所有数据都放在内存中的。那么如果进程挂掉了,或者系统重启的时候,内存就会清理掉了。为了保住这些数据,redis做了持久化的功能,也就是把数据库中的数据写入磁盘中保存起来。如果不幸服务器挂掉了,再次启动redis-server的时候,会从磁盘中自动恢复这些数据。
关于redis持久化的方法,RDB和AOF两种方式,百度一抓一大把,我就不啰嗦了。下面留的参考文章里面有介绍。redis中默认使用的是RDB方式。某篇文章说,官方推荐RDB方式足够了,除非对数据实时性要求特别高的。我想了想我们对数据实时性要求应该不太高,而且也不太会频繁发生变化,所以就采用RDB方式了。
我在数据库中存了几个数,然后kill掉了redis-server的进程,再启动,诶?说好的自动恢复呢?数据库里明明啥都没有啊!检查配置文件 /etc/redis/redis.conf中:
save
save
save
都是默认的,没错啊!特意看了看这几个参数的解释:
#   after  sec ( min) if at least  key changed
# after sec ( min) if at least keys changed
# after sec if at least keys changed
大概是说,如果900秒之内有至少1个key发生变化,就保存快照;或者,300秒之内有至少10个key发生变化,就保存快照;再或者,60秒内有至少10000个key发生变化,就保存快照。各save之间是or的关系,满足一条即开始执行。
然而我的数据并没有保存到磁盘上。百度一下,info看看,发现一行
rdb_last_bgsave_status:err
呃,在redis-cli中执行
config set stop-writes-on-bgsave-error no
通过关闭配置项stop-writes-on-bgsave-error,解决快照出错的问题。然后执行save手动持久化,还是不行。what gui?
后来在询问别人的之后,大神说,基本上只会是内存和磁盘的问题,没有写权限。权限?难道说。。。
我把redis-server关掉,然后以sudo方式启动,就ok了。
这时候再用info查,rdb_last_bgsave_status的位置已经变成了ok。我用程序往数据库里写了200多条数据,查看一下日志(位于/var/log/redis/redis-server.log)
25763:M 27 Jul 17:35:43.688 * 1 changes in 900 seconds. Saving...
25763:M 27 Jul 17:35:43.690 * Background saving started by pid 27377
27377:C 27 Jul 17:35:43.694 * DB saved on disk
27377:C 27 Jul 17:35:43.695 * RDB: 4 MB of memory used by copy-on-write
呕液,保存快照成功~
再次kill掉redis-server进程,然后sudo redis-server &启动,用keys *查看。诶???说好的自动恢复呢???还是没有啊!
于是又查,查到原来是在启动时候需要带上配置文件。再启动:
sudo redis-server /etc/redis/redis.conf &
然而特喵的redis告诉我,vm-enabled这个参数它不认识。纳尼?你们家自己的参数你自己不认识?
上网查了查,最后查到官网(http://www.redis.io/topics/virtual-memory ),上面说:
IMPORTANT NOTE: Redis VM is now deprecated. Redis 2.4 will be the latest Redis version featuring Virtual Memory (but it also warns you that Virtual Memory usage is discouraged). We found that using VM has several disadvantages and problems. In the future of Redis we want to simply provide the best in-memory database (but persistent on disk as usual) ever, without considering at least for now the support for databases bigger than RAM. Our future efforts are focused into providing scripting, cluster, and better persistence.
大概意思是说,vm这个东西我们现在已经废弃掉了,最后一个能使用的版本是2.4,以后都没了。我们觉得这个东西太low,一点都不符合我们高大上的定位,又不好用。
好吧,我假装懂了。我把vm相关的几个参数都注释掉再试,结果还是不行。在官网上又乱翻,结果无意中发现了一个页面(http://www.redis.io/topics/config ),上面写了不同版本的配置文件。页面是酱婶的:
于是我就震撼了,redis官方这是有多懒啊!更新了版本,不更新config文件,我redis3.0.7的版本,里面居然还是2.4以前的配置文件?!
点进3.0,把里面的配置文件内容拷下来,粘贴进我的配置文件里,然后修改一下守护进程、日志、RDB持久化这几个地方,再启动一下redis-server,再尝试手动及自动快照——终!于!成!功!了!就这样,本来是默认的持久化,让我活生生的搞了大半天。
就酱吧。。。我想静静的一个人吹吹空调,思考一下人生。。。
 
PS:参考资料(排名不分先后):

redis持久化那些事(kēng)儿的更多相关文章

  1. 关于Redis持久化

    Redis有两种持久化的方式:快照(RDB文件)和追加式文件(AOF文件) RDB持久化方式是在一个特定的间隔保存某个时间点的一个数据快照. AOF(Append only file)持久化方式则会记 ...

  2. 解密Redis持久化

    原文 http://blog.nosqlfan.com/html/3813.html 本文内容来源于Redis作者博文,Redis作者说,他看到的所有针对Redis的讨论中,对Redis持久化的误解是 ...

  3. 深度剖析Redis持久化

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt118 Redis是一种面向"key-value"类型数据 ...

  4. Redis持久化方式的选择

    本文将介绍Redis持久化的两种方式:快照持久化和AOF持久化,并对两种方法进行分析和对比,方便在实际中做出选择. 持久化 什么是持久化 Redis所有数据保存在内存中,对数据的更新将异步地保存到磁盘 ...

  5. 五、Redis持久化配置

    转载:[https://www.cnblogs.com/xingzc/p/5988080.html] Redis提供的持久化机制(RDB和AOF) Redis提供的持久化机制 Redis是一种面向“k ...

  6. redis持久化数据的机制——转发

    转载:https://www.cnblogs.com/xingzc/p/5988080.html Redis提供的持久化机制(RDB和AOF)   Redis提供的持久化机制 Redis是一种面向“k ...

  7. 缓存系列之四:redis持久化与redis主从复制

    一:redis 虽然是一个内存级别的缓存程序,即redis 是使用内存进行数据的缓存的,但是其可以将内存的数据按照一定的策略保存到硬盘上,从而实现数据持久保存的目的,redis支持两种不同方式的数据持 ...

  8. [转]Redis作者:深度剖析Redis持久化

    From : http://www.iteye.com/news/24675 Redis是一种面向“key-value”类型数据的分布式NoSQL数据库系统,具有高性能.持久存储.适应高并发应用场景等 ...

  9. Redis持久化之rdb&aof

    Redis有两种持久化的方式:快照(RDB文件)和追加式文件(AOF文件) RDB持久化方式是在一个特定的间隔保存某个时间点的一个数据快照. AOF(Append only file)持久化方式则会记 ...

随机推荐

  1. Unity3d编辑器扩展学习笔记

    编辑器扩展 1.添加菜单栏:把特性应用于静态方法 参数1:菜单名的空格后面是定义快捷键(单符号得用"_"开头,组合键%=Ctrl,#=Shift,&=Alt) 参数2:通过 ...

  2. JRebel - 给IDE安装JRebel插件

    JRebel对于很多人来说已经并不陌生了,一搜一大把. 用过JRebel后发现,这对于Java开发简直不可缺少. 尽管其价格有点春节国庆期间的各种交通费用——打劫! 即使如此也出现了有"分享 ...

  3. IIS网站不能访问

    摘要:IIS环境下,部署的网站在服务器上可以正常访问,客户端却不能访问. 原因:防火墙入站规则万维网服务没有开启.

  4. ASP.NET 4.5.256 尚未在Web服务器上注册。

    最近在网上下载的一个原型用VS2012打开报错如下: 解决方法: 打开网址:http://blogs.msdn.com/b/webdev/archive/2014/11/11/dialog-box-m ...

  5. springboot伪静态

    在日常网站访问中,会把动态地址改造成伪静态地址. 例如: 访问新闻栏目 /col/1/,这是原有地址,如果这样访问,不利于搜索引擎检索收录,同时安全性也不是很好. 改造之后: /col/1.html. ...

  6. 监听域对象创建和销毁的Listener

    1.什么是Servlet监听器? 先来看看什么是监听器.监听器是专门用于对其它对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时立即采取相应的行动.Servlet监听器是S ...

  7. swoole安装

    转自:http://blog.csdn.net/u014207604/article/details/49926207 Windows 下安装 swoole 具体步骤: Swoole,原本不支持在Wi ...

  8. oracle中,改变表名和字段名的大小写

    1.将表名和字段名改为大写  见--http://www.cnblogs.com/wenboge/articles/4121331.html 2.将表名和字段名改为小写 ①改表名为小写 begin f ...

  9. flask 继承模版的基本使用

  10. JS里的居民们6-数组排序

    编码 var arr = [43, 54, 4, -4, 84, 100, 58, 27, 140]; 将上面数组分别按从大到小以及从小到大进行排序后在console中输出 var arr = ['a ...