栏目头部广告

Redis持久化解决方案实操

一、准备Redis测试实例

1.1 二进制编译安装Redis

[root@10-27-0-224 ~]# wget http://download.redis.io/releases/redis-3.0.7.tar.gz
[root@10-27-0-224 ~]# tar -zxvf redis-3.0.7.tar.gz
[root@10-27-0-224 ~]# ln -s redis-3.0.7 redis       # 增加软连接,方便管理与升级
[root@10-27-0-224 ~]# ll
total 1344
lrwxrwxrwx 1 root root      11 Nov  3 09:12 redis -> redis-3.0.7
drwxrwxr-x 6 root root     306 Jan 25  2016 redis-3.0.7

[root@10-27-0-224 ~]# cd redis
[root@10-27-0-224 redis]# make && make install

1.2 可执行工具说明

[root@10-27-0-224 ~]# cd redis/src/
[root@10-27-0-224 src]# ls * |grep redis-
redis-benchmark
redis-check-aof
redis-check-dump
redis-cli
redis-sentinel
redis-server
可执行文件说明
redis-serverRedis服务器
redis-cliRedis命令行客户端
redis-benchmarkRedis性能测试
redis-check-aofAOF文件修复工具
redis-check-dumpRDB文件检查工具
redis-sentinelsentinel服务器(2.8以后)

1.3 Redis三种启动方式

(1)最简启动Redis(默认配置文件启动)

[root@10-27-0-224 ~]# redis-server 
130445:C 03 Nov 09:22:45.434 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 3.0.7 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 130445
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'

(2)动态参数启动(指定端口)

[root@10-27-0-224 ~]# redis-server --port 6380
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 3.0.7 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6380
 |    `-._   `._    /     _.-'    |     PID: 130539
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'

(3)指定配置文件启动

[root@10-27-0-224 ~]# vim redis-6379.conf
daemonize yes                     # 以守护进程的方式启动
pidfile "/var/run/redis-6379.pid"
logfile "6379.log"
#save 900 1
#save 300 10
#save 60 10000
dbfilename "dump-6379.rdb"
dir "/root/redis-3.0.7/data"
slave-read-only yes
appendfilename "appendonly-6379.aof"

[root@10-27-0-224 ~]# mkdir /root/redis-3.0.7/data

[root@10-27-0-224 ~]# redis-server redis-6379.conf 
[root@10-27-0-224 ~]# netstat -antulp |grep 6379
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      542/redis-server *: 
tcp6       0      0 :::6379                 :::*                    LISTEN      542/redis-server *:

二、AOF与RDB操作

2.1 什么是RDB?

Redis持久化解决方案实操(图1)

2.2 RDB触发机制

(1)RDB触发机制之SAVE(同步)

Redis持久化解决方案实操(图2)

[root@10-27-0-224 ~]# redis-cli 
127.0.0.1:6379> save
OK

[root@10-27-0-224 ~]# ll /root/redis/data/
total 8
-rw-r--r-- 1 root root 2181 Nov  3 09:56 6379.log
-rw-r--r-- 1 root root   18 Nov  3 09:56 dump-6379.rdb  # 生成了RDB文件

Redis持久化解决方案实操(图3)

◆ 文件策略:如存在老的RDB文件,新替换老
◆ 复杂度:O(N)

(2)RDB触发机制之bgsave(异步)

Redis持久化解决方案实操(图4)

[root@10-27-0-224 ~]# redis-cli 
127.0.0.1:6379> bgsave
Background saving started

[root@10-27-0-224 ~]# ll /root/redis/data/
total 8
-rw-r--r-- 1 root root 2434 Nov  3 09:57 6379.log
-rw-r--r-- 1 root root   18 Nov  3 09:57 dump-6379.rdb  # RDB时间已经更新
◆ 文件策略:如存在老的RDB文件,新替换老
◆ 复杂度:O(N)

(3)RDB触发机制之save与bgsave对比

命令savebgsave
IO类型同步异步
阻塞?是(阻塞发生在fork)
复杂度O(n)O(n)
优点不会消耗额外内存不阻塞客户端命令
缺点阻塞客户端命令需要fork,消耗内存

(4)RDB触发机制之自动生成RDB

Redis持久化解决方案实操(图5)

[root@10-27-0-224 ~]# vim redis-6379.conf
……
save 900 1
save 300 10
save 60 10000
……

2.3 AOF运行原理

(1)AOF运行原理-创建

Redis持久化解决方案实操(图6)

(2)AOF运行原理-恢复

Redis持久化解决方案实操(图7)

2.4 AOF三种策略

(1)AOF三种策略之Always

Redis持久化解决方案实操(图8)

(2)AOF三种策略之Everysec(默认)

Redis持久化解决方案实操(图9)

(3)AOF三种策略之NO

Redis持久化解决方案实操(图10)

(4)AOF三种策略之对比

命令alwayseverysecno
优点不丢失数据每秒一次fsync丢1秒数据不用管
缺点IO开销较大,一般的sata盘只有几百TPS丢1秒数据不可控

2.5 AOF重写

原生AOFAOF重写

set hello world
set hello java
set hello hehe
incr counter
incr counter
rpush mylist a
rpush mylist b
rpush mylist c
过期数据

set hello hehe
set counter 2
rpush mylista bc



◆ 减少硬盘占用量
◆ 加速恢复速度

(1)AOF重写实现的两种方式之 bgrewriteaof

Redis持久化解决方案实操(图11)

[root@10-27-0-224 ~]# redis-cli 
127.0.0.1:6379> bgrewriteaof
Background append only file rewriting started

[root@10-27-0-224 ~]# ll /root/redis/data/
total 8
-rw-r--r-- 1 root root 3160 Nov  3 10:21 6379.log
-rw-r--r-- 1 root root    0 Nov  3 10:21 appendonly-6379.aof
-rw-r--r-- 1 root root   18 Nov  3 09:57 dump-6379.rdb

(2)AOF重写实现的两种方式之“AOF重写配置”

配置名含义
auto-aof-rewrite-min-sizeAOF文件重写需要的尺寸
auto-aof-rewrite-percentageAOF文件增长率
统计名含义
aof_current_sizeAOF当前尺寸(单位:字节)
aof_base_sizeAOF上次启动和重写的尺寸(单位:字节)
自动触发时机:
◆ aof_current_size > auto-aof-rewrite-min-size
◆ aof_current_size - aof_base_size/aof_base_size > auto-aof-rewrite-percentage

作者:UStarGao
链接:https://www.starcto.com/redis/254.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

UCloud云平台推荐


UCloud新用户专属注册连接

UCloud CDN超值特惠专场

UCloud全球云主机(UHost/VPS)大促页面

UCloud快杰云主机大促页面

加载中~
标签: AOF备份RDB备份
文章详情页广告

随便看看

底部广告
`