您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
(key什么意思)-key的多种意思
数据,阿里,命令(key什么意思)-key的多种意思
发布时间:2016-12-08加入收藏来源:互联网点击:
同样,该方案的实现方式及返回结果使其不具备精确性与实时性,建议仅作为参考。
通过Redis官方客户端redis-cli的hotkeys参数发现热Key
Redis自4.0起提供了hotkeys参数来方便用户进行实例级的热Key分析功,该参数能够返回所有Key的被访问次数,它的缺点同样为不可定制化输出报告,大量的信息会使你在分析结果时复杂度较大,另外,使用该方案的前提条件是将redis-server的maxmemory-policy参数设置为LFU。
通过业务层定位热Key
指向Redis的每一次访问都来自业务层,因此我们可以通过在业务层增加相应的代码对Redis的访问进行记录并异步汇总分析。该方案的优势为能够准确并及时的分析出热Key的存在,缺点为业务代码复杂度的增加,同时可能会降低一些性能。
使用monitor命令在紧急情况时找出热Key
Redis的monitor命令能够忠实的打印Redis中的所有请求,包括时间信息、Client信息、命令以及Key信息。在发生紧急情况时,我们可以通过短暂执行monitor命令并将输出重定向至文件,在关闭monitor命令后通过对文件中请求进行归类分析即可找出这段时间中的热Key。
由于monitor命令对Redis的CPU、内存、网络资源均有一定的占用。因此,对于一个已处于高压状态的Redis,monitor可能会起到雪上加霜的作用。同时,这种异步收集并分析的方案的时效性较差,并且由于分析的精确度取决于monitor的执行时间,因此在多数无法长时间执行该命令的线上场景中本方案的精确度也不够好。
2 使用开源工具发现大Key
Redis的高度流行使我们能够方便的找到大量开源方案来解决我们当前遇到的难题:在不影响线上服务的同时得到精确的分析报告。
使用redis-rdb-tools工具以定制化方式找出大Key
如果你希望按照自己的标准精确的分析一个Redis实例中所有Key的真实内存占用并避免影响线上服务,在分析结束后得到一份简洁易懂的报告,redis-rdb-tools是非常好的选择。
该工具能够对Redis的RDB文件进行定制化的分析,但由于分析RDB文件为离线工作,因此对线上服务不会有任何影响,这是它的最大优点但同时也是它的最大缺点:离线分析代表着分析结果的较差时效性。对于一个较大的RDB文件,它的分析可能会持续很久很久。
3 依靠公有云的Redis分析服务发现大Key及热Key
如果你期望能够实时的对Redis实例中的所有Key进行分析并发现当前存在的大Key及热Key、了解Redis在运行时间线中曾出现过哪些大Key热Key,使自己对整个Redis实例的运行状态有一个全面而又准确的判断,那么公有云的Redis控制台将能满足这个需求。
阿里云Redis控制台中的CloudDBA
CloudDBA是阿里云的数据库智能服务系统,它支持Redis大Key与热Key的实时分析、发现。
大Key及热Key分析底层为阿里云Redis内核的Key分析功能,该功能通过Redis内核直接发现并输出大Key热Key的相关信息,因此,该功能的分析结果准确性高效且对性能几乎无任何影响,你可以通过点击CloudDBA中的“Key分析”进入该功能,如下图1-1:
图1-1:阿里云Redis控制台CloudDBA
Key分析功能共有两个页面,它们允许在不同的时间维度对对应Redis实例中的Key进行分析:
实时:对当前实例立即开始分析当前实例,展示当前存在的所有大Key及热Key。历史:展示该实例近期曾出现过的大Key及热Key,在历史页面中,所有出现过的大Key及热Key都会被记录,哪怕这些Key当前已经不存在。该功能能够很好的反映Redis的历史Key状态,帮助追溯过去或现场已遭破坏的问题。六 大Key与热Key的处理
现在,我们已经通过多种手段找到了Redis中的问题Key,那么我们应当立即着手对他们进行处理,避免它们在之后的时间中引发问题。
1 大Key的常见处理办法
对大Key进行拆分
如将一个含有数万成员的HASH Key拆分为多个HASH Key,并确保每个Key的成员数量在合理范围,在Redis Cluster结构中,大Key的拆分对node间的内存平衡能够起到显著作用。
对大Key进行清理
将不适合Redis能力的数据存放至其它存储,并在Redis中删除此类数据。需要注意的是,我们已在上文提到一个过大的Key可能引发Redis集群同步的中断,Redis自4.0起提供了UNLINK命令,该命令能够以非阻塞的方式缓慢逐步的清理传入的Key,通过UNLINK,你可以安全的删除大Key甚至特大Key。
时刻监控Redis的内存水位
突然出现的大Key问题会让我们措手不及,因此,在大Key产生问题前发现它并进行处理是保持服务稳定的重要手段。我们可以通过监控系统并设置合理的Redis内存报警阈值来提醒我们此时可能有大Key正在产生,如:Redis内存使用率超过70%,Redis内存1小时内增长率超过20%等。
通过此类监控手段我们可以在问题发生前解决问题,如:LIST的消费程序故障造成对应Key的列表数量持续增长,将告警转变为预警从而避免故障的发生。
对失效数据进行定期清理
例如我们会在HASH结构中以增量的形式不断写入大量数据而忽略了这些数据的时效性,这些大量堆积的失效数据会造成大Key的产生,可以通过定时任务的方式对失效数据进行清理。在此类场景中,建议使用HSCAN并配合HDEL对失效数据进行清理,这种方式能够在不阻塞的前提下清理无效数据。
使用阿里云的Tair(Redis企业版)服务避开失效数据的清理工作
如果你的HASH Key过多,同时存在大量的成员失效需要被清理的问题。由于大量Key与大量失效数据的叠加,在此类场景中定时任务已无法做到对无效数据进行及时的清理,阿里云的Tair服务能够很好的解决此类问题。
Tair是阿里云的Redis企业版,它在具备Redis所有特性(包括Redis的高性能特点)的同时提供了大量额外的高级功能。
TairHash是一种可为field设置过期时间和版本的hash类型数据结构,它不但和Redis Hash一样支持丰富的数据接口和高处理性能,还改变了hash只能为key设置过期时间的限制:TairHash允许为field设置过期时间和版本。这极大地提高了hash数据结构的灵活性,简化了很多场景下的业务开发工作。
TairHash使用高效的Active Expire算法,实现了在对响应时间几乎无影响的前提下,高效完成对field过期判断和删除的功能。此类高级功能的合理使用能够解放大量Redis的运维、故障处理工作并降低业务的代码复杂度,让运维将精力投入到其它更有价值的工作中,让研发有更多的时间来写更有价值的代码。
上一篇:(keynote是什么)-keynote研究是什么意思
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |