Redis特性 之 持久化

本文环境基于Ubuntu1604

目录

  • 开始

  • RDB

  • AOF

  • RDB-AOF

  • 数据恢复

  • 修改

开始

同样是 非关系型(NoSQL)内存键值数据库

Redis相比Memcached的一个特点是支持持久化

基于此 Redis能够在服务器宕机或重启时恢复数据

Redis提供了两种不同策略的持久化方式

RDB 全量备份持久化

AOF 增量备份持久化

RDB

RDB持久化可以在指定的时间间隔内生成数据集的时间点快照

  • 优点
紧凑 (文件体积小)

便于备份、迁移且恢复快速
  • 缺点
数据丢失较多 (快照有时间间隔)

数据量大耗时
  • 配置
save 900 1 # 时间>=900秒 + 写操作>=1条 = 触发快照
save 300 10 # 时间>=300秒 + 写操作>=10条 = 触发快照
save 60 10000 # # 时间>=60秒 + 写操作>=10000条 = 触发快照
dbfilename dump.rdb # 快照文件
dir /var/lib/redis # 快照文件 + AOF文件文件夹

AOF

AOF持久化记录服务器执行的所有写操作命令 并在服务器启动时通过重新执行这些命令来还原数据集

  • 优点
数据丢失较少 (fsync默认间隔1秒)

文件可读
  • 缺点
文件增长快 (记录日志)

恢复较慢
  • AOF
appendonly yes # 开启AOF
appendfsync everysec # 写入AOF文件(磁盘)的频率 = 1秒
appendfilename appendonly.aof # AOF文件
auto-aof-rewrite-percentage 100 # AOF文件重写(压缩)的触发条件
auto-aof-rewrite-min-size 64mb # AOF文件重写(压缩)的触发条件

RDB-AOF

那么 在实际生产中应该采用何种持久化策略呢?

还好 最新的Redis4.0提供了一个"鱼和熊掌"兼得的方案: RDB-AOF混合持久化

RDB-AOF混合持久化 通过AOF重写操作创建出一个同时包含RDB数据和AOF数据的AOF 文件 其中RDB数据位于AOF文件的开头 它们储存了服务器开始执行重写操作时的数据库状态 至于那些在重写操作执行之后执行的Redis命令 则会继续以AOF格式追加到AOF文件的末尾 也就是RDB数据之后

下面 我们就来看一下Redis官方"终极"方案的体验

首先 确保安装的Redis版本>=4.0

sudo apt remove --purge redis-server && sudo apt autoremove # 卸载老版本redis

sudo apt install -y build-essential tcl wget

wget http://download.redis.io/releases/redis-4.0.0.tar.gz && tar xzf redis-4.0.0.tar.gz && cd redis-4.0.0

make distclean && make -j $(nproc) && sudo make install

sudo ./utils/install_server.sh
redis-server -v
# Redis server v=4.0.0 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=86af80aa121c89aa

redis-cli -v
# redis-cli 4.0.0

接着 打开RDB-AOF混合持久化的配置

sudo vim /etc/redis/redis.conf
appendonly yes # 开启AOF
aof-use-rdb-preamble yes # RDB-AOF混合持久化

最后 重启redis-server

sudo kill -9 $(ps ax | grep redis-server | grep -v grep | awk '{print $1}')

redis-server /etc/redis/redis.conf
  • 测试
redis-cli
127.0.0.1:6379> SET K1 "V1"
OK
127.0.0.1:6379> SET K2 "V2"
OK
127.0.0.1:6379> BGREWRITEAOF
Background append only file rewriting started
127.0.0.1:6379> SET K3 "V3"
OK
127.0.0.1:6379> SET K4 "V4"
OK
127.0.0.1:6379> KEYS *
1) "K4"
2) "K2"
3) "K3"
4) "K1"
od -c appendonly.aof
0000000   R   E   D   I   S   0   0   0   8 372  \t   r   e   d   i   s
0000020   -   v   e   r 005   4   .   0   .   0 372  \n   r   e   d   i
0000040   s   -   b   i   t   s 300   @ 372 005   c   t   i   m   e 302
0000060 201   8 345   Z 372  \b   u   s   e   d   -   m   e   m 302   (
0000100 243  \f  \0 372  \f   a   o   f   -   p   r   e   a   m   b   l
0000120   e 300 001 372  \a   r   e   p   l   -   i   d   (   2   9   e
0000140   6   c   7   f   2   c   d   9   a   b   2   a   c   f   9   1
0000160   a   6   a   5   8   e   8   3   1   b   4   f   7   3   c   5
0000200   a   2   c   f   f 372  \v   r   e   p   l   -   o   f   f   s
0000220   e   t 300  \0 376  \0 373 002  \0  \0 002   K   2 002   V   2
0000240  \0 002   K   1 002   V   1 377   + 376   \   P   z 326 364   Z
0000260   *   2  \r  \n   $   6  \r  \n   S   E   L   E   C   T  \r  \n
0000300   $   1  \r  \n   0  \r  \n   *   3  \r  \n   $   3  \r  \n   S
0000320   E   T  \r  \n   $   2  \r  \n   K   3  \r  \n   $   2  \r  \n
0000340   V   3  \r  \n   *   3  \r  \n   $   3  \r  \n   S   E   T  \r
0000360  \n   $   2  \r  \n   K   4  \r  \n   $   2  \r  \n   V   4  \r
0000400  \n
0000401

从文件内容可以看出 前半部分储存的是RDB格式数据 而后半部分储存的则是AOF格式数据

数据恢复

sudo reboot # 重启机器

redis-server /etc/redis/redis.conf # 启动redis-server
  • 测试
redis-cli
127.0.0.1:6379> KEYS *
1) "K4"
2) "K2"
3) "K3"
4) "K1"

修改

  • RDB = Redis Database

  • AOF = Append Only File

参考

  • 持久化(persistence)

  • Redis 4.0 新功能简介:RDB-AOF 混合持久化

  • How To Install and Configure Redis on Ubuntu 16.04

  • Installer Redis 4.0 sur Ubuntu 16.04 LTS

你可能感兴趣的:(Redis特性 之 持久化)