获取中...

-

Just a minute...

什么是RDB持久化

RDB持久化是Redis的持久化方式之一,也被称为快照持久化,是将某一个时间节点的Redis内存中数据保存到磁盘上,生成一个RDB文件。之后,用户可以将这份文件进行备份,复制到其他的服务器上创建具有相同状态的Redis服务器副本,也可以用于服务器重启恢复到原来的状态。

Redis中RDB持久化配置

在Redis中,可以配置RDB文件保存的目录、RDB文件的名称,还有同步的时机。配置文件为redis.conf,主要的RDB配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
#保存rdb文件的名称,默认为dump.rdb
dbfilename dump.rdb

# 保存RDB文件的目录
dir .

#如果指定的秒数和数据库写操作次数都满足了就将数据库保存,默认就是如下配置,需要设置为其他的配置,修改下面配置即可。
# 900秒(15分钟)内至少1个key值改变(则进行数据库保存--持久化)
# 300秒(5分钟)内至少10个key值改变(则进行数据库保存--持久化)
# 60秒(1分钟)内至少10000个key值改变(则进行数据库保存--持久化)
save 900 1
save 300 10
save 60 10000

Redis生成RDB文件的方式

Redis有如下几种方式,可以让服务器生成RDB文件:

  • 客户端向Redis服务器发送BGSAVE命令,Redis服务器会调用fork创建一个子进程,子进程负责将快照写到磁盘上,父进程会继续处理客户端的请求。
  • 客户端向Redis服务器发送SAVE命令,Redis服务器在接到SAVE命令的时候,会将数据同步到RDB文件中,在此之间,服务器处于阻塞状态,不会处理其他的请求。
  • 当用户配置了save选项的时候,一旦save选项满足,则会自动调用BGSAVE命令进行持久化操作。
  • Redis通过SHUTDOWN命令关闭服务器或者收到标准的TERM信号时,会执行SAVE命令进行持久化。
  • 当一个Redis服务器连接另一个Redis服务器,并向对方发送SYNC命令来进行一次复制的时候,如果主服务器没有执行BGSAVE操作,或者主服务器不是刚刚执行完BGSAVE操作,那么主服务器就会执行BGSAVE操作。

需要注意的是:

  • 如果在BGSAVE命令执行期间,客户端向服务器发送SAVE命令,服务器会拒绝执行SAVE命令,防止产生竞争条件。
  • 如果在SAVE命令执行期间,客户端向服务器发送BGSAVE命令,服务器会拒绝执行BGSAVE命令,防止产生竞争条件。
  • BGSAVE和GBREWRITEAOF不能同时执行,如果BGSAVE正在执行,客户端发送的BGREWRITEAOF命令将延迟在BGSAVE命令执行完毕再执行。如果是GBREWRITEAOF正在执行,客户端发送的BGSAVE将会被拒绝执行。

关于Redis载入RDB文件

当Redis需要读取RDB文件恢复到之前的状态时,在读取RDB文件的整个过程中,Redis都是处于阻塞状态。需要注意的是,如果Redis开启了AOF,服务器会优先读取AOF文件来还原数据库的状态,因为AOF文件的更新频率通常比RDB文件高。

相关文章
评论
分享
  • Redis过期策略和内存淘汰策略

    Redis处理过期的keyRedis会将每个设置了过期时间的key保存在一个独立的字典中,以后会定期扫描这个字典来删除过期了的key。除了定期扫描删除策略之外,Redis同时采用惰性删除策略,在客户端访问key的时候,Redis会对这...

    Redis过期策略和内存淘汰策略
  • Redis持久化:AOF

    什么是AOF持久化Redis有两种持久化方式,RDB和AOF。RDB是将Redis中的数据保存一份到RDB文件中,而AOF不是保存键值对数据,而是保存服务器执行的写命令来记录数据库的状态。 AOF持久化的实现原理AOF持久化的实现可...

    Redis持久化:AOF
  • jps命令详解

    jps命令的作用jps命令是JDK中自带的命令,位于bin目录下,其作用是显示当前用户下系统中所有的Java进程的相关信息,比如pid。有了这个命令,可以很方便的显示Java进程,不过显示的是当前用户的所有Java进程,不能根据项目名...

    jps命令详解
  • Java多线程之同步容器

    同步容器的作用Java中的容器主要为List、set、Map、Queue,这些容器都有不同的实现类,比如ArrayLIst、HashSet、HashMap、PriorityQueue等等,但是大部分都是非线程安全的,意味着在多线程访问...

    Java多线程之同步容器
  • Java多线程之ThreadLocal

    ThreadLocal的作用ThreadLocal的作用是提供线程内的局部变量,这个变量在同一个线程的生命周期内起作用,可以减少同一个线程内多个方法之前传入公共资源的复杂性,并且隔离其他线程。下面是一个使用ThreadLocal的例子...

    Java多线程之ThreadLocal
  • Java多线程之Lock

    引入Lock的原因Java提供了一个关键字synchronized用来保证同步访问,那为什么还需要使用Lock?最根本的原因就是使用synchronized会造成线程的阻塞,资源同时只能被一个线程访问,程序效率低。比如,多个线程查询读...

    Java多线程之Lock
  • Java多线程之synchronized

    多线程引发的安全问题由于线程是共享进程中的所有资源的,那么每个线程都可以去操作进程中的某一个资源,当多个线程操作同一个资源的时候就可能出现线程安全问题。比如两个线程对同一个实例变量做加1的操作,然后打印该变量,如果变量的初始值为0,当...

    Java多线程之synchronized
  • Java中的线程的创建

    Java创建线程的三种方式 继承Thread 实现Runnable 实现Callable 继承Thread创建线程通过继承Thread的方式,可以很快的创建一个线程,Thread中有一个run()方法,只需要重写该方法,将需要另外开...

    Java中的线程的创建
  • 线程和进程

    什么是进程在百度百科中,进程有两种定义,一种是狭义定义:进程是正在运行的程序实例,比如微信、Tomcat、MySQL,这些就是一个个进程。另一种就是广义的定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,它是操作...

    线程和进程
Please check the parameter of comment in config.yml of hexo-theme-Annie!