CN117033396B - 一种基于Redis的大Key处理方法及装置 - Google Patents
一种基于Redis的大Key处理方法及装置 Download PDFInfo
- Publication number
- CN117033396B CN117033396B CN202311288199.8A CN202311288199A CN117033396B CN 117033396 B CN117033396 B CN 117033396B CN 202311288199 A CN202311288199 A CN 202311288199A CN 117033396 B CN117033396 B CN 117033396B
- Authority
- CN
- China
- Prior art keywords
- key
- large key
- redis
- list
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 15
- 238000012545 processing Methods 0.000 claims abstract description 52
- 238000000034 method Methods 0.000 claims abstract description 29
- 230000015654 memory Effects 0.000 claims description 22
- 238000013508 migration Methods 0.000 claims description 21
- 230000005012 migration Effects 0.000 claims description 21
- 230000001174 ascending effect Effects 0.000 claims description 12
- 238000004590 computer program Methods 0.000 claims description 3
- 238000005457 optimization Methods 0.000 claims description 3
- 230000001360 synchronised effect Effects 0.000 claims description 3
- 238000012544 monitoring process Methods 0.000 claims description 2
- 238000004458 analytical method Methods 0.000 description 17
- 230000008569 process Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 7
- 239000012634 fragment Substances 0.000 description 6
- 238000012216 screening Methods 0.000 description 6
- 230000009286 beneficial effect Effects 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 230000004044 response Effects 0.000 description 4
- 230000000903 blocking effect Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 230000015556 catabolic process Effects 0.000 description 2
- 238000006731 degradation reaction Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 238000013515 script Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000007547 defect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/221—Column-oriented storage; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种基于Redis的大Key处理方法及装置,该方法包括:在Redis运行时,响应于数据写入请求,对当前写入数据进行判断处理,当当前写入数据满足预设的大Key条件时,将当前写入数据的大Key写入预设的大Key列表中,同时将当前写入数据进行存储;基于大Key列表,对Redis中存储的数据进行处理。本申请能够提高Redis中大Key的处理效率。
Description
技术领域
本申请涉及数据处理技术领域,尤其涉及一种基于Redis的大Key处理方法及装置。
背景技术
Redis是一个使用ANSI C编写的开源、支持网络、基于内存、分布式、可选持久性的键值对存储数据库。通常我们会将含有较大数据或含有大量成员、列表数的Key称之为大Key,在Redis的使用中,大Key及热Key会给Redis带来各种各样的问题,而最常见的问题为性能下降、访问超时、数据不均衡等。
为了解决大Key带来的问题,需要先能够识别哪些Key是大Key。Redis有一些内置命令可以用来识别大Key;比如可以使用debug object命令对特定的Key进行分析。该命令能够根据传入的对象(Key的名称)来对Key进行分析并返回大量数据,其中serializedlength的值为该Key的序列化长度,可以选择通过该数据来判断对应Key是否符合你的大Key判定标准,但是这个命令有两个缺陷:一是只能针对特定的Key进行分析,无法对于系统中所有的大Key进行列表或者分析。二是运行代价较大;并且在其运行时,进入Redis的其余请求将会被阻塞直到其执行完毕。
发明内容
有鉴于此,本申请实施例提供了一种基于Redis的大Key处理方法及装置,能够提高Redis中大Key的处理效率。
本申请实施例的技术方案是这样实现的:
第一方面,本申请实施例提供一种基于Redis的大Key处理方法,所述方法包括:
在Redis运行时,响应于数据写入请求,对当前写入数据进行判断处理,当所述当前写入数据满足预设的大Key条件时,将所述当前写入数据的大Key写入预设的大Key列表中,同时将所述当前写入数据进行存储;
基于所述大Key列表,对Redis中存储的数据进行处理。
第二方面,本申请实施例还提供一种基于Redis的大Key处理装置,所述装置包括:
判断模块,用于在Redis运行时,响应于数据写入请求,对当前写入数据进行判断处理,当所述当前写入数据满足预设的大Key条件时,将所述当前写入数据的大Key写入预设的大Key列表中,同时将所述当前写入数据进行存储;
处理模块,用于基于所述大Key列表,对Redis中存储的数据进行处理。
第三方面,本申请实施例还提供一种电子设备,包括:处理器、存储介质和总线,所述存储介质存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储介质之间通过总线通信,所述处理器执行所述机器可读指令,以执行第一方面任一项所述的基于Redis的大Key处理方法。
第四方面,本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行第一方面任一项所述的基于Redis的大Key处理方法。
本申请实施例具有以下有益效果:
(1)采用的是实时进行大Key的登记操作,并且要求登记的时候正确设置有效期,所以其大Key列表中的信息具有良好的实时性。
(2)大Key的定义是大于特定阈值的键值对,而这个阈值可以根据业务需要或者经验值进行设定,从而可以更加灵活的去适应不同的业务场景。
(3)大Key的登记数据结构中保存的是Value的大小,而非原始Value值,在满足了后期分析使用的需要的同时,也避免了拷贝Value两次造成的额外系统负担(因为Value默认需要保存在特定的分片中,如果额外还需要保存在大Key列表,则相比默认实现来说,多了一次Value的拷贝)。
(4)支持各种基于实时大Key登记表的应用,包括但不限于降序排列大Key、筛选出Top N的大Key、优化槽迁移逻辑等。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1是本申请实施例提供的步骤S101-S102的流程示意图;
图2是本申请实施例提供的步骤S201-S202的流程示意图;
图3是本申请实施例提供的步骤S301-S302的流程示意图;
图4是本申请实施例提供的步骤S401-S402的流程示意图;
图5是本申请实施例提供的步骤S501-S502的流程示意图;
图6是本申请实施例提供的步骤S601-S603的流程示意图;
图7是本申请实施例提供的基于Redis的大Key处理装置的结构示意图;
图8是本申请实施例提供的电子设备的组成结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,应当理解,本申请中附图仅起到说明和描述的目的,并不用于限定本申请的保护范围。另外,应当理解,示意性的附图并未按实物比例绘制。本申请中使用的流程图示出了根据本申请的一些实施例实现的操作。应该理解,流程图的操作可以不按顺序实现,没有逻辑的上下文关系的步骤可以反转顺序或者同时实施。此外,本领域技术人员在本申请内容的指引下,可以向流程图添加一个或多个其他操作,也可以从流程图中移除一个或多个操作。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
另外,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
在以下的描述中,所涉及的术语“第一\第二\第三”仅仅是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
需要说明的是,本申请实施例中将会用到术语“包括”,用于指出其后所声明的特征的存在,但并不排除增加其它的特征。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语是为了描述本申请实施例的目的,不是在限制本申请。
Redis是一个使用ANSI C编写的开源、支持网络、基于内存、分布式、可选持久性的键值对存储数据库。通常我们会将含有较大数据或含有大量成员、列表数的Key称之为大Key,下面我们将用几个实际的例子对大Key的特征进行行描述:一个STRING类型的Key,它的值为5MB(数据过大);
一个LIST类型的Key,它的列表数量为20000个(列表数量过多);
一个ZSET类型的Key,它的成员数量为10000个(成员数量过多);
一个HASH格式的Key,它的成员数量虽然只有1000个但这些成员的value总大小为100MB(成员体积过大);
在Redis的使用中,大Key及热Key会给Redis带来各种各样的问题,而最常见的问题为性能下降、访问超时、数据不均衡等。
为了解决大Key带来的问题,需要先能够识别哪些Key是大Key。
Redis有一些内置命令可以用来识别大Key;比如可以使用debug object命令对特定的Key进行分析。该命令能够根据传入的对象(Key的名称)来对Key进行分析并返回大量数据,其中serializedlength的值为该Key的序列化长度,你可能会选择通过该数据来判断对应Key是否符合你的大Key判定标准。这个命令有两个缺陷:一是只能针对特定的Key进行分析,无法对于系统中所有的大Key进行列表或者分析。二是运行代价较大;并且在其运行时,进入Redis的其余请求将会被阻塞直到其执行完毕。
Redis自4.0起提供了MEMORY USAGE命令来帮助分析Key的内存占用,相对debugobject它的执行代价更低,但由于其时间复杂度为O(N)因此在分析大Key时仍有阻塞风险。
用户还可以通过Redis官方客户端redis-cli的bigkeys参数发现大Key。如果你并无明确的目标Key用于分析,而是希望通过工具找出整个Redis实例中的大Key,此时redis-cli的bigkeys参数能够方便的帮你实现这个目标。Redis提供了bigkeys参数能够使redis-cli以遍历的方式分析整个Redis实例中的所有Key并汇总以报告的方式返回结果。该方案的优势在于方便及安全,而缺点也非常明显:分析结果不可定制化:bigkeys仅能分别输出Redis六种数据结构中的最大Key,如果你想只分析STRING类型或是找出全部成员数量超过10的HASH Key,那么bigkeys在此类需求场景下将无能为力。
为解决上述问题,参见图1,图1是本申请实施例提供的基于Redis的大Key处理方法步骤S101-S102的流程示意图,将结合图1示出的步骤S101-S102进行说明。
步骤S101,在Redis运行时,响应于数据写入请求,对当前写入数据进行判断处理,当所述当前写入数据满足预设的大Key条件时,将所述当前写入数据的大Key写入预设的大Key列表中,同时将所述当前写入数据进行存储;
步骤S102,基于所述大Key列表,对Redis中存储的数据进行处理。
上述基于Redis的大Key处理方法,具有以下有益效果:
(1)采用的是实时进行大Key的登记操作,并且要求登记的时候正确设置有效期,所以其大Key列表中的信息具有良好的实时性。
(2)大Key的定义是大于特定阈值的键值对,而这个阈值可以根据业务需要或者经验值进行设定,从而可以更加灵活的去适应不同的业务场景。
(3)大Key的登记数据结构中保存的是Value的大小,而非原始Value值,在满足了后期分析使用的需要的同时,也避免了拷贝Value两次造成的额外系统负担(因为Value默认需要保存在特定的分片中,如果额外还需要保存在大Key列表,则相比默认实现来说,多了一次Value的拷贝)。
(4)支持各种基于实时大Key登记表的应用,包括但不限于降序排列大Key、筛选出Top N的大Key、优化槽迁移逻辑等。
在步骤S101中,在Redis运行时,响应于数据写入请求,对当前写入数据进行判断处理,当所述当前写入数据满足预设的大Key条件时,将所述当前写入数据的大Key写入预设的大Key列表中,同时将所述当前写入数据进行存储。
在一些实施例中,参见图2,图2是本申请实施例提供的步骤S201-S202的流程示意图,将所述当前写入数据的大Key写入预设的大Key列表中,可以通过步骤S201-S202实现,将结合各步骤进行说明。
在步骤S201中,将该大Key的Key作为写入的目标键,以及将该大Key的Value的大小作为写入的目标值构成键值对。
在步骤S202中,将所述键值对写入预设的所述大Key列表中。
这里,本方法的主要思路是在运行时(in runtime)将大于某个尺寸阈值的所有Key登记到一个特殊的数据结构中,并且利用键值有效期来自动清理过期Key;在需要统计、分析大Key的场景中,直接从这个数据结构中读取大Key列表,从而提高对于大Key分析的实时性并降低大Key分析对于业务的影响和阻塞。
其具体实现分成运行时的写请求阶段和大Key的分析利用阶段两个部分。
运行时当Redis Server收到某个请求时,除了正常写入请求之外,还要并行增加一个逻辑判断模块,用于判断当前这个Key/Value对是否符合大Key的要求。当要写入的Value的大小大于一个预先设定好的阈值时,则把这个Key作为大Key并写入到专门的大Key列表中。写入时,以原始Key作为写入的键值(目标键),以原始Value的大小作为写入的Value(目标值)。这样做是因为,后面对于大Key的分析中,只有原始Key和原始Value的大小是我们关心的;而并不关心原始的Value是多少。
在一些实施例中,将所述当前写入数据的大Key写入预设的大Key列表中时,所述方法还包括:
针对被写入预设的所述大Key列表中的大Key,设置过期时间,其中,所述过期时间表示该大Key在所述大Key列表中的有效时间,将所述当前写入数据的大Key写入预设的大Key列表中与针对被写入预设的所述大Key列表中的大Key,设置过期时间为异步操作或同步操作。
这里,需要注意的是,在写入这个大Key登记数据结构中的时候,需要正确设置键值对的过期时间,从而确保过期的键值对会被自动清理,从而避免过期大Key对于后期分析的影响。同时,如果担心这个逻辑操作会对于Redis本身的性能有影响,可以采用异步的方式去执行这个操作;异步进行大Key登记,不会影响大Key相关的分析功能,只是实时性方面会收到一些影响。
Redis可以给每个保存的键值对设置一个有效期,并且在某个键值对过了有效期之后会自动清理该键值对。根据Redis的这个机制,大Key列表对于其中保存的键值对会设置一个等于原始键值对生命周期的有效期。例如,如果原始键值对设置了有效期的话,大Key键值对也会设置同样的有效期;如果原始键值对没有设置有效期,则大Key键值对也无法设置有效期。这样,过了有效期之后,原始键值对和大Key键值对都会同步被清理掉,不留痕迹。
在步骤S102中,基于所述大Key列表,对Redis中存储的数据进行处理。
在大Key的分析利用阶段,用户可以比较方便的遍历这个大Key列表,进行实时大Key的列表展示或者分析。
在一些实施例中,参见图3,图3是本申请实施例提供的步骤S301-S302的流程示意图,基于所述大Key列表,对Redis中存储的数据进行处理,可以通过步骤S301-S302实现,将结合各步骤进行说明。
在步骤S301中,对所述大Key列表中的大Key进行降/升序排列,其中,所述降/升序排列基于每个大Key的Value的大小。
在步骤S302中,对降/升序排列后的大Key进行监控,以及基于降/升序排列后的大Key进行优化调整处理。
这里,按照原始Value的大小进行降序排列,列出当前大Key列表中的大Key实时情况。这个可以方便运维人员进行实时监控,以及后续通过槽迁移、设置Key过期时间等技术手段去优化和调整。
在一些实施例中,参见图4,图4是本申请实施例提供的步骤S401-S402的流程示意图,基于所述大Key列表,对Redis中存储的数据进行处理,可以通过步骤S401-S402实现,将结合各步骤进行说明。
在步骤S401中,响应于槽迁移请求,对于需要进行槽迁移请求的目标Key,判断所述目标Key是否存在于所述大Key列表,若所述目标Key存在于所述大Key列表,读取所述大Key列表中与所述目标Key对应的所述目标值,并将所述目标值保存在内存中。
在步骤S402中,基于所述目标值和磁盘性能,进行对应的槽迁移处理。
这里,在槽迁移的过程中,如果Redis Server或者当前分片中存在比较多的大Key,那么槽迁移中的同步数据阶段可能会持续比较长的时间,从而导致一定时间的Redis调用阻塞。如果在槽迁移的时候,已经存在一个大Key列表,那么槽迁移的流程可以优化为:对于任何一个需要进行迁移的Key,先去判断该Key是否存在于大Key列表。如果该Key也同时存在于大Key列表中,则直接读取大Key列表的value,作为原始Value的大小保存在内存中;然后根据这个原始Value的大小和已知的IOPS磁盘性能,来有针对性的对大Key进行单独同步并且在同步间隙预留出一定的时间片用于响应业务请求。之后再批量对于剩余的非大Key,也就是那些不存在于大Key列表中的Key进行操作。这样,就不会产生长时间的Redis调用阻塞,从而避免了槽迁移操作对于业务的影响。
在一些实施例中,参见图5,图5是本申请实施例提供的步骤S501-S502的流程示意图,基于所述大Key列表,对Redis中存储的数据进行处理,可以通过步骤S501-S502实现,将结合各步骤进行说明。
在步骤S501中,响应于大Key显示请求,对所述大Key列表中的大Key进行遍历处理,其中,所述大Key显示请求用于请求显示Redis中Value大小前N的大Key。
在步骤S502中,基于遍历结果,显示所述大Key列表中Value大小前N的大Key对应的所述键值对。
这里,还可以通过上述方法可以筛选出Top N的大Key,便于用户查看。
在一些实施例中,参见图6,图6是本申请实施例提供的步骤S601-S603的流程示意图,基于所述大Key列表,对Redis中存储的数据进行处理,可以通过步骤S601-S603实现,将结合各步骤进行说明。
在步骤S601中,响应于大Key查询请求,获取待查询的目标Key。
在步骤S602中,从所述大Key列表中查询与所述目标Key相匹配的键值对,若所述大Key列表中存在与所述目标Key相匹配的键值对,显示该键值对。
在步骤S603中,若所述大Key列表中不存在与所述目标Key相匹配的键值对,从Redis中查询所述目标Key。
这里,用户在查询目标Key时,先在大Key列表中进行查询,若大Key\列表中有对应的查询结果,则可以基于大Key列表进行显示,这样,可以提高查询效率。若大Key列表中不存在相应的结果,再在Redis中进行查询。
综上所述,通过本申请实施例具有以下有益效果:
(1)采用的是实时进行大Key的登记操作,并且要求登记的时候正确设置有效期,所以其大Key列表中的信息具有良好的实时性。
(2)大Key的定义是大于特定阈值的键值对,而这个阈值可以根据业务需要或者经验值进行设定,从而可以更加灵活的去适应不同的业务场景。
(3)大Key的登记数据结构中保存的是Value的大小,而非原始Value值,在满足了后期分析使用的需要的同时,也避免了拷贝Value两次造成的额外系统负担(因为Value默认需要保存在特定的分片中,如果额外还需要保存在大Key列表,则相比默认实现来说,多了一次Value的拷贝)。
(4)支持各种基于实时大Key登记表的应用,包括但不限于降序排列大Key、筛选出Top N的大Key、优化槽迁移逻辑等。
基于同一发明构思,本申请实施例中还提供了与第一实施例中基于Redis的大Key处理方法对应的基于Redis的大Key处理装置,由于本申请实施例中的装置解决问题的原理与上述基于Redis的大Key处理方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
如图7所示,图7是本申请实施例提供的基于Redis的大Key处理装置700的结构示意图。基于Redis的大Key处理装置700包括:
判断模块701,用于在Redis运行时,响应于数据写入请求,对当前写入数据进行判断处理,当所述当前写入数据满足预设的大Key条件时,将所述当前写入数据的大Key写入预设的大Key列表中,同时将所述当前写入数据进行存储;
处理模块702,用于基于所述大Key列表,对Redis中存储的数据进行处理。
本领域技术人员应当理解,图7所示的基于Redis的大Key处理装置700中的各单元的实现功能可参照前述基于Redis的大Key处理方法的相关描述而理解。图7所示的基于Redis的大Key处理装置700中的各单元的功能可通过运行于处理器上的程序而实现,也可通过具体的逻辑电路而实现。
在一种可能的实施方式中,判断模块701将所述当前写入数据的大Key写入预设的大Key列表中,包括:
将该大Key的Key作为写入的目标键,以及将该大Key的Value的大小作为写入的目标值构成键值对;
将所述键值对写入预设的所述大Key列表中。
在一种可能的实施方式中,判断模块701将所述当前写入数据的大Key写入预设的大Key列表中时,所述方法还包括:
针对被写入预设的所述大Key列表中的大Key,设置过期时间,其中,所述过期时间表示该大Key在所述大Key列表中的有效时间,将所述当前写入数据的大Key写入预设的大Key列表中与针对被写入预设的所述大Key列表中的大Key,设置过期时间为异步操作或同步操作。
在一种可能的实施方式中,处理模块702基于所述大Key列表,对Redis中存储的数据进行处理,包括:
对所述大Key列表中的大Key进行降/升序排列,其中,所述降/升序排列基于每个大Key的Value的大小;
对降/升序排列后的大Key进行监控,以及基于降/升序排列后的大Key进行优化调整处理。
在一种可能的实施方式中,处理模块702基于所述大Key列表,对Redis中存储的数据进行处理,包括:
响应于槽迁移请求,对于需要进行槽迁移请求的目标Key,判断所述目标Key是否存在于所述大Key列表,若所述目标Key存在于所述大Key列表,读取所述大Key列表中与所述目标Key对应的所述目标值,并将所述目标值保存在内存中;
基于所述目标值和磁盘性能,进行对应的槽迁移处理。
在一种可能的实施方式中,处理模块702基于所述大Key列表,对Redis中存储的数据进行处理,包括:
响应于大Key显示请求,对所述大Key列表中的大Key进行遍历处理,其中,所述大Key显示请求用于请求显示Redis中Value大小前N的大Key;
基于遍历结果,显示所述大Key列表中Value大小前N的大Key对应的所述键值对。
在一种可能的实施方式中,处理模块702基于所述大Key列表,对Redis中存储的数据进行处理,包括:
响应于大Key查询请求,获取待查询的目标Key;
从所述大Key列表中查询与所述目标Key相匹配的键值对,若所述大Key列表中存在与所述目标Key相匹配的键值对,显示该键值对;
若所述大Key列表中不存在与所述目标Key相匹配的键值对,从Redis中查询所述目标Key。
上述基于Redis的大Key处理装置具有以下有益效果:
(1)采用的是实时进行大Key的登记操作,并且要求登记的时候正确设置有效期,所以其大Key列表中的信息具有良好的实时性。
(2)大Key的定义是大于特定阈值的键值对,而这个阈值可以根据业务需要或者经验值进行设定,从而可以更加灵活的去适应不同的业务场景。
(3)大Key的登记数据结构中保存的是Value的大小,而非原始Value值,在满足了后期分析使用的需要的同时,也避免了拷贝Value两次造成的额外系统负担(因为Value默认需要保存在特定的分片中,如果额外还需要保存在大Key列表,则相比默认实现来说,多了一次Value的拷贝)。
(4)支持各种基于实时大Key登记表的应用,包括但不限于降序排列大Key、筛选出Top N的大Key、优化槽迁移逻辑等。
如图8所示,图8为本申请实施例提供的电子设备800的组成结构示意图,所述电子设备800,包括:
处理器801、存储介质802和总线803,所述存储介质802存储有所述处理器801可执行的机器可读指令,当电子设备800运行时,所述处理器801与所述存储介质802之间通过总线803通信,所述处理器801执行所述机器可读指令,以执行本申请实施例所述的基于Redis的大Key处理方法的步骤。
实际应用时,所述电子设备800中的各个组件通过总线803耦合在一起。可理解,总线803用于实现这些组件之间的连接通信。总线803除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图8中将各种总线都标为总线803。
上述电子设备具有以下有益效果:
(1)采用的是实时进行大Key的登记操作,并且要求登记的时候正确设置有效期,所以其大Key列表中的信息具有良好的实时性。
(2)大Key的定义是大于特定阈值的键值对,而这个阈值可以根据业务需要或者经验值进行设定,从而可以更加灵活的去适应不同的业务场景。
(3)大Key的登记数据结构中保存的是Value的大小,而非原始Value值,在满足了后期分析使用的需要的同时,也避免了拷贝Value两次造成的额外系统负担(因为Value默认需要保存在特定的分片中,如果额外还需要保存在大Key列表,则相比默认实现来说,多了一次Value的拷贝)。
(4)支持各种基于实时大Key登记表的应用,包括但不限于降序排列大Key、筛选出Top N的大Key、优化槽迁移逻辑等。
本申请实施例还提供了一种计算机可读存储介质,所述存储介质存储有可执行指令,当所述可执行指令被至少一个处理器801执行时,实现本申请实施例所述的基于Redis的大Key处理方法。
在一些实施例中,存储介质可以是磁性随机存取存储器(FRAM,FerromagneticRandom Access Memory)、只读存储器(ROM,Read Only Memory)、可编程只读存储器(PROM,Programmable Read-Only Memory)、可擦除可编程只读存储器(EPROM,ErasableProgrammable Read-Only Memory)、电可擦除可编程只读存储器(EEPROM,ElectricallyErasable Programmable Read-Only Memory)、快闪存储器(Flash Memory)、磁表面存储器、光盘、或只读光盘(CD-ROM,Compact Disc Read-Only Memory)等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(HTML,HyperTextMarkupLanguage)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
上述计算机可读存储介质具有以下有益效果:
(1)采用的是实时进行大Key的登记操作,并且要求登记的时候正确设置有效期,所以其大Key列表中的信息具有良好的实时性。
(2)大Key的定义是大于特定阈值的键值对,而这个阈值可以根据业务需要或者经验值进行设定,从而可以更加灵活的去适应不同的业务场景。
(3)大Key的登记数据结构中保存的是Value的大小,而非原始Value值,在满足了后期分析使用的需要的同时,也避免了拷贝Value两次造成的额外系统负担(因为Value默认需要保存在特定的分片中,如果额外还需要保存在大Key列表,则相比默认实现来说,多了一次Value的拷贝)。
(4)支持各种基于实时大Key登记表的应用,包括但不限于降序排列大Key、筛选出Top N的大Key、优化槽迁移逻辑等。
在本申请所提供的几个实施例中,应该理解到,所揭露的方法和电子设备,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,平台服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (9)
1.一种基于Redis的大Key处理方法,其特征在于,所述方法包括:
在Redis运行时,响应于数据写入请求,对当前写入数据进行判断处理,当所述当前写入数据满足预设的大Key条件时,将所述当前写入数据的大Key写入预设的大Key列表中,同时将所述当前写入数据进行存储;
基于所述大Key列表,对Redis中存储的数据进行处理;
所述将所述当前写入数据的大Key写入预设的大Key列表中,包括:
将该大Key的Key作为写入的目标键,以及将该大Key的Value的大小作为写入的目标值构成键值对;
将所述键值对写入预设的所述大Key列表中。
2.根据权利要求1所述的方法,其特征在于,所述将所述当前写入数据的大Key写入预设的大Key列表中时,所述方法还包括:
针对被写入预设的所述大Key列表中的大Key,设置过期时间,其中,所述过期时间表示该大Key在所述大Key列表中的有效时间,将所述当前写入数据的大Key写入预设的大Key列表中与针对被写入预设的所述大Key列表中的大Key,设置过期时间为异步操作或同步操作。
3.根据权利要求1所述的方法,其特征在于,所述基于所述大Key列表,对Redis中存储的数据进行处理,包括:
对所述大Key列表中的大Key进行降/升序排列,其中,所述降/升序排列基于每个大Key的Value的大小;
对降/升序排列后的大Key进行监控,以及基于降/升序排列后的大Key进行优化调整处理。
4.根据权利要求1所述的方法,其特征在于,所述基于所述大Key列表,对Redis中存储的数据进行处理,包括:
响应于槽迁移请求,对于需要进行槽迁移请求的目标Key,判断所述目标Key是否存在于所述大Key列表,若所述目标Key存在于所述大Key列表,读取所述大Key列表中与所述目标Key对应的所述目标值,并将所述目标值保存在内存中;
基于所述目标值和磁盘性能,进行对应的槽迁移处理。
5.根据权利要求1所述的方法,其特征在于,所述基于所述大Key列表,对Redis中存储的数据进行处理,包括:
响应于大Key显示请求,对所述大Key列表中的大Key进行遍历处理,其中,所述大Key显示请求用于请求显示Redis中Value大小前N的大Key;
基于遍历结果,显示所述大Key列表中Value大小前N的大Key对应的所述键值对。
6.根据权利要求1所述的方法,其特征在于,所述基于所述大Key列表,对Redis中存储的数据进行处理,包括:
响应于大Key查询请求,获取待查询的目标Key;
从所述大Key列表中查询与所述目标Key相匹配的键值对,若所述大Key列表中存在与所述目标Key相匹配的键值对,显示该键值对;
若所述大Key列表中不存在与所述目标Key相匹配的键值对,从Redis中查询所述目标Key。
7.一种基于Redis的大Key处理装置,其特征在于,所述装置包括:
判断模块,用于在Redis运行时,响应于数据写入请求,对当前写入数据进行判断处理,当所述当前写入数据满足预设的大Key条件时,将所述当前写入数据的大Key写入预设的大Key列表中,同时将所述当前写入数据进行存储;所述将所述当前写入数据的大Key写入预设的大Key列表中,包括:将该大Key的Key作为写入的目标键,以及将该大Key的Value的大小作为写入的目标值构成键值对;将所述键值对写入预设的所述大Key列表中;
处理模块,用于基于所述大Key列表,对Redis中存储的数据进行处理。
8.一种电子设备,其特征在于,包括:处理器、存储介质和总线,所述存储介质存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储介质之间通过总线通信,所述处理器执行所述机器可读指令,以执行如权利要求1至6任一项所述的基于Redis的大Key处理方法。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如权利要求1至6任一项所述的基于Redis的大Key处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311288199.8A CN117033396B (zh) | 2023-10-08 | 2023-10-08 | 一种基于Redis的大Key处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311288199.8A CN117033396B (zh) | 2023-10-08 | 2023-10-08 | 一种基于Redis的大Key处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117033396A CN117033396A (zh) | 2023-11-10 |
CN117033396B true CN117033396B (zh) | 2024-01-19 |
Family
ID=88637701
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311288199.8A Active CN117033396B (zh) | 2023-10-08 | 2023-10-08 | 一种基于Redis的大Key处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117033396B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019165901A1 (zh) * | 2018-03-01 | 2019-09-06 | 阿里巴巴集团控股有限公司 | 数据合并方法、基于fpga的合并器及数据库系统 |
WO2020215558A1 (zh) * | 2019-04-26 | 2020-10-29 | 平安科技(深圳)有限公司 | 数据存储方法、数据查询方法、装置、设备及存储介质 |
CN113051319A (zh) * | 2021-04-29 | 2021-06-29 | 携程旅游网络技术(上海)有限公司 | 基于Redis的大key的检测方法、系统、设备及存储介质 |
CN113965582A (zh) * | 2020-07-20 | 2022-01-21 | 中移(苏州)软件技术有限公司 | 一种模式转换方法和系统,及存储介质 |
CN114546891A (zh) * | 2022-01-11 | 2022-05-27 | 百果园技术(新加坡)有限公司 | 一种缓存缩容方法、装置、设备及存储介质 |
CN114791925A (zh) * | 2021-01-26 | 2022-07-26 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、设备及计算机可读存储介质 |
CN115550441A (zh) * | 2022-06-23 | 2022-12-30 | 湖南快乐阳光互动娱乐传媒有限公司 | 一种缓存代理方法和装置 |
-
2023
- 2023-10-08 CN CN202311288199.8A patent/CN117033396B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019165901A1 (zh) * | 2018-03-01 | 2019-09-06 | 阿里巴巴集团控股有限公司 | 数据合并方法、基于fpga的合并器及数据库系统 |
WO2020215558A1 (zh) * | 2019-04-26 | 2020-10-29 | 平安科技(深圳)有限公司 | 数据存储方法、数据查询方法、装置、设备及存储介质 |
CN113965582A (zh) * | 2020-07-20 | 2022-01-21 | 中移(苏州)软件技术有限公司 | 一种模式转换方法和系统,及存储介质 |
CN114791925A (zh) * | 2021-01-26 | 2022-07-26 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、设备及计算机可读存储介质 |
CN113051319A (zh) * | 2021-04-29 | 2021-06-29 | 携程旅游网络技术(上海)有限公司 | 基于Redis的大key的检测方法、系统、设备及存储介质 |
CN114546891A (zh) * | 2022-01-11 | 2022-05-27 | 百果园技术(新加坡)有限公司 | 一种缓存缩容方法、装置、设备及存储介质 |
CN115550441A (zh) * | 2022-06-23 | 2022-12-30 | 湖南快乐阳光互动娱乐传媒有限公司 | 一种缓存代理方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN117033396A (zh) | 2023-11-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10268564B2 (en) | Dynamic tracing using ranking and rating | |
US20140379953A1 (en) | Continuous in-memory accumulation of hardware performance counter data | |
CN111338901A (zh) | 一种Redis监控方法、Redis监控装置及终端 | |
US20140068325A1 (en) | Test case result processing | |
CN103995500A (zh) | 控制器、信息处理装置及程序 | |
US9235478B2 (en) | Classifying and monitoring database operations based on a cost of recovery | |
CN109871368B (zh) | 数据库检测方法、装置、计算机装置及存储介质 | |
CN109344044A (zh) | 计算页面首屏渲染时间的方法和系统 | |
US8943565B2 (en) | Recovery of information from commercial web portals | |
EP4160421A1 (en) | Method and apparatus for obtaining browser running data, and storage medium | |
CN111176869A (zh) | 超时检测方法、装置、设备及存储介质 | |
CN117033396B (zh) | 一种基于Redis的大Key处理方法及装置 | |
US20130091333A1 (en) | Backup optimization | |
CN108897886A (zh) | 页面展示方法、计算设备及计算机存储介质 | |
CN108197041B (zh) | 一种确定子进程的父进程的方法、设备及其存储介质 | |
US11656974B2 (en) | Enhanced performance diagnosis in a network computing environment | |
JPWO2017026017A1 (ja) | 管理計算機および計算機システムの管理方法 | |
CN109361557B (zh) | 一种监测浏览器卡死的控制方法及控制装置 | |
US7437716B1 (en) | Separation of data from metadata in a tracing framework | |
CN111026612A (zh) | 应用程序运行监控方法及装置、存储介质、电子设备 | |
Zhu et al. | Automatic Testing Methods for Response Time of Information Systems | |
US20240256700A1 (en) | Mechanisms to predict system resource consumption of transactions | |
CN114826944A (zh) | 一种基于ELK和canal技术的网站运营分析系统及方法 | |
CN116453576A (zh) | 存储设备的功能测试方法、装置、计算机设备及介质 | |
CN118312344A (zh) | 任务耗时检测方法、介质、装置和计算设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |