CN109582460B - 一种Redis内存数据的淘汰方法和装置 - Google Patents
一种Redis内存数据的淘汰方法和装置 Download PDFInfo
- Publication number
- CN109582460B CN109582460B CN201710911281.XA CN201710911281A CN109582460B CN 109582460 B CN109582460 B CN 109582460B CN 201710911281 A CN201710911281 A CN 201710911281A CN 109582460 B CN109582460 B CN 109582460B
- Authority
- CN
- China
- Prior art keywords
- memory
- memory data
- preset
- maximum
- deleting
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
- G06F9/4831—Task transfer initiation or dispatching by interrupt, e.g. masked with variable priority
- G06F9/4837—Task transfer initiation or dispatching by interrupt, e.g. masked with variable priority time dependent
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- 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)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种Redis内存数据的淘汰方法和装置;所述Redis内存数据的淘汰方法,包括:Redis主线程收到用于增加内存数据的请求后,如果判断当前的内存使用量达到或超过预设的最大内存值,并且满足预设条件,则按照第一预设策略删除内存数据后,处理所述用于增加内存数据的请求;Redis主线程周期性处理用于淘汰内存数据的时间事件;所述用于淘汰内存数据的时间事件包括:在当前的内存使用量达到或超过最大内存值时,按照第二预设策略删除内存数据;其中,所述第一预设策略和第二预设策略是内存数据的淘汰策略。本申请至少一个实施例可以在不增加复杂度的情况下避免突发性延迟。
Description
技术领域
本发明涉及数据处理领域,尤其涉及一种Redis内存数据的淘汰方法和装置。
背景技术
Redis是一个开源的高性能的键值对(Key-Value)缓存数据库。Redis允许通过配置Redis实例的最大内存值server.maxmemory,来设置服务器的最大内存的大小;其中,Redis实例指的是一个Redis进程或者一个Redis服务的实体。
当Redis主线程收到一条会增加内存的命令时,将检查当前Redis所使用的内存量(后文称为当前的内存使用量)是否超过server.maxmeory。如果超过了,Redis会进行即时的内存淘汰过程,即:按照配置的内存数据的淘汰策略(即:优先删除哪部分数据的策略)挑选部分数据进行删除,直到当前的内存使用量小于server.maxmeory,然后再执行收到的命令。
一些情况下,如果当前的内存使用量超过server.maxmeory很多(比如有大Key存在的情况),内存淘汰过程执行的时间会比较长,导致Redis服务长时间不响应;或者内存淘汰过程中删除大Key也有可能导致Redis主线程被阻塞,长时间无法响应用户请求。
Redis 4.0采用后台线程非阻塞式删除:把删除超出最大内存值部分数据的过程放到后台线程执行;但是,多线程的引入会增加程序的复杂度,降低程序的稳定性。当后台线程处理的事情太多时,后台线程有可能繁忙到来不及删除指定的Key,会导致整个Redis服务内存积压,有可能超出最大内存很多。
发明内容
本申请提供一种Redis内存数据的淘汰方法和装置,在不增加复杂度的情况下避免突发性延迟。
本申请采用如下技术方案。
一种Redis内存数据的淘汰方法,包括:
Redis主线程收到用于增加内存数据的请求后,如果判断当前的内存使用量达到或超过预设的最大内存值,并且满足预设条件,则按照第一预设策略删除内存数据后,处理所述用于增加内存数据的请求;
Redis主线程周期性处理用于淘汰内存数据的时间事件;所述用于淘汰内存数据的时间事件包括:在当前的内存使用量达到或超过最大内存值时,按照第二预设策略删除内存数据;
其中,所述第一预设策略和第二预设策略是内存数据的淘汰策略。
其中,所述预设条件可以是指:
当前的内存使用量达到或超过所述最大内存值的N倍,N>1。
其中,可以2>N>1。
其中,所述按照第一预设策略删除内存数据后,处理用于增加内存数据的请求可以包括:
按照第一预设策略删除内存数据,直到内存使用量小于或等于最大内存值的N倍后,处理用于增加内存数据的请求。
其中,所述用于淘汰内存数据的时间事件还可以包括:
当到达本时间事件的处理时限,或内容使用量低于最大内存值时,停止删除内存数据。
其中,所述的淘汰方法还可以包括:
根据当前的内存使用量超出最大内存值的幅度,调整所述用于淘汰内存数据的时间事件的处理时限。
其中,所述的淘汰方法还可以包括:
根据Redis服务的硬件资源使用数据,调整所述用于淘汰内存数据的时间事件的处理频率。
一种Redis内存数据的淘汰装置,包括:处理器和存储器;
所述存储器用于保存用于进行内存数据淘汰的程序;所述用于进行内存数据淘汰的程序在被所述处理器读取执行时,进行如下操作:
收到用于增加内存数据的请求后,如果判断当前的内存使用量达到或超过预设的最大内存值,并且满足预设条件,则按照第一预设策略删除内存数据后,处理所述用于增加内存数据的请求;
周期性处理用于淘汰内存数据的时间事件;所述用于淘汰内存数据的时间事件包括:在当前的内存使用量达到或超过最大内存值时,按照第二预设策略删除内存数据;
其中,所述第一预设策略和第二预设策略是内存数据的淘汰策略。
其中,所述按照第一预设策略删除内存数据后,处理用于增加内存数据的请求可以包括:
按照第一预设策略删除内存数据,直到内存使用量小于或等于最大内存值的N倍后,处理用于增加内存数据的请求。
其中,所述存储器还用于保存用于进行调整的程序,所述用于进行调整的程序在被所述处理器读取执行时,可以进行如下操作中的一种或多种:
根据当前的内存使用量超出最大内存值的幅度,调整所述用于淘汰内存数据的时间事件的处理时限;
根据Redis服务的硬件资源使用数据,调整所述用于淘汰内存数据的时间事件的处理频率。
一种Redis内存数据的淘汰装置,包括:
第一处理模块,用于收到用于增加内存数据的请求后,如果判断当前的内存使用量达到或超过预设的最大内存值,并且满足预设条件,则按照第一预设策略删除内存数据后,处理所述用于增加内存数据的请求;
第二处理模块,用于周期性处理用于淘汰内存数据的时间事件;所述用于淘汰内存数据的时间事件包括:在当前的内存使用量达到或超过最大内存值时,按照第二预设策略删除内存数据;
其中,所述第一预设策略和第二预设策略是内存数据的淘汰策略。
本申请至少一个实施例中,通过即时淘汰和时间事件相互配合的方式,可以将至少部分Redis内存淘汰过程运行在后台任务中,避免内存淘汰产生的突发性延迟,降低内存淘汰对Redis服务响应时间的影响。
本申请实施例的一种实现方式中,可以根据***负载灵活调整后台内存淘汰力度,淘汰范围可灵活调整配置,实现渐进式内存淘汰。
当然,实施本申请的任一产品并不一定需要同时达到以上所述的所有优点。
附图说明
图1是实施例一的Redis内存数据的淘汰方法的流程图;
图2是实施例一的例子中,进行文件事件处理的流程图;
图3是实施例一的例子中,进行时间事件处理的流程图;
图4是实施例二的Redis内存数据的淘汰装置的示意图。
具体实施方式
下面将结合附图及实施例对本申请的技术方案进行更详细的说明。
需要说明的是,如果不冲突,本申请实施例以及实现方式中的不同特征可以相互结合,均在本申请的保护范围之内。另外,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在一种配置中,进行Redis内存数据淘汰的计算设备可包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存(memory)。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。内存可能包括一个或多个模块。
计算机可读介质包括永久性和非永久性、可移动和非可移动存储介质,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM),快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
实施例一、一种Redis内存数据的淘汰方法,如图1所示,包括S110~S120。
S110、Redis主线程收到用于增加内存数据的请求后,如果判断当前的内存使用量达到或超过预设的最大内存值,并且满足预设条件,则按照第一预设策略删除内存数据后,处理所述用于增加内存数据的请求;
S120、Redis主线程周期性处理用于淘汰内存数据的时间事件;所述用于淘汰内存数据的时间事件包括:在当前的内存使用量达到或超过最大内存值时,按照第二预设策略删除内存数据;
其中,所述第一预设策略和第二预设策略是内存数据的淘汰策略。
本实施例中,步骤S110、S120是各自独立,轮流执行的两个步骤;S110和S120之间并没有必然的先后顺序。
本实施例中,步骤S110可以看成是在特定情况(当前的内存使用量达到或超过最大内存值,并且满足预设条件)下对内存数据进行即时淘汰,步骤S120可以看成是通过时间事件在特定情况(当前的内存使用量达到或超过最大内存值)下淘汰内存数据。
本实施例中,通过即时淘汰和时间事件相互配合的方式,可以将至少部分Redis内存淘汰过程运行在后台任务中,如果内存使用量只是暂时超出最大内存值但未满足预设条件,则可以先用时间事件进行内存数据淘汰,从而可以避免内存淘汰产生的突发性延迟,降低内存淘汰对Redis服务响应时间的影响。另一方面,在内存使用量达到或超过最大内存值,并且满足预设条件时会进行即时淘汰,以避免单纯用时间事件无法及时淘汰内存数据的情况发生。
对比后台线程删除的方案,本实施例中采用时间事件来参与内存数据的删除,对于内存状况更加可控;而且本实施例无需增加后台线程,保持单线程模型也更有助于降低***复杂度,无需同步开销。
本实施例中,加入预设条件是为了尽量防止通过时间事件来不及淘汰内存数据的情况发生,比如当前的内存使用量超出最大内存值较多、或最近一段时间中内存使用量多次或一直超出最大内存值、或最近一段时间内写入的数据量比较大等情况下,可以先即时删除部分内存数据,再配合时间事件进行删除;如果不满足预设条件,即使当前的内存使用量达到或超过最大内存值,也可以认为只是偶然超过,可以先不进行即时淘汰,暂时只利用时间事件淘汰。
对比超出最大内存值就即时淘汰的方案,本实施例在突发情况下偶然实例内存使用量超过最大内存时,可以通过时间事件的形式在CPU空闲时淘汰掉超出部分的内存数据,避免对业务造成突发的大延迟,因此可以提高***响应速度的平滑度,降低突发状况下的请求延迟。
通常,Redis主线程会轮流处理文件事件和时间事件,其中,文件事件可以看成提供服务或处理业务,文件事件可以包括写事件和读事件,比如写事件可以是收到写入请求;时间事件可看成后台任务。
其中,时间事件可分为周期性的时间事件和定时的时间事件;定时的时间事件只需要在指定的时候处理一次,周期性的时间事件则需要每隔一段时间处理一次。
其中,时间事件可以包括一个或多个。可以为每个时间事件设置处理时限,比如200ms;即:对该时间事件只进行200ms的处理,然后就转为处理其它时间事件或文件事件。
本实施例中,用于淘汰内存数据的时间事件可以通过新增一个时间事件来建立:判断当前的内存使用量是否达到或超过最大内存值,如果达到或超过最大内存值,则按照第二预设策略删除内存数据。
本实施例中,用于淘汰内存数据的时间事件也可以通过在已有的定时删除过期Key的时间事件中,加入一个用于判断当前的内存使用量是否达到或超过最大内存值的判断语句来建立,并可以将淘汰内存数据的策略在删除过期Key的基础上增加其它策略。
通常,当到达处理时间事件的时刻,如果Redis主线程正在处理文件事件,则可以等待当前的文件事件处理完成(CPU空闲)后,处理已到达处理时刻的时间事件。比如,时间事件设置成每100毫秒(ms)处理一次,但轮到处理时间事件时,假如CPU繁忙,则等到CPU空闲时执行时间事件。
本实施例中,当Redis主线程要处理文件事件时,比如收到写入请求时,可以执行步骤S110;当Redis主线程要处理时间事件时,执行步骤S120。可以看出,步骤S110和S120会被Redis主线程轮流地执行;在Redis主线程运行期间,根据内存使用量的情况,步骤S110和S120可能不会执行,也可能会被执行一次或多次。
本实施例中,用于增加内存数据的请求可以但不限于是指写入请求。
本实施例中,最大内存值可以但不限于是指server.maxmemory的值。
本实施例中,最大内存值可以是以下任一种参数:
开始淘汰内存数据的阈值,即达到或超过最大内存值时认为需要开始淘汰内存数据(本实施例中,认为需要开始淘汰内存数据后,可以先在用于淘汰内存数据的时间事件中进行淘汰,达到预设条件后进行即时淘汰);
产品规格中定义的内存值;
为数据库实例分配的内存值。
考虑到内存使用量有可能在突发情况下临时增大,可以允许内存使用量暂时超过最大内存值,比如本实施例中,当内存使用量已超过最大内存值但尚未处理用于淘汰内存数据的时间事件时、或处理用于淘汰内存数据的时间事件后内存使用量仍超过最大内存值时,内存使用量都暂时高于最大内存值。
实际应用中,可以为暂时超过最大内存值的内存使用量也设置上限,比如一种实现方式中,假设产品规格为1G内存,最大内存使用量为1.5G;该情况下,最大内存值为1G,内存使用量达到或超过1G就要认为需要淘汰内存数据;而最大内存使用量是指,可以允许内存使用量暂时超过最大内存值(1G),但最多超过0.5G(比如内存使用量大于1.5G就要进行即时淘汰)。
本实施例中,当前的内存使用量可以是指Redis主线程所对应的Redis实例所使用的内存的大小;比如当Redis主线程开始处理文件事件时,内存使用量为900M;如果Redis主线程收到写入请求,当前的内存使用量还是900M;假设该写入请求写入了300M的数据。如果Redis主线程接着又收到一个写入请求时,当前的内存使用量就是900M+300M=1200M。
本实施例中,第一预设策略和第二预设策略可以相同,也可以不同。
第一预设策略和第二预设策略是内存数据的淘汰策略,可以是指第一预设策略和第二预设策略给出了删除内存数据的准则,比如按照何种顺序删除内存数据、按照何种优先级删除内存数据、根据什么条件挑选要删除的内存数据等。
一种实现方式中,第一预设策略或第二预设策略可以采用以下策略中任意一种或多种:
随机删除Key;
只删除设置了过期时间的Key;
按照Key的过期时间从近到远进行删除,即:优先删除已经过期的Key,然后删除即将过期的Key,越早过期的越先删除,比如还有24小时过期的Key1,和还有30小时过期的Key2,先删除Key1;
按照Key的优先级从小到大进行删除;
按照Key的访问频率从小到大进行删除;
按照Key的最后一次访问时间从远到近进行删除。
一种实现方式中,所述预设条件可以是指:
当前的内存使用量达到或超过最大内存值的N倍,N>1;即:当前的内存使用量达到或超过(100+X)%的最大内存值。其中X%最大内存值可以看成是额外提供给用户的内存大小,供内存使用量突发性变大时使用。
其中,可以是2>N>1。
本实现方式中,N可以但不限于等于1.5。
本实现方式中,N可以根据业务情况、需求或实验结果等灵活的进行自动调整或手动调整,可以通过配置项设置和调整N。
本实现方式可以称为渐进式内存淘汰,可以根据当前的内存使用情况,选择是否进行即时内存淘汰,或只进行定时内存淘汰(当内存使用量达到或超过最大内存值,但未超过最大内存值的N倍时,相当于是只进行定时内存淘汰)。
本实现方式中,按照第一预设策略删除内存数据后,处理用于增加内存数据的请求可以包括:
按照第一预设策略删除内存数据,直到内存使用量小于或等于最大内存值的N倍后,处理用于增加内存数据的请求。
其它实现方式中,预设条件可以是其它条件,或包括其它条件;比如可以包括以下一个或多个:
最近一段时间内,内存使用量超出最大内存值的次数超过预定次数;
最近一段时间内,内存使用量始终超出最大内存值;
最近一段时间内,写入的数据量超过预定的数据量门限;
最近一段时间内,时间事件中删除的数据量低于预定的删除量门限等。
相应地,在这些其它实现方式中,按照第一预设策略删除内存数据后,处理用于增加内存数据的请求可以包括:
按照第一预设策略删除预定数量的内存数据后,处理用于增加内存数据的请求。
其它实现方式中,按照第一预设策略删除内存数据后,处理用于增加内存数据的请求也可以包括:按照第一预设策略删除内存数据直到内存使用量不满足预设条件时,处理用于增加内存数据的请求。
一种实现方式中,用于淘汰内存数据的时间事件的处理频率、处理时限都可以通过配置项灵活调整,在实际场景中可以根据业务情况进行自动调整或手动调整。
本实现方式中,相当于可以调整淘汰内存的力度。
其它实现方式中,还可以根据业务情况自动或手动调整淘汰内存数据的策略、淘汰Key的范围等。
一种实现方式中,用于淘汰内存数据的时间事件还可以包括:
当到达本时间事件的处理时限,或内容使用量低于最大内存值时,停止删除内存数据。
本实现方式中,淘汰方法还可以包括:
根据当前的内存使用量超出最大内存值的幅度,调整所述用于淘汰内存数据的时间事件的处理时限。
本实现方式中,可以是内存使用量超出最大内存值的幅度越大,就将用于淘汰内存数据的时间事件的处理时限调整到越大。
本实现方式中,可以预设内存使用量超出最大内存值的幅度,和用于淘汰内存数据的时间事件的处理时限之间的对应关系,按照该对应关系来调整处理时限;比如超出1%时,处理实现为10ms,超出20%时,处理时限为200ms。可以按照业务情况、需求或实验等来确定该对应关系。
本实现方式中,也可以根据内存使用量超出最大内存值的幅度的变化,来调整处理时限,比如幅度从10%变成20%,则处理时限增加一定比例或一定长度。
本实现方式中,可以为用于淘汰内存数据的时间事件的处理时限设置上限和下限,调整时不得超过该上限和下限。
一种实现方式中,淘汰方法还可以包括:
根据Redis服务的硬件资源使用数据,调整所述用于淘汰内存数据的时间事件的处理频率。
本实现方式中,硬件资源可以包括CPU、内存、磁盘等。使用数据可以但不限于包括使用率等。
本实现方式中,可以是硬件资源的使用率越大,就将用于淘汰内存数据的时间事件的处理频率调整到越低。比如硬件资源中的一个或多个的使用率超出使用阈值,就降低用于淘汰内存数据的时间事件的处理频率。
本实现方式中,可以预设硬件资源使用数据,和用于淘汰内存数据的时间事件的处理频率之间的对应关系,按照该对应关系来调整处理频率;可以按照业务情况、需求或实验等来确定该对应关系。其中,硬件资源使用数据可以是将一个或多个硬件资源的使用数据,按照预定方式(比如但不限于加权求和的方式)计算成一个量化值,用该量化值和处理频率进行对应。
本实现方式中,也可以根据硬件资源使用数据的变化,来调整处理频率,比如使用率降低了20%,则处理频率每秒增加一次。
本实现方式中,可以为用于淘汰内存数据的时间事件的处理频率设置上限和下限,调整时不得超过该上限和下限。一种实现方式中,步骤S110中,如果当前的内存使用量没有超过最大内存值则可以直接处理用于增加内存数据的请求;如果当前的内存使用量达到或超过最大内存值,但不满足预设条件,则也可以直接处理用于增加内存数据的请求。
一种实现方式中,步骤S120中,时间事件还可以包括:如果当前的内存使用量没有达到最大内存值,则不对内存数据进行删除。
下面用一个例子说明本实施例。
本例子中,增加内存数据的请求包括写入请求;预定条件是当前的内存使用量达到或超过(100+X)%的最大内存值。
本例子中,Redis主线程处理文件事件的过程如图2所示,包括步骤201~205:
201、Redis主线程当收到新的写入请求时,执行步骤202;
202、Redis主线程判断当前的内存使用量有没有超出配置的Redis实例的最大内存值server.maxmemory;如果没有超出,则执行步骤203;如果超出了则进行步骤204;
203、Redis主线程执行上述新的写入请求;
204、Redis主线程判断当前的内存使用量有没有超过server.maxmeory×(100+X)%,其中X%是额外提供给用户的缓冲区内存大小阈值;如果超出,则执行步骤205;如果没超出则执行步骤203;
205、Redis主线程按照第一预设策略即时淘汰Key,直到当前的内存使用量不超过server.maxmeory×(100+X)%,然后执行步骤203。
其中,X的大小可以根据情况自行设置和调整,本例子中可以设置为50。
本例子中,Redis主线程处理时间事件的过程如图3所示,包括周期性进行步骤301~302:
301、判断当前的内存使用量有没有超出配置的Redis实例的最大内存值server.maxmemory;如果超出则进行步骤302;如果没超出则结束;
302、按照第二预设策略淘汰Key(即删除Key),直至到达本次时间事件的处理时限,或内容使用量不再超过最大内存值server.maxmemory时结束。
其中,在Redis主线程运行期间,图2和图3所示的两个流程是轮流执行的。
其中,除了步骤301~302对应的时间事件以外,Redis主线程还可以处理其它的时间事件。
其中,单次时间事件中淘汰Key的时长(即步骤301~302对应的时间事件的处理时限)和淘汰时选择Key的范围可以根据当前的内存使用量超出server.maxmeory的幅度进行调整;比如当前的内存使用量超出server.maxmeory较多时,比如超出server.maxmeory50%,可以延长处理时限,增大淘汰时选择Key的范围;超出较少时,比如超出server.maxmeory 5%,可以缩短处理时限,缩小淘汰时选择Key的范围。
其中,还可以根据***负载(包含CPU,磁盘,内存)等情况灵活调整时间事件的执行频率,比如CPU使用率较低时,可以增大时间事件的执行频率;CPU使用率较高时,可以减少时间事件的执行频率。
实施例二、一种Redis内存数据的淘汰装置,包括:处理器和存储器;
所述存储器用于保存用于进行内存数据淘汰的程序;所述用于进行内存数据淘汰的程序在被所述处理器读取执行时,进行如下操作:
收到用于增加内存数据的请求后,如果判断当前的内存使用量达到或超过预设的最大内存值,并且满足预设条件,则按照第一预设策略删除内存数据后,处理所述用于增加内存数据的请求;
周期性处理用于淘汰内存数据的时间事件;所述用于淘汰内存数据的时间事件包括:在当前的内存使用量达到或超过最大内存值时,按照第二预设策略删除内存数据;
其中,所述第一预设策略和第二预设策略是内存数据的淘汰策略。
本实施例中,用于进行内存数据淘汰的程序被读取执行时,可以是Redis主线程的一部分。
一种实现方式中,所述预设条件可以是指:
当前的内存使用量达到或超过所述最大内存值的N倍,N>1。
本实现方式中,可以但不限于有:2>N>1。
本实现方式中,所述按照第一预设策略删除内存数据后,处理用于增加内存数据的请求可以包括:
按照第一预设策略删除内存数据,直到内存使用量小于或等于最大内存值的N倍后,处理用于增加内存数据的请求。
一种实现方式中,所述用于淘汰内存数据的时间事件还可以包括:
当到达本时间事件的处理时限,或内容使用量低于最大内存值时,停止删除内存数据。
一种实现方式中,所述存储器还可以用于保存用于进行调整的程序,所述用于进行调整的程序在被所述处理器读取执行时,可以进行如下操作:
根据当前的内存使用量超出最大内存值的幅度,调整所述用于淘汰内存数据的时间事件的处理时限。
本实现方式中,用于进行调整的程序被读取执行时,可以是Redis主线程的一部分,也可以是Redis进程中另外的线程,还可以是另外的进程。
一种实现方式中,所述存储器还可以用于保存用于进行调整的程序,所述用于进行调整的程序在被所述处理器读取执行时,可以进行如下操作:
根据Redis服务的硬件资源使用数据,调整所述用于淘汰内存数据的时间事件的处理频率。
本实施例中,用于进行内存数据淘汰的程序在被读取执行时,所进行的操作可以对应于实施例一的S110、S120,用于进行内存数据淘汰的程序在被读取执行时,所进行操作的其它实现细节可以参考实施例一;用于进行调整的程序在被读取执行时所进行操作的其它实现细节可以参考实施例一中相应的实现方式。
实施例三,一种Redis内存数据的淘汰装置,如图4所示,包括:
第一处理模块41,用于收到用于增加内存数据的请求后,如果判断当前的内存使用量达到或超过预设的最大内存值,并且满足预设条件,则按照第一预设策略删除内存数据后,处理所述用于增加内存数据的请求;
第二处理模块42,用于周期性处理用于淘汰内存数据的时间事件;所述用于淘汰内存数据的时间事件包括:在当前的内存使用量达到或超过最大内存值时,按照第二预设策略删除内存数据;
其中,所述第一预设策略和第二预设策略是内存数据的淘汰策略。
一种实现方式中,所述预设条件可以是指:
当前的内存使用量达到或超过所述最大内存值的N倍,N>1。
本实现方式中,可以但不限于有:2>N>1。
本实现方式中,所述第一处理模块按照第一预设策略删除内存数据后,处理用于增加内存数据的请求可以包括:
所述文件事件处理模块按照第一预设策略删除内存数据,直到内存使用量小于或等于最大内存值的N倍后,处理用于增加内存数据的请求。
一种实现方式中,所述用于淘汰内存数据的时间事件还可以包括:
当到达本时间事件的处理时限,或内容使用量低于最大内存值时,停止删除内存数据。
一种实现方式中,所述的淘汰装置还可以包括:
调整模块,用于根据当前的内存使用量超出最大内存值的幅度,调整所述用于淘汰内存数据的时间事件的处理时限。
一种实现方式中,所述的淘汰装置还可以包括:
调整模块,用于根据Redis服务的硬件资源使用数据,调整所述用于淘汰内存数据的时间事件的处理频率。
本实施例中,第一处理模块、第二处理模块所进行的操作可以分别对应于实施例一的S110、S120,第一处理模块、第二处理模块的其它实现细节可以参考实施例一;调整模块的其它实现细节可以参考实施例一中相应的实现方式。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本申请不限制于任何特定形式的硬件和软件的结合。
当然,本申请还可有其他多种实施例,在不背离本申请精神及其实质的情况下,熟悉本领域的技术人员当可根据本申请作出各种相应的改变和变形,但这些相应的改变和变形都应属于本申请的权利要求的保护范围。
Claims (9)
1.一种Redis内存数据的淘汰方法,包括:
Redis主线程收到用于增加内存数据的请求后,如果判断当前的内存使用量达到或超过预设的最大内存值,并且满足预设条件,则按照第一预设策略删除内存数据后,处理所述用于增加内存数据的请求;所述预设条件是指:当前的内存使用量达到或超过所述最大内存值的N倍,2>N>1;
Redis主线程周期性处理用于淘汰内存数据的时间事件;所述用于淘汰内存数据的时间事件包括:在当前的内存使用量达到或超过最大内存值时,按照第二预设策略删除内存数据;所述用于淘汰内存数据的时间事件通过新增时间事件来建立,或通过在定时删除过期Key的时间事件中,加入一个用于判断当前的内存使用量是否达到或超过最大内存值的判断语句来建立;
其中,所述第一预设策略和第二预设策略是内存数据的淘汰策略。
2.如权利要求1所述的淘汰方法,其特征在于,所述按照第一预设策略删除内存数据后,处理用于增加内存数据的请求包括:
按照第一预设策略删除内存数据,直到内存使用量小于或等于最大内存值的N倍后,处理用于增加内存数据的请求。
3.如权利要求1所述的淘汰方法,其特征在于,所述用于淘汰内存数据的时间事件还包括:
当到达本时间事件的处理时限,或内容使用量低于最大内存值时,停止删除内存数据。
4.如权利要求3所述的淘汰方法,其特征在于,还包括:
根据当前的内存使用量超出最大内存值的幅度,调整所述用于淘汰内存数据的时间事件的处理时限。
5.如权利要求1所述的淘汰方法,其特征在于,还包括:
根据Redis服务的硬件资源使用数据,调整所述用于淘汰内存数据的时间事件的处理频率。
6.一种Redis内存数据的淘汰装置,包括:处理器和存储器;
其特征在于:
所述存储器用于保存用于进行内存数据淘汰的程序;所述用于进行内存数据淘汰的程序在被所述处理器读取执行时,进行如下操作:
收到用于增加内存数据的请求后,如果判断当前的内存使用量达到或超过预设的最大内存值,并且满足预设条件,则按照第一预设策略删除内存数据后,处理所述用于增加内存数据的请求;所述预设条件是指:当前的内存使用量达到或超过所述最大内存值的N倍,2>N>1;
周期性处理用于淘汰内存数据的时间事件;所述用于淘汰内存数据的时间事件包括:在当前的内存使用量达到或超过最大内存值时,按照第二预设策略删除内存数据;所述用于淘汰内存数据的时间事件通过新增时间事件来建立,或通过在定时删除过期Key的时间事件中,加入一个用于判断当前的内存使用量是否达到或超过最大内存值的判断语句来建立;
其中,所述第一预设策略和第二预设策略是内存数据的淘汰策略。
7.如权利要求6所述的淘汰装置,其特征在于,所述按照第一预设策略删除内存数据后,处理用于增加内存数据的请求包括:
按照第一预设策略删除内存数据,直到内存使用量小于或等于最大内存值的N倍后,处理用于增加内存数据的请求。
8.如权利要求6所述的淘汰装置,其特征在于,所述存储器还用于保存用于进行调整的程序,所述用于进行调整的程序在被所述处理器读取执行时,进行如下操作中的一种或多种:
根据当前的内存使用量超出最大内存值的幅度,调整所述用于淘汰内存数据的时间事件的处理时限;
根据Redis服务的硬件资源使用数据,调整所述用于淘汰内存数据的时间事件的处理频率。
9.一种Redis内存数据的淘汰装置,其特征在于,包括:
第一处理模块,用于收到用于增加内存数据的请求后,如果判断当前的内存使用量达到或超过预设的最大内存值,并且满足预设条件,则按照第一预设策略删除内存数据后,处理所述用于增加内存数据的请求;所述预设条件是指:当前的内存使用量达到或超过所述最大内存值的N倍,2>N>1;
第二处理模块,用于周期性处理用于淘汰内存数据的时间事件;所述用于淘汰内存数据的时间事件包括:在当前的内存使用量达到或超过最大内存值时,按照第二预设策略删除内存数据;所述用于淘汰内存数据的时间事件通过新增时间事件来建立,或通过在定时删除过期Key的时间事件中,加入一个用于判断当前的内存使用量是否达到或超过最大内存值的判断语句来建立;
其中,所述第一预设策略和第二预设策略是内存数据的淘汰策略。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710911281.XA CN109582460B (zh) | 2017-09-29 | 2017-09-29 | 一种Redis内存数据的淘汰方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710911281.XA CN109582460B (zh) | 2017-09-29 | 2017-09-29 | 一种Redis内存数据的淘汰方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109582460A CN109582460A (zh) | 2019-04-05 |
CN109582460B true CN109582460B (zh) | 2023-03-21 |
Family
ID=65919045
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710911281.XA Active CN109582460B (zh) | 2017-09-29 | 2017-09-29 | 一种Redis内存数据的淘汰方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109582460B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110502327A (zh) * | 2019-08-28 | 2019-11-26 | 四川长虹电器股份有限公司 | 基于Redis高并发延时任务处理的方法 |
CN112347134B (zh) * | 2020-11-05 | 2023-05-30 | 平安科技(深圳)有限公司 | Redis缓存管理的方法、装置、计算机设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1558691A (zh) * | 2004-01-14 | 2004-12-29 | 中兴通讯股份有限公司 | 对移动通信设备中内存数据库定时监控的方法 |
CN102479249A (zh) * | 2010-11-26 | 2012-05-30 | 中国科学院声学研究所 | 一种嵌入式浏览器内存缓存数据的淘汰方法 |
CN106897141A (zh) * | 2015-12-21 | 2017-06-27 | 北京奇虎科技有限公司 | 信息的处理方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8032719B2 (en) * | 2005-04-14 | 2011-10-04 | Tektronix International Sales Gmbh | Method and apparatus for improved memory management in data analysis |
US8566521B2 (en) * | 2010-09-01 | 2013-10-22 | International Business Machines Corporation | Implementing cache offloading |
-
2017
- 2017-09-29 CN CN201710911281.XA patent/CN109582460B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1558691A (zh) * | 2004-01-14 | 2004-12-29 | 中兴通讯股份有限公司 | 对移动通信设备中内存数据库定时监控的方法 |
CN102479249A (zh) * | 2010-11-26 | 2012-05-30 | 中国科学院声学研究所 | 一种嵌入式浏览器内存缓存数据的淘汰方法 |
CN106897141A (zh) * | 2015-12-21 | 2017-06-27 | 北京奇虎科技有限公司 | 信息的处理方法及装置 |
Non-Patent Citations (1)
Title |
---|
Redis的过期淘汰策略;壹页书;《blog.itpub.net/29254281/viewspace-2106910/》;20160525;1-2页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109582460A (zh) | 2019-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10185592B2 (en) | Network storage device using dynamic weights based on resource utilization | |
CN110058786B (zh) | 用于控制存储***中的写请求的方法、装置和计算机程序产品 | |
US8818989B2 (en) | Memory usage query governor | |
CN111522636A (zh) | 应用容器的调整方法、调整***、计算机可读介质及终端设备 | |
US10884667B2 (en) | Storage controller and IO request processing method | |
US10089266B2 (en) | Power saving feature for storage subsystems | |
WO2012103231A1 (en) | Computing platform with resource constraint negotiation | |
US8583608B2 (en) | Maximum allowable runtime query governor | |
CN111753065A (zh) | 请求响应方法、***、计算机***和可读存储介质 | |
US11936568B2 (en) | Stream allocation using stream credits | |
CN105824691B (zh) | 动态调节线程的方法及装置 | |
US9135064B2 (en) | Fine grained adaptive throttling of background processes | |
CN109582460B (zh) | 一种Redis内存数据的淘汰方法和装置 | |
CN110781244A (zh) | 用于对数据库的并发操作进行控制的方法及装置 | |
US9996470B2 (en) | Workload management in a global recycle queue infrastructure | |
CN109726007B (zh) | 一种容器编排配额管理方法和装置、及容器编排*** | |
CN113687781A (zh) | 一种热数据的上拉方法、装置、设备及介质 | |
US10733023B1 (en) | Oversubscription scheduling | |
CN110413206B (zh) | 存储***中的操作控制方法、设备和计算机程序产品 | |
US11005776B2 (en) | Resource allocation using restore credits | |
US11500799B2 (en) | Managing access to a CPU on behalf of a block application and a non-block application | |
CN112363812A (zh) | 基于任务分类的数据库连接队列管理方法及存储介质 | |
US11765099B2 (en) | Resource allocation using distributed segment processing credits | |
CN106484314B (zh) | 一种缓存数据控制方法及装置 | |
CN111176848B (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 |