zoukankan      html  css  js  c++  java
  • Redis的持久化RDB

    点击上方“码农编程进阶笔记”,选择“置顶或者星标

    优质文章第一时间送达!

    Redis优秀的性能是由于其将所有的数据都存储在内存中,同样memcached也是这样做的,但是为什么Redis能够脱颖而出呢,很大程度上是因为Redis有出色的持久化机制,能够保证服务器重启后,数据不会丢失。下面来看看Redis是如何持久化的。

    Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。这两种方式可以单独使用其中一种,或者混合使用。

    RDB方式介绍

    RDB方式是通过快照完成的,当符合一定条件时Redis会自动将内存中的所有数据进行快照,并且存储到硬盘上。就像拍照一样,将这一瞬间的所有东西都保存下来。进行快照的条件在配置文件中指定。主要有两个参数构成:时间和改动的键值的个数,即当在指定时间内被更改的键的个数大于执行数值时,就会进行快照。RDB是Redis的默认持久化方式。

    RDB方式配置

    找到Redis的配置文件:redis.conf

    1) 设置触发条件:

    2) 设置rdb文件路径

    默认rdb文件存放路径是当前目录,文件名是:dump.rdb。可以在配置文件中修改路径和文件名,分别是dir和dbfilename

    Redis启动后会读取RDB快照文件,将数据从硬盘载入到内存,一般情况下1GB的快照文件载入到内存的时间大约20-30分钟。

    RDB如何进行快照

    RDB的快照过程:

    1) Redis使用fork函数复制一份当前进程(父进程)的副本;

    2) 父进程继续接受并处理客户端发来的命令,而子进程开始将内存中的数据写入到硬盘中的临时文件;

    3) 当子进程写入完成所有数据后会用该临时文件替换旧的RDB文件。

    手动快照:

    如果没有触发自动快照,可以对redis进行手动快照操作,SAVE和BGSAVE都可以执行手动快照,两个命令的区别是前者是由主进程进行快照操作,会阻塞其他请求;而后者是通过fork子进程进行快照操作。

    注意:

    由于redis使用fork来复制一份当前进程,那么子进程就会占有和主进程一样的内存资源,比如说主进程8G内存,那么在备份的时候必须保证有16G内存,要不然会启用虚拟内存,性能非常差。

    RDB文件的压缩

    RDB文件过大时,是可以压缩的,Redis默认开启压缩,当然也可以通过配置rdbcompression参数来禁用压缩。

    压缩和不压缩的优缺点:

    压缩:

    优点:减少磁盘存储空间
    缺点:消耗CPU资源
    

    不压缩:

    优点:不消耗CPU资源
    缺点:占用磁盘空间多
    

    如何选择?那就需要看需求、看服务器资源情况了。

    关于RedisRDB方式持久化就介绍到这,下一篇将介绍AOF方式怎么进行持久化,并且对比两种方式有何优缺。

  • 相关阅读:
    多重背包POJ1276不要求恰好装满 poj1014多重背包恰好装满
    哈理工1053完全背包
    求最小公倍数与最大公约数的函数
    Bus Pass ZOJ 2913 BFS 最大中取最小的
    POJ 3624 charm bracelet 01背包 不要求装满
    HavelHakimi定理(判断一个序列是否可图)
    z0j1008Gnome Tetravex
    ZOJ 1136 Multiple BFS 取模 POJ 1465
    01背包 擎天柱 恰好装满 zjut(浙江工业大学OJ) 1355
    zoj 2412 水田灌溉,求连通分支个数
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15453034.html
Copyright © 2011-2022 走看看