问题描述

在使用Azure Redis的过程中发现读写比较慢,非常卡,执行扩容6-->13GB后,过一段时间也满了。在通过门户Console连接到Reids,通过info Memory名称查看到User_memory_peak_perc指标达到99%以上,怀疑是不是该值的使用导致了Redis读写慢的问题呢?

问题根源

used_memory_peak_perc: 该值表示的是使用内存达到峰值内存的百分比。它的计算方式为:(used_memory/ used_memory_peak) * 100%,即当前redis使用内存/历史使用记录中redis使用内存峰值*100%。而used_memory_peak,表示的是redis的内存消耗峰值(以字节为单位),即历史使用记录中redis使用内存最高峰值。

所以used_memory_peak_perc指数高并不能判断当前Redis的内容使用量。而如果需要判断内存是否使用完,还是需要使用最基本的规则:MaxMemory Used_Memory进行大小比较

在Redis的使用中,另一个导致慢的关键点是执行一些时间复杂度为O(N)的指令,如KEYSHGETALL等,可以执行slowlog来查看Redis执行的慢查询日志。

  • KEYS:Returns all keys matching pattern. While the time complexity for this operation is O(N), the constant times are fairly low.
  • HGETALL命令,而该命令的时间复杂度是O(N) , 这意味着Hash的field越多,当使用HgetAll获取全量数据时,性能越差,该命令的性能与field字段的数量成正比。如果频繁使用,是非常耗时的。

解决办法

升级Redis的内存空间,及设置合理的maxmemory-policy(逐出机制)。当redis内存数据达到maxmemory时,会根据maxmemory-policy配置来淘汰内存数据,以避免内存溢出(OOM: Out of Memory)。redis提供了以下8种淘汰策略:

  • volatile-lru :通过尝试先删除最近不使用的(LRU)密钥来移出密钥,但只有在已设置过期的密钥中才能移出这些密钥,以便为添加的新数据腾出空间。如果查找不到数据,则回退到noeviction。
  • allkeys-lru:通过尝试先删除最近不使用的(LRU)键来移出键(所有数据范围),以便为添加的新数据腾出空间。
  • volatile-random:为添加新的键腾出空间,随机逐出其他键,但是仅逐出设置了过期时间的键。
  • allkeys-random:随机逐出其他键,以便为添加新的键腾出空间(所有数据范围)。
  • volatile-ttl:逐出设置过期的密钥,并尝试首先逐出具有较短生存时间(TTL)的密钥,以便为添加新的键腾出空间。
  • noeviction:执行任何淘汰策略。当达到内存限制并且客户端尝试执行可能导致使用更多内存的命令时,将返回错误(大多数写入命令,但DEL和一些其他例外)。
  • volatile-lfu:使用设置过期并且使用频率最少的键(LFU)中进行驱逐。
  • allkeys-lfu:使用频率最少的键(LFU)逐出任何密钥。

参考资料

Redis Commands reference: https://redis.io/commands/

【Azure Redis 缓存】Azure Redis读写比较慢/卡的问题排查的更多相关文章

  1. 【Azure Redis 缓存 Azure Cache For Redis】Azure Redis由低级别(C)升级到高级别(P)的步骤和注意事项, 及对用户现有应用的潜在影响,是否需要停机时间窗口,以及这个时间窗口需要多少的预估问题

    问题描述 由于Azure Redis的性能在不同级别表现不同,当需要升级/缩放Redis的时候,从使用者的角度,需要知道有那些步骤? 注意事项? 潜在影响?停机事件窗口? 升级预估时间? 解决方案 从 ...

  2. 【Azure Redis 缓存 Azure Cache For Redis】如何设置让Azure Redis中的RDB文件暂留更久(如7天)

    问题描述 Azure Redis和所有的Redis服务一样,可以让你保留存储在Redis中的数据.以防万一在Redis服务器出现故障的时候能尽可能小的减少数据的损失.在Azure Redis服务中,默 ...

  3. 【Azure Redis 缓存 Azure Cache For Redis】Redis性能问题,发现Server Load非常的高,导致正常连接/操作不成功

    问题描述 在正常使用Azure Redis的服务中,突然发现Redis 的CPU达到了100%, 正常的使用中发现性能问题严重.从Redis的门户图表中,观察到CPU, Connection,Lent ...

  4. 【Azure Redis 缓存 Azure Cache For Redis】在创建高级层Redis(P1)集成虚拟网络(VNET)后,如何测试VNET中资源如何成功访问及配置白名单的效果

    当使用Azure Redis高级版时候,为了能更好的保护Redis的安全,启用了虚拟网路,把Redis集成在Azure中的虚拟网络,只能通过虚拟网络VENT中的资源进行访问,而公网是不可以访问的.但是 ...

  5. 【Azure Redis 缓存 Azure Cache For Redis】使用Redis自带redis-benchmark.exe命令测试Azure Redis的性能

    问题描述 关于Azure Redis的性能问题,在官方文档中,可以查看到不同层级Redis的最大连接数,每秒处理请求的性能. 基本缓存和标准缓存 C0 (250 MB) 缓存 - 最多支持 256 个 ...

  6. 【Azure Redis 缓存 Azure Cache For Redis】Redis连接池

    问题描述 Redis根据定价层说明,不同级别支持的连接数最多可达4万(同时),但是当短时间又大量连接请求建立的时候,Redis服务的服务压力非常大,到达100%.严重影响了高响应的要求.最严重时,经常 ...

  7. 【Azure Redis 缓存 Azure Cache For Redis】Redis出现 java.net.SocketTimeoutException: Read timed out 异常

    问题描述 在使用Azure Redis时,遇见Read Timed out异常, Redis的客户端使用的时jedis.问题发生时,执行redis部分指令出错,大部分get指令,set指令能正常执行. ...

  8. 【Azure Redis 缓存 Azure Cache For Redis】当使用Jedis客户端连接Redis时候,遇见JedisConnectionException: Could not get a resource from the pool / Redis connection lost

    问题情形 当在执行Redis一直指令时,有可能会遇见如下几种错误: 1) redis.clients.jedis.exceptions.JedisConnectionException: Could ...

  9. Azure Redis 缓存使用注意事项与排查问题文档整理

    StackExchange.Redis 使用名为 synctimeout 的配置设置进行同步操作,该设置的默认值为 1000 毫秒. 如果同步调用未在规定时间内完成,StackExchange.Red ...

  10. [转]在nodejs使用Redis缓存和查询数据及Session持久化(Express)

    本文转自:https://blog.csdn.net/wellway/article/details/76176760 在之前的这篇文章 在ExpressJS(NodeJS)中设置二级域名跨域共享Co ...

