1. RDB持久化
两种持久化方式:
- RDB 内存快照方式,类似与mysql的binlong
- AOF
Redis多个数据库:
- 一个redis内部默认有16个数据库,编号为0-15
- 默认操作是编号为0的数据库
- 可以通过select命令切换数据库
#切换为数据库2
select 2
#查看redis的数据库文件地址
127.0.0.1:6379> config get dir
1) "dir"
2) "/"
127.0.0.1:6379>
1.1 通过save命令实现持久化
- 客户端发送save命令
- 服务器收到save命令后,会阻塞客户端的请求
1.2 通过bgsave命令
- 可以在命令行触发
- 命令行执行bgsave,立即触发执行
- 可以通过服务器端条件触发
- save seconds ops 即:在seconds秒内发生ops次数就会触发RDB持久化操作
- Save 900 1 代表900秒内有一次数据变更操作就触发持久化
- 可以同时配置多条触发条件,如下图:
1.3 RDB配置项
- stop-writes-on-bgsave-error true 在bgsave执行出错时,阻止前面的请求,默认是true
- Rdbcompression yes 是否对RDB文件进行压缩,默认是yes
- rdbchecksum yes 是否对rdb文件进行校验,默认是yes
1.4 RDB还原
- Redis会自动加载dump.rdb 文件
2. AOF持久化
- AOF即Append Only File ,保存redis的执行命令来记录数据
- 重新加载是,通过重放这些命令来实现数据的回复
- 文件里面的目录是纯文本格式,可以直接打开查看
- 整个过程中只有一个文件,通过重写技术缩减此文件的大小
- 命令成功后才会写入AOF文件
graph LR
A((客户端))-->|发送命令|B[服务器]
B[服务器]-->|保存被执行的命令|C[AOF文件]
2.1 AOF配置
############################## APPEND ONLY MODE ###############################
# 是否开启AOF,默认关闭(no)
appendonly yes
# 指定 AOF 文件名
appendfilename appendonly.aof
# Redis支持三种不同的刷写模式:
# appendfsync always #每次收到写命令就立即强制写入磁盘,是最有保证的完全的持久化,但速度也是最慢的,一般不推荐使用。
appendfsync everysec #每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,是受推荐的方式。
# appendfsync no #完全依赖OS的写入,一般为30秒左右一次,性能最好但是持久化最没有保证,不被推荐。
#在日志重写时,不进行命令追加操作,而只是将其放在缓冲区里,避免与命令的追加造成DISK IO上的冲突。
#设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入,默认为no
no-appendfsync-on-rewrite no
#当前AOF文件大小是上次日志重写得到AOF文件大小的二倍时,自动启动新的日志重写过程。
auto-aof-rewrite-percentage 100
#当前AOF文件启动新的日志重写过程的最小值,避免刚刚启动Reids时由于文件尺寸较小导致频繁的重写。
auto-aof-rewrite-min-size 64mb
2.2 开启AOF
首先找到redis.conf配置文件
- 可以看到我的redis.conf在/etc/redis/6379.conf,打开配置文件,找到appendonly配置,默认是no,改为yes
- 修改dir目录,这个目录保存了rdb文件和aof文件的保存位置,默认是根目录,这个不太好,我改到了redis的安装目录,新建了redisdata文件
- appendfsync 改为everysec 这是每秒钟强制写入磁盘一次的意思
- 改好后保存6379.conf,并重启redis服务生效,打开redisdata目录就可以看到dump.rdb文件和appendonly.aof,至此,aof开启成功
2.3 redis的AOF还原
- 设置appendonly yes;
- 将appendonly.aof放到dir参数指定的目录;
- 启动Redis,Redis会自动加载appendonly.aof文件。
到这里,Redis的持久化部分就完成了。