云服务器内容精选
-
背景说明 在开源Redis的键空间中,有两种删除Key的方式。 使用DEL等命令直接显式对Key进行删除。 使用类似于EXPIRE等命令对Key设置过期时间,当达到过期时间时,Redis键空间中的Key将不可访问。对于设置了过期时间的Key,当达到过期时间时,Redis不会立即对Key进行删除,由于Redis当前主线程仍然为单线程,故Redis设计了几种机制对已经过期的Key进行内存释放: 惰性删除:Redis的删除策略由主循环中的判断逻辑进行控制,所有Key读写命令执行之前都会调用函数对其进行检查,如果过期,则删除该键,然后返回Key不存在的结果;未过期则不做操作,继续执行原有的命令。 定期删除:由Redis的定时任务函数实现,该函数以一定的频率运行,每次运行时,都从键空间中随机取出一定数量的Key进行检查,并删除其中的过期键。(默认一次从设置过期时间的Key中随机检查20个,每秒10次) 不是每次定时任务都会检查所有的Key,而是随机检查一定数量的Key,该机制旨在防止阻塞Redis主进程太久而造成业务阻塞,所以会造成已过期的Key释放内存速度较慢。
-
自动扫描参数配置 在执行过期key扫描时,若您想设置自动扫描,单击“自动扫描”右侧的,弹出“自动扫描设置”页面,进行相应设置后,单击“确定”自动扫描配置完成。 自动扫描配置参数说明如下表1。 表1 自动扫描配置参数 配置参数 参数含义 取值范围 默认值 备注 首次扫描时间 设定的第一次扫描时间,须设定在当前时间之后。 取值格式:YYYY/MM/DD hh:mm:ss - - 扫描间隔 从首次扫描时间开始,每隔一个间隔时间,便启动一次扫描。 0~43,200,单位:分 1440 如果到达启动时刻,上一次扫描还未结束,则本次轮空。 启动扫描的时机有五分钟冗余量,即超过本次启动时刻,不足五分钟,仍然会启动,不至于轮空。 说明: 连续扫描可能使cpu占用率较高,建议根据实例中key总量以及key增长情况来配置,可参考下面性能说明和配置建议。 扫描超时 此参数的目的在于避免不可知原因造成的扫描超时,导致后面的定时任务无法执行。设定此参数,超过超时时间后,返回失败,以便能继续进行下一轮扫描。 1~86,400,单位:分 2880 时间不少于扫描间隔时间的2倍。 可根据每次过期key扫描的时间,以及使用场景所能承受的最大超时时间,设定一个经验值。 迭代扫描key数量 SCAN命令用于迭代当前数据库中的key集合。 COUNT选项的作用就是让用户告知迭代命令, 在每次迭代中应该从数据集里返回多少元素。具体参见scan命令介绍。迭代式扫描可降低一次扫描过多key而造成扫描时间过长,影响redis性能的问题。 10~1,000,单位:个 10 举例:redis中有1000万个key,迭代扫描key数量设为1000,则迭代10000次可完成全库扫描。 性能说明: 数据面底层SCAN扫描间隔5ms,相当于1秒钟扫描200次。迭代扫描key数量设为10/50/100/1000时,每秒钟扫描2000/10000/20000/200000个key。 每秒钟扫描key数量越大,cpu占用率也相应增加。 测试参考: 使用主备实例测试,在有1000万不过期和500万过期的key,过期时间为1-10秒的场景下,完成一次全库扫描,测试数据如下: 以下测试结果仅供参考,不同局点环境和网络波动等客观条件可能产生差异。 自然删除,每秒删除1万条过期key,删除500万过期key,耗时约为8分钟,cpu占用率约为5%。 “迭代扫描key数量”设为10,耗时约为 1500万/0.2万/60秒 = 125分,cpu占用率约为8%。 “迭代扫描key数量”设为50,耗时约为 1500万/1万/60秒 = 25分, 删除key时cpu占用率约10%。 “迭代扫描key数量”设为100,耗时约为 1500万/2万/60秒 = 12.5分, 删除key时cpu占用率约20%。 “迭代扫描key数量”设为1000,耗时约为 1500万/20万/60秒 = 1.25分,删除key时cpu占用率约为25%。 建议配置:
-
DCS过期Key扫描 基于开源Redis以上机制,分布式缓存服务提供了一种通用的方式,来定时释放所有已经过期Key占用的内存,通过自行配置定时任务,在任务执行期间,会对所有缓存实例的主节点进行扫描操作,扫描操作会遍历整个实例的键空间,触发Redis引擎中对Key过期的判断,从而释放已过期的Key。 只有Redis 4.0、Redis 5.0、和Redis 6.0基础版实例支持过期key扫描。 建议在业务低峰时段执行过期Key扫描,降低CPU被用满的可能。 不支持查询已释放的过期Key。
-
响应示例 状态码: 200 设置热key自动分析配置成功。 { "instance_id" : "5f9057b5-c330-4ee2-8138-7e69896eeec3", "enable_auto_scan" : true, "schedule_at" : [ "21:00" ], "updated_at" : "2020-06-17T02:42:40.793Z" } 状态码: 400 非法请求。 { "error_code" : "DCS.4922", "error_msg" : "Does not support hotkey analyze." }
-
请求示例 设置热key自动分析任务,每日缓存分析时间为21:00。 PUT https://{dcs_endpoint}/v2/a4d31cb6-3d72-4fdc-8ec9-6e3a41e47f71/instances/5560df16-cebf-4473-95c4-d1b573c16e79/hotkey/autoscan { "enable_auto_scan" : true, "schedule_at" : [ "21:00" ] }
-
响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 instance_id String 所属实例ID。 enable_auto_scan Boolean 是否开启缓存分析定时任务。 schedule_at Array of strings 每日分析时间,时间格式为21:00,时间为UTC时间。 updated_at String 配置更新时间,时间格式为2020-06-15T02:21:18.669Z。 状态码: 400 表4 响应Body参数 参数 参数类型 描述 error_msg String 错误信息。 最大长度:1024 error_code String 错误码。 最大长度:9 error_ext_msg String 扩展错误信(暂未使用,赋值为null)。 最大长度:1024 状态码: 401 表5 响应Body参数 参数 参数类型 描述 error_msg String 错误信息。 最大长度:1024 error_code String 错误码。 最大长度:9 error_ext_msg String 扩展错误信(暂未使用,赋值为null)。 最大长度:1024 状态码: 403 表6 响应Body参数 参数 参数类型 描述 error_msg String 错误信息。 最大长度:1024 error_code String 错误码。 最大长度:9 error_ext_msg String 扩展错误信(暂未使用,赋值为null)。 最大长度:1024 状态码: 404 表7 响应Body参数 参数 参数类型 描述 error_msg String 错误信息。 最大长度:1024 error_code String 错误码。 最大长度:9 error_ext_msg String 扩展错误信(暂未使用,赋值为null)。 最大长度:1024 状态码: 500 表8 响应Body参数 参数 参数类型 描述 error_msg String 错误信息。 最大长度:1024 error_code String 错误码。 最大长度:9 error_ext_msg String 扩展错误信(暂未使用,赋值为null)。 最大长度:1024
-
响应示例 状态码: 200 查询热key分析详情成功。 { "id" : "858ee14c-2271-4489-8b82-7bda7459ae3e", "instance_id" : "5f9057b5-c330-4ee2-8138-7e69896eeec3", "status" : "success", "scan_type" : "manual", "created_at" : "2020-06-15T02:21:18.669Z", "started_at" : "2020-06-15T02:21:23.534Z", "finished_at" : "2020-06-15T02:21:25.588Z", "keys" : [ { "name" : "dcs-hotkey-test", "type" : "string", "shard" : "192.168.1.134:6379", "db" : 0, "size" : 3000, "unit" : "byte", "freq" : 4 } ] } 状态码: 400 非法请求。 { "error_code" : "DCS.4922", "error_msg" : "Does not support hotkey analyze." }
-
响应参数 状态码: 200 表2 响应Body参数 参数 参数类型 描述 id String 热key分析记录ID。 instance_id String 实例ID。 status String 分析任务状态。 枚举值: waiting running success failed scan_type String 分析方式。 枚举值: manual auto created_at String 分析任务创建时间,格式为:"2020-06-15T02:21:18.669Z"。 started_at String 分析任务开始时间,格式为:"2020-06-15T02:21:18.669Z"(创建分析任务时此值为null,不返回)。 finished_at String 分析任务结束时间,格式为:"2020-06-15T02:21:18.669Z"(创建分析任务时此值为null,不返回)。 num Integer 热key的数量。 keys Array of HotkeysBody objects 热key记录(创建分析任务时此值为null,不返回)。 表3 HotkeysBody 参数 参数类型 描述 name String Key名称。 type String Key类型。 枚举值: string list set zset hash shard String 热key所在的分片,仅在实例类型为集群时支持,格式为ip:port。 db Integer 热key所在的DB。 size Long Key的value大小。 unit String 表示key的单位。count:key的数量,byte:key的大小。 freq Integer 表示某个key在一段时间的访问频度,会随着访问的频率而变化。 该值并不是简单的访问频率值,而是一个基于概率的对数计数器结果,最大为255(可表示100万次访问),超过255后如果继续频繁访问该值并不会继续增大,同时默认如果每过一分钟没有访问,该值会衰减1。 状态码: 400 表4 响应Body参数 参数 参数类型 描述 error_msg String 错误信息。 最大长度:1024 error_code String 错误码。 最大长度:9 error_ext_msg String 扩展错误信(暂未使用,赋值为null)。 最大长度:1024 状态码: 401 表5 响应Body参数 参数 参数类型 描述 error_msg String 错误信息。 最大长度:1024 error_code String 错误码。 最大长度:9 error_ext_msg String 扩展错误信(暂未使用,赋值为null)。 最大长度:1024 状态码: 403 表6 响应Body参数 参数 参数类型 描述 error_msg String 错误信息。 最大长度:1024 error_code String 错误码。 最大长度:9 error_ext_msg String 扩展错误信(暂未使用,赋值为null)。 最大长度:1024 状态码: 404 表7 响应Body参数 参数 参数类型 描述 error_msg String 错误信息。 最大长度:1024 error_code String 错误码。 最大长度:9 error_ext_msg String 扩展错误信(暂未使用,赋值为null)。 最大长度:1024 状态码: 500 表8 响应Body参数 参数 参数类型 描述 error_msg String 错误信息。 最大长度:1024 error_code String 错误码。 最大长度:9 error_ext_msg String 扩展错误信(暂未使用,赋值为null)。 最大长度:1024
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格