2.1:Redis 数据持久化
2.1.1:RDB 模式
配置 RDB save 策略
[root@node106 ~]# vim /usr/local/src/redis-4.0.14/redis.conf
################################ SNAPSHOTTING ################################
save 900 1
save 300 10
save 60 1000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump_6379.rdb
dir /apps/redis/data
重启 Redis
[root@node106 ~]# systemctl restart redis
写入测试数据
[root@node106 ~]# cat redis.sh
#!/bin/bash
NUM=`seq 1 1000`
for i in ${NUM};do
redis-cli -h 127.0.0.1 set key-${i} value-${i} 1>/dev/null
done
echo "数据写入完成"
[root@node106 ~]# bash redis.sh
数据写入完成
127.0.0.1:6379> keys *
……
996) "key-402"
997) "key-807"
998) "key-455"
999) "key-124"
1000) "key-626"
验证 RDB
刚刚的写入操作,符合 save 60 1000
策略,60s 时执行了 bgsave:
[root@node106 ~]# tail -f /apps/redis/logs/redis_6379.log
f14827:M 30 Dec 21:43:36.012 * 1000 changes in 60 seconds. Saving...
14827:M 30 Dec 21:43:36.012 * Background saving started by pid 15886
15886:C 30 Dec 21:43:36.018 * DB saved on disk
15886:C 30 Dec 21:43:36.019 * RDB: 0 MB of memory used by copy-on-write
14827:M 30 Dec 21:43:36.114 * Background saving terminated with success
查看保存的 RDB 文件:
[root@node106 ~]# ll /apps/redis/data/
total 20
-rw-r--r-- 1 redis redis 18885 Dec 30 21:43 dump_6379.rdb
重启 Redis 后,会载入 RDB 文件中的数据:
[root@node106 ~]# systemctl restart redis
[root@node106 ~]# tail -f /apps/redis/logs/redis_6379.log
18248:M 30 Dec 23:20:09.438 * DB loaded from disk: 0.001 seconds
[root@node106 ~]# redis-cli
127.0.0.1:6379> keys *
……
996) "key-402"
997) "key-807"
998) "key-455"
999) "key-124"
1000) "key-626"
2.1.2:AOF 模式
配置 AOF 策略
将存储策略设置为每秒写入(everysec):
[root@node106 ~]# vim /apps/redis/etc/redis.conf
############################## APPEND ONLY MODE ###############################
appendonly yes
appendfilename "appendonly_6379.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
重启 Redis
[root@node106 ~]# systemctl restart redis
虽然 RDB 文件仍然存在,但 Redis 启动后并未将其数据载入内存,说明 AOF 模式开启时,会忽略 RDB 文件,而是载入 AOF 文件中的数据;
[root@node106 ~]# ll /apps/redis/data/
total 20
-rw-r--r-- 1 redis redis 0 Dec 30 21:55 appendonly_6379.aof
-rw-r--r-- 1 redis redis 18885 Dec 30 21:43 dump_6379.rdb
[root@node106 ~]# redis-cli
127.0.0.1:6379> keys *
(empty list or set)
写入测试数据
127.0.0.1:6379> set foo bar
OK
验证 AOF
查看 AOF 文件中的记录:
[root@node106 ~]# cat /apps/redis/data/appendonly_6379.aof
*2
$6
SELECT
$1
0
*3
$3
set
$3
foo
$3
bar
重启 Redis,会载入 AOF 文件中的数据:
[root@node106 ~]# systemctl restart redis
[root@node106 ~]# tail -f /apps/redis/logs/redis_6379.log
16824:M 30 Dec 23:13:35.059 * DB loaded from append only file: 0.000 seconds
[root@node106 ~]# redis-cli
127.0.0.1:6379> keys *
1) "foo"