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()