设为首页 加入收藏

TOP

Redis(二)
2017-10-16 18:18:51 】 浏览:4829
Tags:Redis
aof方式的持久化也还是有可能会丢失部分修改。不过我们可以通过配置文件告诉redis我们想要通过fsync函                    数强制os写入到磁盘的时机。有三种方式如下(默认是:每秒fsync一次):

                              appendonly yes           #启用aof持久化方式
                              # appendfsync always   #每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
                                 appendfsync everysec     #每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐
                              # appendfsync no    #完全依赖os,性能最好,持久化没保证

                         aof 的方式也同时带来了另一个问题。持久化文件会变的越来越大。例如我们调用incr test命令100次,文件中必须保存全部的100条命令,其实                  有99条都是多余的。因为要恢复数据库的状态其实文件中保存一条set test 100就够了。为了压缩aof的持久化文件。redis提供了bgrewriteaof命令。收                  到此命令redis将使用与快照类似的方式将内存中的数据以命令的方式保存到临时文件中,最后替换原来的文件。具体过程如下:

                          1.  redis调用fork ,现在有父子两个进程;
                          2. 子进程根据内存中的数据库快照,往临时文件中写入重建数据库状态的命令;
                          3. 父进程继续处理client请求,除了把写命令写入到原来的aof文件中。同时把收到的写命令缓存起来,这样就能保证如果子进程重写失败的话并                                不会出问题;
                          4. 当子进程把快照内容写入以命令方式写到临时文件中后,子进程发信号通知父进程。然后父进程把缓存的写命令也写入到临时文件;
                          5. 现在父进程可以使用临时文件替换老的aof文件,并重命名,后面收到的写命令也开始往新的aof文件中追加。

                       需要注意到是重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,这点和快照                          有点类似。

               3>虚拟内存方式(desprecated):

                        首先说明:在Redis-2.4后虚拟内存功能已经被deprecated了,原因如下:

          1)slow restart    重启太慢

          2)slow saving    保存数据太慢

          3)slow replication  上面两条导致 replication 太慢

          4)complex code   代码过于复杂

                               redis的虚拟内存与os的虚拟内存不是一码事,但是思路和目的都是相同的。就是暂时把不经常访问的数据从内存交换到磁盘中,从而腾出宝                   贵的内存空间用于其他需要访问的数据。尤其是对于redis这样的内存数据库,内存总是不够用的。除了可以将数据分割到多个redis server外。另外                     的能够提高数据库容量的办法就是使用vm把那些不经常访问的数据交换的磁盘上。如果我们的存储的数据总是有少部分数据被经常访问,大部分数据                   很少被访问

首页 上一页 1 2 3 4 5 6 7 下一页 尾页 2/8/8
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇在ubuntu16.04中一键创建LAMP环境.. 下一篇Ubuntu linux系统下 su:出现: au..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目