这是一篇包含了介绍性质和吐槽性质的日志。主要介绍一下我学习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. vue基础知识之vue-resource/axios

    Vue基础知识之vue-resource和axios(三)   vue-resource Vue.js是数据驱动的,这使得我们并不需要直接操作DOM,如果我们不需要使用jQuery的DOM选择器,就没 ...

  2. HDU 5694——BD String——————【递归求解】

    BD String Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  3. Windows Server 2008系统中IE8启用和禁用JS

    Windows Server 2008系统中IE8默认是启用IE ESC(ie 增强)的,这样会导致该IE不支持JS,开启方法: 1.开始->管理工具->服务器管理器 2.点击服务器管理- ...

  4. ServiceHelper

    public class ServiceHelper { private static string _baseUrl = $@"http://{Config.Instance.MesSer ...

  5. 记一次java程序内存溢出问题

    一个自然语言处理程序,在封装为web-service后,部署到线上运行. 但最近出现了内存溢出的情况,频繁的out of memory. 先盲目尝试在启动脚本中增加-XX:-UseGCOverhead ...

  6. 使用多说评论&加网分享

    多说评论: <div data-thread-key=" class="ds-thread"></div><script>var du ...

  7. 2017年11月27日 C#MDI窗体创建&记事本打印&记事本查找、自动换行

    MDI窗体第一个父窗体 把属性里的IsMdiContainer设置为true就可以了 父窗体连接子窗体 //创建一个新的类,用来连接别的窗体,并且别的窗体为唯一窗体 List<Form> ...

  8. Mysql 删除数据表重复行

    准备示例数据 以下sql创建表,并将示例数据插入到用于演示的contacts表中. CREATE TABLE contacts ( id INT PRIMARY KEY AUTO_INCREMENT, ...

  9. docker 安装ElasticSearch head

    github官网地址 https://github.com/mobz/elasticsearch-head 拉取镜像 docker pull mobz/elasticsearch-head:5 创建容 ...

  10. Spring学习笔记:Spring整合Mybatis(mybatis-spring.jar)(一:知识点回顾)

    一.知识点回顾 1.Mybatis环境搭建(DAO层的实现)(使用maven项目管理工具) 需要引入的依赖包: <!-- 单元测试junit --> <dependency> ...