1、Redis基础
2、Redis高级
1.1持久化
1、RDB(关注点:数据)
概述
将当前数据进行保存,快照形式,存储数据结果,存储格式简单,关注点在数据
开启方式一
命令:
127.0.0.1:6379>save
作用:手动执行一次保存操作,默会在Redis的安装路径的data目录下生成一个dump.rdb二进制文件
save指令相关配置
- dbfilename dump.rdb
- 说明:设置温蒂数据库文件名,默认值为dump.rdb
- 经验:通常设置为dump-端口号.rdb
- dir
- 说明:设置存储.rdb文件的路径
- 经验:通常设置成存储空间较大的目录中,目录名称data
- rdbcompression yes
- 说明:设置存储至本地数据库时是否压缩数据就,默认为yes,采用LZF压缩
- 经验:通常默认为开启状态,如果设置为no,可以节省CPU运行时间,但会使存储文件变得巨大
- rdbchecksum yes
- 说明:设置是否进行rdb文件格式校验,该校验过程在写文件和读文件过程均进行
- 经验:通常为开启状态,如果设置为no,可以解决读写过程约10%时间消耗,但是存在一定的数据损坏的风险
数据恢复过程
在Redis服务启动的时候,就会自动加载rdb文件,将数据恢复
save指令工作原理
当有四个客户端依次执行以上命令时,由于Redis单线程的特点,四条指令会被塞进队列中依次执行,但是save指令的执行会阻塞当前Redis服务器,直到当前rdb过程完成为止,因此有可能会造成长时间阻塞,线上环境不建议使用。
开启方式二
命令
127.0.0.1:6379>bgsave
Background saving started
工作原理:
作用:手动启动后台保存操作(会调用glibc的函数fork产生一个子进程,快照持久化完全交给子进程来处理,父进程继续处理客户端请求,子进程刚刚产生时,他和父进程共享内存里面的代码段和数据段),但不是立即执行
开启方式三
命令: 在配置文件中添加如下配置:
save second changes
作用:满足限定时间范围内(second)key的变化数量达到指定数量(changes)即进行持久化 范例:在10秒内300个key发生变化就会进行持久化
save 10 300
三种开启方式的对比
2、AOF(关注点:数据的操作过程)
概述
将数据的操作过程进行保存,日志形式,存储的是操作过程,存储格式复杂,关注点在数据的操作过程
AOF写数据过程
当Redis服务端接收到set指令时,并不会直接写.aof文件,而是先存储在缓存区,等达到一定条件之后再写.aof文件
AOF从缓存往.aof文件写数据的三种策略(appendfsync)
- always(每次):每次写入操作均同步到AOF文件中,数据零误差,性能较低,不建议使用
- everysec(每秒):每秒将缓冲区中的指令同步到AOF文件中,数据准确性较高,性能较高,建议使用,也是默认配置,但是在系统突然宕机的情况下会丢失1秒内的数据
- no(系统控制):由操作系统控制每次同步到AOF文件的周期,整体过程不可控
开启方式
配置: 在配置文件中添加如下配置:
appendonly yes|no
作用: 是否开启AOF持久化功能,默认为不开启状态
配置: 在配置文件中添加如下配置:
appendfsync always|everysec|no
作用: AOF写数据策略
其他配置:
appendfilename filename
修改AOF持久化文件名,建议配置为APPendonly-端口号.aof
dir
AOF持久化文件保存路径,与RDB持久化文件保持一致即可
AOF重写
随着命令不断写入AOF,文件会越来越大,为了解决这个问题,Redis引入了AOF重写机制压缩文件体积。AOF文件重写是将Redis进程内的数据转化为写命令同步到新AOF文件的过程。简单说就是对同一个数据的弱干条命令执行结果转化为最终结果数据对应的指令进行记录。
如下图中左边的指令,重写后会生成左边两条指令,但最终结果都是一样的
AOF重写规则
- 进程内已超时的数据不再写入文件
- 忽略无效指令,重写时使用进程内数据直接生成,这样新的AOF文件只保留最终数据的写入命令
- 对同一条数据的多条写命令合并为一条命令
如:lpush a、lpush b、lpush c 可转化为:lpush a b c,为防止数据量过大造成客户端缓冲区溢出,对list、hash、set、zset等类型,每条指令最多写入64个元素
AOF重写方式
手动重写:
127.0.0.1:6379>bgrewriteaof
Background append only file rewriting started
自动重写: 在配置文件中添加如下配置:
auto-aof-rewrite-min-size(自动重写最小尺寸) size
auto-aof-rewrite-percentage(自动重写百分比) percentage
AOF重写原理
点击查看
3、RDB和AOF的区别
4、如何选择持久化方式
- 对数据非常敏感,建议使用默认的AOF持久化方案
- 数据呈现阶段有效性,建议使用RDB持久化方案
- 综合对比
- 如果不能承受数分钟以内的数据丢失,对业务数据非常敏感,选用AOF
- 如果能承受数分钟以内的数据丢失,且追求大数据集的恢复速度,选用RDB
- 灾难恢复选用RDB
- 双保险策略,同时开启RDB和AOF,重启后,Redis优先选用AOF来恢复数据,降低丢失数据的量
5、持久化的应用场景
|