redis-aof-rdb

RDB 写磁盘

rdb持久化是把当前线程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发
手动触发分别对应save和bgsave命令
save命令会阻塞当前redis服务器,直到RDB完成为止,不建议使用。

rdb恢复速度比AOF块

缺点:

无法做到秒级的数据备份,每次执行bgsave都要执行fork操作创建子进程,
属于重量级操作,频繁操作执行成本高。

自动触发

save m n ,表示m秒内数据存在n次修改时,自动触发bgsave
shutdown命令时,如果没有开启AOF持久化功能则自动执行bgsave

redis-check-dump 工具检测RDB文件并获取对应的错误报告

AOF(append only file)

AOF从写: 手动触发 bgrewriteaof 命令
自动触发:
根据auto-aof-rewrite-min-size 最小体积,默认 64MB和
auto-aof-rewrite-percentage 参数 当前AOF文件空间和上一次从写后AOF文件空间的比值

以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的。
AOF的主要作用是解决数据持久化的实时性。

开启AOF

appendonly yes

aof 流程

1.所有的写入命令会追加到aof_buf中
2.AOF缓冲区根据对应的策略向做同步操作
3.随着AOF文件越来越大,需要定期对AOF文件进行重写,达到压缩的目的
4.当redis重启时,可以加载AOF文件进行数据恢复

同步策略

系统调用write和fsync说明
write操作会触发延迟写(delayed write) 机制。
Linux在内核提供页缓冲区用来提高硬盘IO性能。
write操作在写入系统缓冲区后直接返回。同步硬盘依赖于系统调用机制,
例如:缓冲区页空间写满或到达特定时间周期。同步文件前,
如果此时系统故障宕机,缓冲区的数据将丢失。
fsync 针对单个文件操作(比如AOF文件),做强制硬盘同步,
 fsync将阻塞直到写入硬盘完成后返回,保证了数据持久化。
配置always 时,不建议
配置为no,由操作系统每次同步AOF,不可控
配置everysec 每秒钟,建议,理论上系统突然宕机的情况下,只会丢失1秒钟的数据

重写机制

随着aof文件越来越大,redis引入了AOF重写机制压缩文件体积
重写后AOF文件为什么变小
1.进程内已经超时的数据不再写入文件
2.旧的AOF文件含有无效命令,如del key1、hdel key2、srem keys、set a 111、set a 222.重写使用进程内数据直接生成,这样新的AOF文件只保留最终数据的写入命令。

复制

建立复制

在配置文件中加入slaveof  masterIp 端口 slaveof 127.0.0.1 6379
info replication 查看复制相关状态

密码

requirepass 

这是访问需要 auth

从节点设置只读

由于复制只能从主节点到从节点,对于从节点的修改,主节点无法感知,造成数据不一致

slave-read-only=yes

开启传输延迟

跨机房部署开启

repl-disable-tcp-nodelay no 既开启tcp-nodelay功能 默认

建议2.8以上版本

复制偏移量

参与复制的主从节点都会维护自身的复制偏移量,info replication,主会维护自身和从节点的偏移量,通过对比主从偏移量,可以判断主从节点数据是否一致。

节点运行 ID

info server
run_id 454444444444444444444534

psync命令

从节点使用psync命令完成部分复制和全量复制功能, psync {runId 从节点所复制主节点的运行id} {offset 从节点已复制的数据偏移量}

全量复制

主从第一次建立复制时必须经历的阶段。触发全量复制的命令是 sync,redis>2=.8 是 psync
流程:

  1. 发送psync命令进行数据同步,由于第一复制,从节点没有复制偏移量和主节点的运行id,所以发送 psync ? -1
    2)主节点根据 psync ?> -1 解析出当前为全量复制,回复 +FULLRESYNC响应.
  2. 从节点接受主节点的响应数据保存运行ID和偏移量offset,执行到当前步骤时从节点打印信息:
  3. 主节点执行bgsave 保存RDB文件到本地
  4. 主节点发送RDB文件给从节点,从节点接受并直接作为从节点的数据文件
  5. 在从节点开始接受RDB期间,主节点仍然响应读写命令,因此主节点会把这期间写命令数据保存在复制客户端缓冲区内,当从节点完成RDB文件后,主节点再把数据发送给从节点,保证数据一致性. client-output-buffer-limit slave 256MB 64MB 60 ,如果60s内缓冲区消耗持续大于64MB或者直接超过256MB时,主节点讲直接关闭复制客户端连接,造成全量同步失败.
    7)从节点接受完主节点传送过来的全部数据后会清空自身的旧数据
    8)从节点清空完旧数据后,开始加载RDB文件,注意: 在加载时,从节点依然负责响应读数据,可能响应的数据是过期或错误的数据,
    slave-serve-stale-data 默认开启. 如果开启,那么从节点响应任何的命令, no 关闭,返回 SYNC with master inprogress信息
  6. 从节点加载完RDB后,如果开启了AOF, 那么直接做bgrewriteaof操作
注意: 如果RDB文件超过6GB,默认60s 超时, repl-timeout 配置 

redis 3.0之后日志开头 M为主,s从节点,c为 子进程

慢查询总结

对包含上万个元素的hash结构执行 hgetall 操作
slowlog get 10 获取最近10条慢连接

hgetall 改为 hmget,禁用keys,sort命令

调整大对象,拆分为多个小对象

查询大对象命令
redis-cli -h ip -p -a --bigkeys
cpu饱和
top 命令查询
统计命令
redis-cli --stat
持久化阻塞

超过1s,优化调整 fork优化

info stats
iotop 查看具体哪个进程消耗过多的硬盘资源

查询redis进程号

 redis-cli -p  info server |grep process_id
内存交换信息
cat  /proc/4476/smaps |grep Swap
查询句柄
ulimit -n 65535 
ulimit -n 查询
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值