这是一篇包含了介绍性质和吐槽性质的日志。主要介绍一下我学习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. Go语言备忘录(1):基本数据结构

    本文内容是本人对Go语言的变量.常量.数组.切片.映射.结构体的备忘录,记录了关键的相关知识点,以供翻查. 文中如有错误的地方请大家指出,以免误导!转摘本文也请注明出处:Go语言备忘录(1):基本数据 ...

  2. android studio应用获取系统属性权限(SystemProperties)

    dependencies { provided files(getLayoutLibPath()) } /** ZhangChao time:2014-12-31,get layoutlib.jar ...

  3. 【eclipse安装黑色主题】

    eclipse Luna Service Release 2 (4.4.2)版本的自带了黑色的主题,切换下即可: 切换主题以后还需要修改下字体的主题: http://www.eclipsecolort ...

  4. C#基础知识-使用XML完成一个小程序(十一)

    上一篇中讲到XML基本的结构,还有增删改查的方法,这一篇中我们就来利用XML来完成一个简单的订单系统,主要是实现一个简单学生名单的增删改查,如果想要应用到实际的环境中建议考虑数据量的问题,如果数据量大 ...

  5. maven <repositories>标签,<pluginRepositories>标签

    在不用Maven的时候,比如说以前我们用Ant构建项目,在项目目录下,往往会看到一个名为/lib的子目录,那里存放着各类第三方依赖jar文件,如log4j.jar,junit.jar等等.每建立一个项 ...

  6. 第八章.Java集合

    Java集合类是一种特别有用的工具类,可用于存储数量不等的对象.Java集合大致可分为Set.List.Queue和Map四种体系 Set代表无序.不可重复的集合 List代表有序.重复的集合 Map ...

  7. JBPM学习第5篇:Mysql配置

    1.工作台用户Authentication配置 JBPM web工作台预安装了用户认证与授权模块,位于jbpm-console-7.1.0.Final-wildfly-10.1.0.Final.war ...

  8. express实现todolist

    app.js var express = require('express'); var todoController = require('./controllers/todoController. ...

  9. csharp:qq weather

    using System; using System.Data; using System.Configuration; using System.Collections; using System. ...

  10. java.util.concurrent.Semaphore 使用

    1. 概述 Semaphore(信号)  并不存在真正的许可 只是维护一个计数器, 通常用来限定进入一些资源的线程数 accquire()  方法获取许可 成功则计数器值-1 没有则阻塞直到一个可用的 ...