第一节:Redis 持久化介绍
redis所有的数据都存在内存中,所以速度非常快,但是一旦断电等情况,数据就没了。从内存当中同步到硬盘上,这个过程叫做持久化过程。
持久化操作,两种方式:rdb方式、aof方式,可以单独使用或者结合使用。
使用方法:
rdb持久化方法:在指定的时间间隔写入硬盘
aof方式:将以日志,记录每一个操作,服务器启动后就构建数据库。
配置可以禁用 持久化功能。
也可以同时使用两种方式。
第二节:Redis 的持久化之RDB 方式
RDB方式 Redis是默认支持的
优势:只有一个文件,时间间隔的数据,可以归档为一个文件,方便压缩转移(就一个文件)
劣势:如果宕机,数据损失比较大,因为它是没一个时间段进行持久化操作的。也就是积攒的数据比较多,一旦懵逼,就彻底懵逼了
1)查看redis.conf配置:
# like in the following example: # # save "" save 900 1 save 300 10 save 60 10000
这里save 900 1 表示 每900秒内至少有1个kery发生变化,就持久化
save 300 10表示 每300秒内至少有10个key发生变化,就持久化
save 60 10000表示 每60秒内至少有10000个key发生变化,就持久化
# The filename where to dump the DB
dbfilename dump.rdb
这里有个dbfilename配置 是 保存的持久化的文件名 默认是dump.rdb
# Note that you must specify a directory here, not a file name.
dir ./
dump.rdb文件的存储位置,dir ./ 表示文件存储路径是当前路径;
2)RDB备份和恢复数据
假如遇到断电或者宕机或者自然灾害, 我们需要恢复数据 我们模拟下:
a.先将数据全部置为空,启动是没有数据的:
[root@bogon redis]# ll 总用量 52 drwxr-xr-x. 2 root root 134 3月 31 20:51 bin -rw-r--r--. 1 root root 117 4月 1 11:15 dump.rdb -rw-r--r--. 1 root root 46689 4月 1 11:16 redis.conf [root@bogon redis]# rm -rf dump.rdb [root@bogon redis]# ll 总用量 48 drwxr-xr-x. 2 root root 134 3月 31 20:51 bin -rw-r--r--. 1 root root 46689 4月 1 11:16 redis.conf [root@bogon redis]# bin/redis-server redis.conf [root@bogon redis]# bin/redis-cli 127.0.0.1:6379> keys * (empty list or set)
b.弄点数据,在重启redis,这时候启动过程会进程rdb check验证 然后加载redis目录下rdb文件;加载数据:
127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379> set test1 aa OK 127.0.0.1:6379> set test2 bb OK 127.0.0.1:6379> shutdown save not connected> exit [root@bogon redis]# ll 总用量 52 drwxr-xr-x. 2 root root 134 3月 31 20:51 bin -rw-r--r--. 1 root root 102 4月 1 11:24 dump.rdb -rw-r--r--. 1 root root 46689 4月 1 11:16 redis.conf [root@bogon redis]# bin/redis-server redis.conf [root@bogon redis]# bin/redis-cli 127.0.0.1:6379> keys * 1) "test1" 2) "test2"
说明是数据加载进来了;
c.把dump.rdb剪切到/root/下面,再重启redis,发现数据没了:
[root@bogon redis]# ll 总用量 52 drwxr-xr-x. 2 root root 134 3月 31 20:51 bin -rw-r--r--. 1 root root 102 4月 1 11:29 dump.rdb -rw-r--r--. 1 root root 46689 4月 1 11:16 redis.conf [root@bogon redis]# mv dump.rdb /root/ [root@bogon redis]# cd /root/ [root@bogon ~]# ll 总用量 1528 -rw-------. 1 root root 1269 3月 31 23:56 anaconda-ks.cfg -rw-r--r--. 1 root root 102 4月 1 11:29 dump.rdb drwxrwxr-x. 6 root root 4096 7月 28 2017 redis-3.2.10 -rw-r--r--. 1 root root 1550261 7月 29 2017 redis-3.2.10.tar.gz [root@bogon ~]# cd /usr/local/redis/ [root@bogon redis]# bin/redis-server redis.conf [root@bogon redis]# bin/redis-cli 127.0.0.1:6379> keys * (empty list or set)
d.恢复数据的话 我们只需要把备份文件搞到redis下即可,再把/root/dump.rdb拷贝到redis目录下,在启动,发现原来的数据恢复了:
[root@bogon redis]# ll 总用量 48 drwxr-xr-x. 2 root root 134 3月 31 20:51 bin -rw-r--r--. 1 root root 46689 4月 1 11:16 redis.conf [root@bogon redis]# mv /root/dump.rdb /usr/local/redis/ [root@bogon redis]# ll 总用量 52 drwxr-xr-x. 2 root root 134 3月 31 20:51 bin -rw-r--r--. 1 root root 102 4月 1 11:29 dump.rdb -rw-r--r--. 1 root root 46689 4月 1 11:16 redis.conf [root@bogon redis]# bin/redis-sever redis.conf -bash: bin/redis-sever: 没有那个文件或目录 [root@bogon redis]# bin/redis-server redis.conf [root@bogon redis]# bin/redis-cli 127.0.0.1:6379> keys * 1) "test2" 2) "test1"
这时候 数据就有了 这就是恢复过程;
总结下
平时我们可以定期把rdb文件备份到指定地方 需要恢复的时候 直接把rdb搞到redis下即可;