随机推荐

  1. MySQL in Windows安装以及异名恢复的简单过程

    下载相关 建议获取最新版本的Mysql数据库 可以获取 zip 格式的安装文件 https://dev.mysql.com/downloads/mysql/ 或者获取 msi 格式的安装文件 http ...

  2. Oracle表数量对数据泵备份恢复速度的影响情况

    Oracle表数量对数据泵备份恢复速度的影响情况 背景 随着公司产品交付后的时间越来越久. 数据库的备份恢复速度会越来越慢. 最开始一直认为是因为数据量导致的. 但是最近发现, 如果只是将数据库表的量 ...

  3. vue3逻辑分离和页面快速展示数据

    逻辑分层 我们在使用vue3开发项目的时候, 如何进行[区域分层]呢???? 举一个简单的小粒子 一个区域有[查询逻辑.修改后的保存逻辑.新增逻辑.删除逻辑] 这个页面可能还有其他的区域.A区域.B区 ...

  4. 开源IM项目OpenIM 客户端SDK架构剖析-确保消息的有序性,以及消息百分百可达

    开源IM项目OpenIM第二版对于客户端架构进行了局部重构,解决了消息触发时序等bug,也梳理了内部模块.目前已经接近尾声,本文重点讲解SDK架构,以便大家深入了解OpenIM,并希望大家能深度参与开 ...

  5. Leetcode 42题 接雨水(Trapping Rain Water) Java语言求解

    题目链接 https://leetcode-cn.com/problems/trapping-rain-water/ 题目内容 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱 ...

  6. 强化学习从基础到进阶-案例与实践[5.1]:Policy Gradient策略梯度-Cart pole游戏展示

    强化学习从基础到进阶-案例与实践[5.1]:Policy Gradient策略梯度-Cart pole游戏展示 强化学习(Reinforcement learning,简称RL)是机器学习中的一个领域 ...

  7. endnote文献使用简明教程+遇到问题

    安装下载endnote 1.双击[EndNote X9 v19.0.0.12062 Setup.msi]安装EndNote X9,安装时选择试用,安装完成后不要运行EndNote: 2.如果想使用汉化 ...

  8. 多路io复用epoll [补档-2023-07-20]

    多路io- epoll 4-1简介 ​ 它是linux中内核实现io多路/转接复用的一个实现.(epoll不可跨平台,只能用于Linux)io多路转接是指在同一个操作里,同时监听多个输入输出源,在其中 ...

  9. go中的 位预算,反码、补码、原码

    https://baike.baidu.com/item/%E4%BD%8D%E8%BF%90%E7%AE%97/6888804 首先关于"位运算",看下百度百科就行了. 总结:在 ...

  10. JS Leetcode 1370. 上升下降字符串 题解分析,桶排序与charCodeAt fromCharCode妙用

    壹 ❀ 引 本题来自LeetCode1370. 上升下降字符串,难度简单,是一道考察对于字符串遍历熟练度的题目,题目描述如下: 给你一个字符串 s ,请你根据下面的算法重新构造字符串: 从 s 中选出 ...