这是一篇包含了介绍性质和吐槽性质的日志。主要介绍一下我学习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. window.onload与$(document).ready()之区别

    1.执行时间 window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行.         $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕. 2 ...

  2. Expression Blend实例中文教程(11) - 视觉管理器快速入门Visual State Manager(VSM)

    Visual State Manager,中文又称视觉状态管理器(简称为VSM),是Silverlight 2中引进的一个概念.通过使用VSM,开发人员和设计人员可以轻松的改变项目控件的视觉效果,在项 ...

  3. 1.文本编辑器-->CKEditor+CKFinder使用与配置

    一.CKEditor介绍 官网地址:http://ckeditor.com CKEditor下载地址:http://ckeditor.com/download CKFinder(免费版本)下载地址:h ...

  4. MemcacheHelper.cs

    using Memcached.ClientLibrary; using System; using System.Collections.Generic; using System.Linq; us ...

  5. Maven运行时找不到xml文件和properties文件的问题解决

    使用Maven构建的项目,包下面的xml文件和properties属性文件默认在运行tomcat插件是不会生成文件到target里面的,需要自己配置 一.第一种解决方法也是最常用的解决方法 在pom. ...

  6. spring框架笔记

    Spring实现依赖注入的两种方式: 1.构造方法注入 2.set方法注入,p标签注入 Spring中事务的两种实现方式: 编程式事务管理 声明式事务管理(推荐) Spring增强类型: Before ...

  7. spring框架-----轻量级的应用开发框架

    一.bean 1.容器实例化 ApplicationContext ac=             new ClassPathXmlApplicationContext("applicati ...

  8. JavaScript 数组对象常用属性

    concat() 用于连接两个或多个数组.该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本. var a = ["aa","ccc"]; var b ...

  9. sql-case when,row_number

    --排序 select Row_Number() over(order by a.UserName) as Num --区分性别 then '男' else '女' end SexName Sqlse ...

  10. VC添加文件到工程出错问题--FileTool.dll

    原文:http://blog.csdn.net/bingdianlanxin/article/details/45112737 在我们的软件开发中,经常需要导入其他文件到我们的工程. 一般,我们会选择 ...