美文网首页Redis相关
Redis开发与运维总结

Redis开发与运维总结

作者: Oliver_Li | 来源:发表于2021-01-26 23:02 被阅读0次
  • 《Redis开发与运维》总结,需实测数据来源于Redis5.0.7
  1. 慢日志分析:
  • 客户端执行过程:发送 - 排队 - 执行 - 反馈,慢日志只记录执行时间
  • Redis提供两个配置:
    • 预设阈值slowlog-log-slower-than:默认10000微秒,线上建议缩小至1000微秒
    • 保存条数slowlog-max-len:默认128条,线上建议1000条或更大
    • 其他:用config get slowlog*查询配置、slowlog get查询具体数据、还可以查询条数,设置有指令和配置文件两种方式。
  • 数据项:一共6项分别代表 ID、发生时间、耗时、具体指令、客户端ip port、客户端别名。
  1. 客户端:
  • Redis通信协议:
    • RESP,RESP规定了Redis数据的发送和响应格式,可以用socket模拟编
      写客户端。
    • 开发过一个Redis远程控制台功能,和redis-cli一样直接执行指令,没找到Jedis直接执行指令的方法,所以就想着模拟RESP编写客户端,发现指令不按RESP标准格式传输,socket直接传输命令加换行如“get a\r\n”也可以执行,返回结果和RESP一致,省去了很多时间。
  • 客户端问题排查client list属性说明:
    • id、addr(远程ip端口)、fd(文件描述符)、name(客户端名字可设置)
    • qbyf、qbuf-free:输入缓冲区总容量、剩余容量,每个缓冲区不超过1G否则关闭,不受maxmemory限制,超出会产生数据丢失、淘汰、OOM等异常,可能场景处理速度跟不上堆积、大key、Redis阻塞,还可以调用info clients监控最大缓冲,超出范围报警。
    • obl、oll、omem:输出缓冲区,可配置容量,同样不受maxmemory限制超出产生异常,obl代表固定缓冲区长度16KB,oll代表动态缓冲区长度,omem代表总使用字节数,obl返回较小结果,oll返回较大结果,需监控内存抖动或配置上控制。
    • age、idle:代表已连接时间和空闲时间、idle过大时说明客户端一直空闲。
    • maxclients、timeout:最大连接数默认10000、默认没超时,超过后客户端强制关闭。
    • flag:当前客户端状态,如正在执行monitor或正在等待阻塞时间等等
  1. RDB:
  • RDB:压缩的二进制文件,是Redis在某个时间点的快照,适用于备份、全量复制,回复速度远远快于AOF,但因为是全量快照,所以不能做到实时备份。
  • bgsave:创建子线程,生成RDB保存到硬盘的指令。指令分手动触发和自动触发两种方式,自动触发分四种情况:
    • 配置中默认有三个save m n配置即m秒内执行n次修改,则触发bgsave
    • 从节点复制时需要把主节点RDB文件发给从节点,触发一次
    • debug reload命令会生成RDB文件并置空Redis
    • 执行shutdown时,如果没开AOF会触发
  1. AOF:
  • AOF:追加修改命令(RESP格式)到缓冲区,缓冲区根据配置定期同步到磁盘,弥补了RDB的缺点。
  • appendonly:与RDB不同,AOF是配置中appendonly控制的,默认不开启。
  • appendfsync:上面提到的缓冲区同步策略,分为三种:
    • always:每次修改都要同步到AOF,不会丢数据,性能差
    • everysec(默认):每秒同步一次,性能和安全的折中
    • no:同步依靠系统调度,如缓冲区页空间满或特定时间周期。
  1. 阻塞:
  • 问题发现:客户端报异常,服务端监控,监控内容包括慢日志、大Key、每秒指令个数、内存容量、CPU、硬盘、网络IO等。
  1. 常见监控信息及获取途径:
  • 命中率:info指令,keyspace_hits:14414110、keyspace_misses:3228654
  • 客户端连接数:info clients connected_clients
  • 客户端上限:CONFIG GET maxclients
  • 内存使用率:info memory的maxmemory、used_memory、used_memory_rss、mem_fragmentation_ratio(碎片率)
  • 慢日志:SLOWLOG GET
  • 每秒操作数:info stats | grep instantaneous_ops_per_sec
  • Redis IO:info stats | grep instantaneous_input_kbps
  • 系统CPU、用户cpu

未完

相关文章

网友评论

    本文标题:Redis开发与运维总结

    本文链接:https://www.haomeiwen.com/subject/fvvnzktx.html