首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Redis安全高效持久化

Redis安全高效持久化

作者头像
王先森sec
发布2023-04-24 16:53:22
发布2023-04-24 16:53:22
4030
举报
文章被收录于专栏:王先森王先森

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持久化核心配置参数:

代码语言:javascript
复制
vim /opt/redis_cluster/redis_6379/conf/redis_6379.co
dir  /opt/redis_cluster/redis_6379/
dbfilename dump.rdb
save 900 1      #900秒(15分钟)内有1个更改
save 300 10     #300秒(5分钟)内有10个更改
save 60 10000   #60秒内有10000个更改  

AOF介绍

AOF持久化流程:命令写入(append),文件同步(sync),文件重写(rewrite),重启加载(load); 流程说明:

  1. 所有的写入命令(set hset)会append追加到aof_buf缓冲区中
  2. AOF缓冲区向硬盘做sync同步
  3. 随着AOF文件越来越大,需定期对AOF文件rewrite重写,达到压缩
  4. 当redis服务重启,可load加载AOF文件进行恢复

AOF 持久化(append-only log file)优缺点: 记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 优点:可以最大程度保证数据不丢 缺点:日志记录量级比较大

AOF持久化配置

代码语言:javascript
复制
appendonly yes          #是否打开aof日志功能
appendfsync always      #每1个命令,都立即同步到aof
appendfsync everysec    #每秒写1次
appendfsync no          #写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof.

no-appendfsync-on-rewrite  yes  #正在导出rdb快照的过程中,要不要停止同步
aofauto-aof-rewrite-percentage 100  #aof文件大小比起上次重写时的大小,增长率100%时,重写
auto-aof-rewrite-min-size 64mb   #aof文件,至少超过64M时,重写

面试题

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文件里是明文,所以不用担心自己会忘记)

代码语言:javascript
复制
vim /opt/redis_cluster/redis_6379/conf/redis_6379.conf
requirepass 123456

验证:

代码语言:javascript
复制
### 方法一
 redis-cli -a 123456
127.0.0.1:6379> set k1 v1
OK

### 方法二
 redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> set k2 v2
OK
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • Redis持久化
  • 持久化的两种方式介绍
    • RBD介绍
    • AOF介绍
    • 面试题
  • Redis安全认证
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档