Redis安全高效持久化
Redis安全高效持久化
王先森Redis持久化
Redis
为了内部数据
的安全考虑
,会把本身的数据以文件
的形式保存
到硬盘中
一份,在服务器重启
后会自动
把硬盘
的数据恢复
到内存
(Redis)里面
Redis持久化
分为:
- RDB 持久化方式
- AOF 持久化方式
两种持久化可以同时开启
持久化的两种方式介绍
RBD介绍
RDB持久化把当前进程数据生成快照(.rdb)文件保存到硬盘的过程,有手动触发和自动触发手动触发有save和bgsave两命令。
save命令:阻塞当前Redis,直到RDB持久化过程完成为止,若内存实例比较大会造成长时间阻塞,线上环境不建议用它
bgsave命令:redis进程执行fork操作创建子线程,由子线程完成持久化,阻塞时间很短(微秒级),是save的优化,在执行redis-cli shutdown关闭redis服务时,如果没有开启AOF持久化,自动执行bgsave;
显然bgsave是对save的优化。
bgsave运行流程
RDB 持久化优缺点
可以在指定的时间间隔内生成数据集的 时间点快照(point-in-time snapshot)。
优点:速度快,适合于用做备份,主从复制也是基于RDB持久化功能实现的。
缺点:会有数据丢失
rdb持久化核心配置参数:
1 | vim /opt/redis_cluster/redis_6379/conf/redis_6379.co |
AOF介绍
AOF持久化流程:命令写入(append),文件同步(sync),文件重写(rewrite),重启加载(load);
流程说明:
- 所有的写入命令(set hset)会append追加到aof_buf缓冲区中
- AOF缓冲区向硬盘做sync同步
- 随着AOF文件越来越大,需定期对AOF文件rewrite重写,达到压缩
- 当redis服务重启,可load加载AOF文件进行恢复
AOF 持久化(append-only log file)优缺点:
记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。
AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。
优点:可以最大程度保证数据不丢
缺点:日志记录量级比较大
AOF持久化配置
1 | appendonly yes #是否打开aof日志功能 |
面试题
redis 持久化方式有哪些?有什么区别?
rdb:基于快照的持久化,速度更快,一般用作备份,主从复制也是依赖于rdb持久化功能
aof:以追加(重写机制)的方式记录redis操作日志的文件。可以最大程度的保证redis数据安全,类似于mysql的binlog。
redis重启恢复加载rdb和aof同时存在时,优先加载aof。
Redis安全认证
redis默认开启了保护模式,只允许本地回环地址登录并访问数据库。
禁止protected-mode
protected-mode yes/no (保护模式,是否只允许本地访问)
添加密码requirepass {password}
由于redis并发能力极强,仅仅搞密码,攻击者可能在短期内发送大量猜密码的请求,很容易暴力破解,所以建议密码越长越好,比如20位。(密码在 conf文件里是明文,所以不用担心自己会忘记)
1 | vim /opt/redis_cluster/redis_6379/conf/redis_6379.conf |
验证:
1 | ## 方法一 |