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-server | Redis服务器 |
redis-cli | Redis命令行客户端 |
redis-benchmark | Redis性能测试 |
redis-check-aof | AOF文件修复工具 |
redis-check-dump | RDB文件检查工具 |
redis-sentinel | sentinel服务器(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?
2.2 RDB触发机制
(1)RDB触发机制之SAVE(同步)
[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文件
◆ 文件策略:如存在老的RDB文件,新替换老
◆ 复杂度:O(N)
(2)RDB触发机制之bgsave(异步)
[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对比
命令 | save | bgsave |
IO类型 | 同步 | 异步 |
阻塞? | 是 | 是(阻塞发生在fork) |
复杂度 | O(n) | O(n) |
优点 | 不会消耗额外内存 | 不阻塞客户端命令 |
缺点 | 阻塞客户端命令 | 需要fork,消耗内存 |
(4)RDB触发机制之自动生成RDB
[root@10-27-0-224 ~]# vim redis-6379.conf …… save 900 1 save 300 10 save 60 10000 ……
2.3 AOF运行原理
(1)AOF运行原理-创建
(2)AOF运行原理-恢复
2.4 AOF三种策略
(1)AOF三种策略之Always
(2)AOF三种策略之Everysec(默认)
(3)AOF三种策略之NO
(4)AOF三种策略之对比
命令 | always | everysec | no |
优点 | 不丢失数据 | 每秒一次fsync丢1秒数据 | 不用管 |
缺点 | IO开销较大,一般的sata盘只有几百TPS | 丢1秒数据 | 不可控 |
2.5 AOF重写
原生AOF | AOF重写 |
set hello world | set hello hehe |
◆ 减少硬盘占用量
◆ 加速恢复速度
(1)AOF重写实现的两种方式之 bgrewriteaof
[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-size | AOF文件重写需要的尺寸 |
auto-aof-rewrite-percentage | AOF文件增长率 |
统计名 | 含义 |
aof_current_size | AOF当前尺寸(单位:字节) |
aof_base_size | AOF上次启动和重写的尺寸(单位:字节) |
自动触发时机:
◆ 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云平台推荐
随便看看
- 2021-06-23 Linux性能异常经典案例分析之包量吞吐
- 2022-05-28MongoDB慢日志文件分析工具-mtools
- 2021-09-16开源SQL审计检查分析平台
- 2021-08-01MySQL主从同步之半同步复制
- 2022-04-02Docker可视化管理工具-Portainer