redis 常见问题

Redis V5.0程序超时频率高是什么原因?

  • CDB新集群默认部署V5.0版本Redis,建议JAVA使用Jedis V3.3及以上版本,PHP使用phpredis V5.1及以上版本
  • Redission连接V5.0会频繁与Server端断开连接,请使用V4.0低版本Redis集群

Redis响应时间突然变慢是怎么回事?

  • 查看是否有慢操作,只要有一个慢操作即会拖累整个集群的响应时间
  • 碎片率过大,适当进行碎片回收会提升访问效率
  • 查看内存使用情况,是否达到内存上限,达到上限后会触发内存清理策略
  • 查看是否有大量Key批量过期,同时过得多Key过期会阻塞正常请求的处理
  • 查看操作系统网络连接数,如果太多的网络连接会导致新连接创建变慢
  • 查看操作系统网卡带宽情况,如果达到上限会出现网络阻塞甚至丢包现象
  • 查看CPU消耗情况,Redis单线程单核处理,CPU负载过高会影响正常请求处理时间
  • 查看持久化模式是否开启,是否出现因为写入过大导致磁盘刷新变慢 

Redis内存突然暴涨原因是什么?

  • 查看Key数量变化,如果伴随有大量Key写入可能是数据突然增多
  • 查看所有连接情况,连接传输数据过大过快
  • 是否有AOF重写触发,重写阶段如果写请求比较多会占用大量的额外内存
  • 是否有RDB持久化触发,这个阶段如果有大量写入也会占用较多内存
  • Redis不支持数据结构(set、list、hash、zset等)内部成员的过期

Redis碎片率较大怎么办?

  • 自带碎片整理回收机制,但回收的效率较低时间长
  • 手动回收,重做节点完成
  • 优化数据存储逻辑,碎片率过大是由于频繁写入长度不一的Value值,尽量采用定长值

如何准确的评估业务场景中需要申请的内存大小?为什么实际写入比预估大几倍?

  • 将文件N等分切割,按比例写入到Redis中,再根据实际内存×N,得到预估总内存
  • 写一个hash、set,执行memory usage key(V4.0+)查看内存大小 × key预估总量
  • Redis内存本身要存储key-v数据之外,还要存储结构本身的元信息等

连接数是怎么计算的?实际连接数为什么大于Jedis设置的最大连接数?

  • 开发人员设置的最大连接数是APP应用端连接池,Redis自身有TCP会话保持和空闲连接回收时间,当连接idle在Redis达到timeout(标配 3600秒)后被动回收
  • 程序配置主动回收:连接释放,调用jedis.close()

posted on 2020-06-30 18:12  dongtime  阅读(185)  评论(0编辑  收藏  举报

导航