redis缓存清理方法、服务器及计算机可读存储介质与流程

文档序号:14940818发布日期:2018-07-13 20:42阅读:478来源:国知局

本发明涉及移动终端技术领域,尤其涉及一种redis缓存清理方法、服务器及计算机可读存储介质。



背景技术:

为了提高服务器的并发量以及吞吐量,服务器架构中都会用到缓存技术,其中redis缓存是一个开源的使用ansic语言编写、支持网络、可基于内存亦可持久化的日志型、key-value数据库,该缓存技术由于其良好的性能,在服务器行业中用得最广泛。随着用户量的上升,缓存也会从单点过度到集群的方式,以增大缓存的空间。随着时间的推移,特别是服务器功能越来越多,redis缓存中会存在大量的无效数据,为了提高redis空间的利用率,保证服务器的正常运行,一种清空redis无效key的技术就显得越来越重要。

传统的清空缓存的方式是通过设置key的有效时间,当到达有效时间时,redis可以自动清空;还有一种就是知道某个key,然后人工主动进行删除。这些方式对于redis中有海量的key并且没有设置有效时间时,就无法自动判别并进行删除;而且传统的清空方式是直接delete掉key,这种方式对于key的value不是很大的情况下是不错的选择,但是当key是个hash结构或者其他集合的结构,并且这些集合中有大量的数据(超过5百万)时,则直接delete这些大key会使redis阻塞,从而导致redis故障切换或者redis挂掉,使得整个服务器都不可用。同时,传统的查询key的方式使用keys命令或者smembers命令来查询key,这种方式一样也导致redis阻塞,影响服务器正常运行。同时在以往的redis缓存中,我们一般只能看到redis总的内存使用情况,还没有一种能够简单地列出redis中占用的内存非常多的某些key,不方便我们清空无用的key。

因此,有必要提供一种redis缓存清理方法、服务器及计算机可读存储介质来解决上述技术问题。



技术实现要素:

本发明的主要目的在于提出一种redis缓存清理方法、服务器及计算机可读存储介质,旨在解决对redis缓存进行清理时,容易造成服务器堵塞,且无法只清除占用内存较大的key的技术问题。

首先,为实现上述目的,本发明提供一种redis缓存清理方法,应用于服务器,所述redis缓存清理方法包括以下步骤:

通过scan命令迭代扫描redis缓存中存储的key;

判断各个key的数据类型,其中key的数据类型包括string类型和非string类型;

对于string类型的key,获取所述key中占用内存较大的key并提供给用户以供用户选择性的清理;

对于非string类型的key,通过与所述非string类型对应的扫描命令对所述key进行迭代扫描以得到所述key中包括的子key,获取各个子key中占用内存较大的子key并提供给用户以供用户选择性的清理。

可选地,所述通过与所述非string类型对应的扫描命令对所述key进行迭代扫描以得到所述key中包括的子key的步骤之后还包括:

判断各所述子key的value是否为空;

若判断结果为是,则直接删除所述子key;

若判断结果为否,则执行所述获取各个子key中占用内存较大的子key并提供给用户的步骤。

可选地,所述对于string类型的key,获取所述key中占用内存较大的key并提供给用户以供用户选择性的清理的步骤具体包括:

对于string类型的key,获取所述key的value所占的内存;

判断所述value所占的内存是否大于预设内存阈值;

若判断结果为是,则判定所述key为占用内存较大的key,并将所述key提供给用户以供用户选择性的清理。

可选地,所述获取各个子key中占用内存较大的子key并提供给用户以供用户选择性的清理的步骤之后还包括:

接收用户对string类型的所述key和/或所述子key的选择操作并将用户选中的key和/或子key从所述redis缓存中删除以释放相应的内存空间。

可选地,所述非string类型包括hash类型、list类型、set类型以及zset类型。

同时,本发明还提供一种服务器,所述服务器包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的redis缓存清理程序,所述redis缓存清理程序被所述处理器执行时实现以下步骤:

通过scan命令迭代扫描redis缓存中存储的key;

判断各个key的数据类型,其中key的数据类型包括string类型和非string类型;

对于string类型的key,获取所述key中占用内存较大的key并提供给用户以供用户选择性的清理;

对于非string类型的key,通过与所述非string类型对应的扫描命令对所述key进行迭代扫描以得到所述key中包括的子key,获取各个子key中占用内存较大的子key并提供给用户以供用户选择性的清理。

可选地,所述通过与所述非string类型对应的扫描命令对所述key进行迭代扫描以得到所述key中包括的子key的步骤之后,所述处理器还用于执行所述redis缓存清理程序,以实现如下步骤:

判断各所述子key的value是否为空;

若判断结果为是,则直接删除所述子key;

若判断结果为否,则执行所述获取各个子key中占用内存较大的子key并提供给用户的步骤。

可选地,所述处理器还用于执行所述redis缓存清理程序,以实现如下步骤:

对于string类型的key,获取所述key的value所占的内存;

判断所述value所占的内存是否大于预设内存阈值;

若判断结果为是,则判定所述key为占用内存较大的key,并将所述key提供给用户以供用户选择性的清理。

可选地,所述获取各个子key中占用内存较大的子key并提供给用户以供用户选择性的清理的步骤之后,所述处理器还用于执行所述redis缓存清理程序,以实现如下步骤:

接收用户对string类型的所述key和/或所述子key的选择操作并将用户选中的key和/或子key从所述redis缓存中删除以释放相应的内存空间。

此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有redis缓存清理程序,所述redis缓存清理程序被执行时实现如上所述redis缓存清理方法的步骤。

相较于现有技术,本发明所提出的redis缓存清理方法、服务器及计算机可读存储介质,首先通过scan命令迭代扫描redis缓存中存储的key,之后判断各个key的数据类型,对于string类型的key,获取所述key中占用内存较大的key并提供给用户,对于非string类型的key,通过与所述非string类型对应的扫描命令对所述key进行迭代扫描以得到所述key中包括的子key,获取各个子key中占用内存较大的子key并提供给用户,由于迭代扫描可以实现一次只对redis缓存中的部分数据进行扫描输出,其避免了redis缓存中数据量较大时容易堵塞的问题;同时本发明将占用内存较大的key和子key提供给用户,由此用户可以知道哪些key和子key需要进行清理;此外,对于非string类型的key,其通常占用内存较大,本发明不是对其直接进行删除操作,而是对其进行进一步迭代扫描得到其包含的子key,并对子key进行选择删除,其也可以避免直接删除非string类型的key时容易造成服务器堵塞的问题。

附图说明

图1为本发明redis缓存清理方法第一实施例的实施流程示意图;

图2为本发明redis缓存清理方法第二实施例的实施流程示意图;

图3为本发明redis缓存清理程序第一实施例的功能模块示意图;

图4为本发明redis缓存清理程序第二实施例的功能模块示意图;

图5为提供占用内存较大的key和子key给用户进行清理的界面一实施例的示意图。

附图标记:

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

在后续的描述中,使用用于表示元件的诸如“模块”、“部件”或“单元”的后缀仅为了有利于本发明的说明,其本身没有特定的意义。因此,“模块”、“部件”或“单元”可以混合地使用。

web(worldwideweb,也称www或万维网)是internet上集文本、声音、动画、视频等多种媒体信息于一身的信息服务系统,它起源于1989年3月,由欧洲量子物理实验室cern(theeuropeanlaboratoryforparticlephysics)所发展出来的主从结构分布式超媒体系统。通过万维网,人们只要通过使用简单的方法,就可以很迅速方便地取得丰富的信息资料,由于用户在通过web浏览器访问信息资源的过程中,无需再关心一些技术性的细节,而且界面非常友好,因而web在internet上一推出就受到了热烈的欢迎,走红全球,并迅速得到了爆炸性的发展。通常,整个web系统由web服务器(或web容器)、浏览器(browser)及通信协议等3部分组成,当web浏览器(客户端)连接到web服务器上并请求文件时,web服务器将处理该请求并将文件反馈到该浏览器上,附带的信息会告诉浏览器如何查看该文件。

为了提高服务器的并发量以及吞吐量,服务器架构中都会用到缓存技术,其中redis缓存是一个开源的使用ansic语言编写、支持网络、可基于内存亦可持久化的日志型、key-value数据库,该缓存技术由于其良好的性能,在服务器行业中用得最广泛。随着用户量的上升,缓存也会从单点过度到集群的方式,以增大缓存的空间。随着时间的推移,特别是服务器功能越来越多,redis缓存中会存在大量的无效数据,为了提高redis空间的利用率,保证服务器的正常运行,一种清空redis无效key的技术就显得越来越重要。本发明即用于提供一种redis缓存清理方法、服务器及计算机可读存储介质。

首先,本发明提出一种redis缓存清理方法,该redis缓存清理方法应用于上述服务器。如图1所示,是本发明redis缓存清理方法第一实施例的实施流程图。在本实施例中,根据不同的需求,图1所示的流程图中的步骤的执行顺序可以改变,某些步骤可以省略。所述redis缓存清理方法包括:

步骤s301,通过scan命令迭代扫描redis缓存中存储的key。

其中,scan命令是一个基于游标的迭代器(cursorbasediterator),scan命令每次被调用之后,都会向用户返回一个新的游标,用户在下次迭代时需要使用这个新游标作为scan命令的游标参数,以此来延续之前的迭代过程。当scan命令的游标参数被设置为0时,服务器将开始一次新的迭代,而当服务器向用户返回值为0的游标时,表示迭代已结束。通过scan命令对redis缓存进行迭代扫描,可以实现每次对redis缓存中的部分数据进行扫描,相比现有技术中传统的查询key的方式(如使用keys命令或者smembers命令来查询key)需要对缓存中所有数据进行扫描,本发明能够有效缓解redis缓存阻塞的问题,能够保证服务器的正常运行。

步骤s302,判断各个key的数据类型,其中key的数据类型包括string类型和非string类型,对于string类型的key,执行步骤s303,对于非string类型的key,执行步骤s304。

其中,redis缓存支持五种数据类型:string(字符串)、hash(哈希)、list(列表)、set(集合)以及zset(sortedset:有序集合),本实施例中所述的非string类型即包括hash类型、list类型、set类型以及zset类型。其中,string类型是redis最基本的数据类型,其满足一个key对应一个value,它能够存储任何类型的字符串,包含二进制数据,如可以用于存储邮箱、json化的对象、甚至是一张图片,一个字符串允许存储的最大容量为512mb。而string(字符串)是其他四种数据类型的基础,其他几种数据类型的区别从本质上来说只是组织字符串的方式不同。具体的,hash是一个键值(key=>value)对集合,即是一个string类型的field和value的映射表,通常每个hash可以存储(232-1)个键值对;list是简单的字符串列表,按照插入顺序排序,其最多可存储(232-1)个元素;set是string类型的无序集合,集合是通过哈希表实现的,通常该无序集合中最大的成员数为(232-1);zset和set一样也是string类型元素的集合,且不允许重复的成员。

步骤s303,对于string类型的key,获取所述key中占用内存较大的key并提供给用户以供用户选择性的清理。

通过scan命令对redis缓存进行迭代扫描时,对于当前扫描结果中的string类型的key,直接获取所述key中占用内存较大的若干key并提供给用户,从而用户可以直观的知道哪些key所占用的空间大,并据此对key进行删除。

步骤s304,对于非string类型的key,通过与所述非string类型对应的扫描命令对所述key进行迭代扫描以得到所述key中包括的子key,获取各个子key中占用内存较大的子key并提供给用户。

通过scan命令对redis缓存进行迭代扫描时,对于当前扫描结果中的非string类型的key,需要通过与所述非string类型对应的扫描命令对其进行迭代扫描以得到所述非string类型的key中包括的子key。如:对于hash类型的key,需要通过hscan命令对该key继续进行迭代扫描,其扫描结果为一系列的string类型的key,本实施例中为了将其与通过scan命令扫描得到的string类型的key进行区分,将其记为子key;再如,对于set类型的key,用sscan命令对该key迭代扫描,其扫描结果也是一系列的string类型的key(记为子key);同理,对于list或zset类型的key,也可以通过其对应的扫描命令进行解析而得到一系列的string类型的子key。需要说明的是,此处对非string类型的key进行迭代扫描与通过scan命令对redis缓存进行迭代扫描的原理是一样的,即每次对非string类型的key中的部分数据进行扫描,迭代多次后可完成对整个key的扫描,通过迭代扫描方式对非string类型的key进行扫描可以防止服务器发生堵塞。当对非string类型的key进行迭代扫描而得到所述key中包括的大量子key后,由于各个子key为string类型,因此可直接获取各个子key的value所占的内存,然后据此从中选择出占用内存较大的若干子key并提供给用户,用户可以直观的知道哪些子key所占用的空间大,并据此对key进行删除。请参考图5,图5为提供占用内存较大的key和子key给用户进行清理的界面一实施例的示意图,如图5所示,扫描结果界面上会显示占用内存较大的多个key和子key,用户可以从中查看哪些key需要进行清理,并选择要清理的key和子key进行删除。

通过上述步骤s301至s304,本发明redis缓存清理方法首先通过scan命令迭代扫描redis缓存中存储的key,之后判断各个key的数据类型,对于string类型的key,获取所述key中占用内存较大的key并提供给用户,对于非string类型的key,通过与所述非string类型对应的扫描命令对所述key进行迭代扫描以得到所述key中包括的子key,获取各个子key中占用内存较大的子key并提供给用户,由于迭代扫描可以实现一次只对redis缓存中的部分数据进行扫描输出,其避免了redis缓存中数据量较大时容易堵塞的问题;同时本发明将占用内存较大的key和子key提供给用户,由此用户可以知道哪些key和子key需要进行清理;此外,对于非string类型的key,其通常占用内存较大,本发明不是对其直接进行删除操作,而是对其进行进一步迭代扫描得到其包含的子key,并对子key进行选择删除,其也可以避免直接删除非string类型的key时容易造成服务器堵塞的问题。

进一步地,基于上述第一实施例,提出本发明redis缓存清理方法的第二实施例。如图2所示,是本发明redis缓存清理方法第二实施例的实施流程图。在本实施例中,根据不同的需求,图2所示的流程图中的步骤的执行顺序可以改变,某些步骤可以省略。所述redis缓存清理方法包括:

步骤s401,通过scan命令迭代扫描redis缓存中存储的key。

步骤s402,判断各个key的数据类型,其中key的数据类型包括string类型和非string类型,对于string类型的key,执行步骤s403,对于非string类型的key,执行步骤s405。其中,redis缓存支持五种数据类型:string(字符串)、hash(哈希)、list(列表)、set(集合)以及zset(sortedset:有序集合),本实施例中所述的非string类型即包括hash类型、list类型、set类型以及zset类型。其中,string类型是redis最基本的数据类型,其满足一个key对应一个value,它能够存储任何类型的字符串,包含二进制数据,如可以用于存储邮箱、json化的对象、甚至是一张图片,一个字符串允许存储的最大容量为512mb。而string(字符串)是其他四种数据类型的基础,其他几种数据类型的区别从本质上来说只是组织字符串的方式不同。具体的,hash是一个键值(key=>value)对集合,即是一个string类型的field和value的映射表,通常每个hash可以存储(232-1)个键值对;list是简单的字符串列表,按照插入顺序排序,其最多可存储(232-1)个元素;set是string类型的无序集合,集合是通过哈希表实现的,通常该无序集合中最大的成员数为(232-1);zset和set一样也是string类型元素的集合,且不允许重复的成员。

步骤s403,对于string类型的key,获取所述key的value所占的内存。

步骤s404,判断所述value所占的内存是否大于预设内存阈值,对于内存大于预设内存阈值的key,将所述key提供给用户,对于内存不大于预设内存阈值的key,不进行处理。

本实施例中,当通过scan命令对redis缓存进行迭代扫描时,对于当前扫描结果中的string类型的key,会获取各个key的value所占的内存并判断其内存是否大于预设内存阈值,当大于预设内存阈值时,表明该key所占用的内存空间较大,需要进行删除的可能性较大,因此将其提供给用户,为进一步释放内存提供依据,由用户选择是否进行删除,而当不大于预设内存阈值时,表明该key所占用的内存空间不大,进行删除的可能性较低,因此此时无需将其提供给用户进行删除。

步骤s405,对于非string类型的key,通过与所述非string类型对应的扫描命令对所述key进行迭代扫描以得到所述key中包括的子key。

步骤s406,获取各个子key的value所占的内存,判断所述子key的value是否为空,对于value为空的子key,执行步骤s407,对于vaule不为空的子key,执行步骤s408。

对于非string类型的key,其里面经常会包含大量空value的子key,因此本实施例中,对非string类型的key进行迭代扫描而得到大量子key后,这些子key中可能某些子key不具有value,即子key的value为空,由于这些value为空的key仍会占用一定的内存空间,因此可对这些无value的key直接删除,以增大redis缓存中可用的内存空间。

步骤s407,直接删除所述子key。

步骤s408,对于value不为空的子key,判断子key的value所占的内存是否大于预设内存阈值,对于内存大于预设内存阈值的子key,将所述子key提供给用户,对于内存不大于预设内存阈值的子key,不进行处理。

对于value不为空的子key,当子key对应的value所占的内存大于预设内存阈值时,表明该子key所占用的内存空间较大,需要进行删除的可能性较大,因此将其提供给用户,为进一步释放内存提供依据,由用户选择是否进行删除,而当不大于预设内存阈值时,表明该子key所占用的内存空间不大,进行删除的可能性较低,因此此时无需将其提供给用户进行删除。

步骤409,接收用户对string类型的所述key和/或所述子key的选择操作并将用户选中的key和/或子key从所述redis缓存中删除以释放相应的内存空间。

当用户接收到记录的所占内存大于预设内存阈值的key和/或子key后,用户可以主动选择删除某些key和/或子key,进而释放其所占的内存空间。

通过上述步骤s401至s409,本发明redis缓存清理方法首先通过scan命令迭代扫描redis缓存中存储的key,之后判断各个key的数据类型,对于string类型的key,获取所述key的value所占的内存并将内存大于预设内存阈值的key提供给用户,对于非string类型的key,通过与所述非string类型对应的扫描命令对所述key进行迭代扫描以得到所述key中包括的子key,获取各个子key的value所占的内存并将内存大于预设内存阈值的子key提供给用户,同时直接将value为空的子key进行删除,其通过迭代扫描可以实现一次只对redis缓存中的部分数据进行扫描输出,其避免了redis缓存中数据量较大时容易堵塞的问题;同时本发明将内存大于预设内存阈值的key和子key提供给用户,由此用户可以主动选择对一些占用内存较大的key和子key进行清理;此外,对于非string类型的key,其通常占用内存较大,本发明不是对其直接进行删除操作,而是对其进行进一步迭代扫描得到其包含的子key,并对子key进行选择删除,其也可以避免直接删除非string类型的key时容易造成服务器堵塞的问题,此外,删除value为空的子key,也可以进一步释放内存空间。

同时,本发明还提出一种服务器,所述服务器包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的redis缓存清理程序400。

如图3所示,是本发明redis缓存清理程序400第一实施例的功能模块示意图。在本实施例中,所述redis缓存清理程序400可以被分割成一个或多个模块,所述一个或多个模块存储于所述服务器的存储器中,并由一个或多个处理器所执行,以完成本发明。例如,在图3中,所述redis缓存清理程序400可以被分割成scan迭代扫描模块401、数据类型判断模块402、第一处理模块403以及第二处理模块404。本发明所称的模块是指一种能够完成特定功能的一系列获取机程序指令段,比获取机程序更适合于描述软件在所述服务器中的执行过程。以下将就上述各功能模块401-404的具体功能进行详细描述。其中:

所述scan迭代扫描模块401,用于通过scan命令迭代扫描redis缓存中存储的key。

其中,scan命令是一个基于游标的迭代器(cursorbasediterator),scan命令每次被调用之后,都会向用户返回一个新的游标,用户在下次迭代时需要使用这个新游标作为scan命令的游标参数,以此来延续之前的迭代过程。当scan命令的游标参数被设置为0时,服务器将开始一次新的迭代,而当服务器向用户返回值为0的游标时,表示迭代已结束。通过scan命令对redis缓存进行迭代扫描,可以实现每次对redis缓存中的部分数据进行扫描,相比现有技术中传统的查询key的方式(如使用keys命令或者smembers命令来查询key)需要对缓存中所有数据进行扫描,本发明能够有效缓解redis缓存阻塞的问题,能够保证服务器的正常运行。

所述数据类型判断模块402,用于判断各个key的数据类型,其中key的数据类型包括string类型和非string类型,对于string类型的key,执行第一处理模块403,对于非string类型的key,执行第二处理模块404。

其中,redis缓存支持五种数据类型:string(字符串)、hash(哈希)、list(列表)、set(集合)以及zset(sortedset:有序集合),本实施例中所述的非string类型即包括hash类型、list类型、set类型以及zset类型。其中,string类型是redis最基本的数据类型,其满足一个key对应一个value,它能够存储任何类型的字符串,包含二进制数据,如可以用于存储邮箱、json化的对象、甚至是一张图片,一个字符串允许存储的最大容量为512mb。而string(字符串)是其他四种数据类型的基础,其他几种数据类型的区别从本质上来说只是组织字符串的方式不同。具体的,hash是一个键值(key=>value)对集合,即是一个string类型的field和value的映射表,通常每个hash可以存储(232-1)个键值对;list是简单的字符串列表,按照插入顺序排序,其最多可存储(232-1)个元素;set是string类型的无序集合,集合是通过哈希表实现的,通常该无序集合中最大的成员数为(232-1);zset和set一样也是string类型元素的集合,且不允许重复的成员。

所述第一处理模块403,用于对string类型的key,获取所述key中占用内存较大的key并提供给用户以供用户选择性的清理。

通过scan命令对redis缓存进行迭代扫描时,对于当前扫描结果中的string类型的key,直接获取所述key中占用内存较大的若干key并提供给用户,从而用户可以直观的知道哪些key所占用的空间大,并据此对key进行删除。

所述第二处理模块404,用于对非string类型的key,通过与所述非string类型对应的扫描命令对所述key进行迭代扫描以得到所述key中包括的子key,获取各个子key中占用内存较大的子key并提供给用户。

通过scan命令对redis缓存进行迭代扫描时,对于当前扫描结果中的非string类型的key,需要通过与所述非string类型对应的扫描命令对其进行迭代扫描以得到所述非string类型的key中包括的子key。如:对于hash类型的key,需要通过hscan命令对该key继续进行迭代扫描,其扫描结果为一系列的string类型的key,本实施例中为了将其与通过scan命令扫描得到的string类型的key进行区分,将其记为子key;再如,对于set类型的key,用sscan命令对该key迭代扫描,其扫描结果也是一系列的string类型的key(记为子key);同理,对于list或zset类型的key,也可以通过其对应的扫描命令进行解析而得到一系列的string类型的子key。需要说明的是,此处对非string类型的key进行迭代扫描与通过scan命令对redis缓存进行迭代扫描的原理是一样的,即每次对非string类型的key中的部分数据进行扫描,迭代多次后可完成对整个key的扫描,通过迭代扫描方式对非string类型的key进行扫描可以防止服务器发生堵塞。当对非string类型的key进行迭代扫描而得到所述key中包括的大量子key后,由于各个子key为string类型,因此可直接获取各个子key的value所占的内存,然后据此从中选择出占用内存较大的若干子key并提供给用户,用户可以直观的知道哪些子key所占用的空间大,并据此对key进行删除。请参考图5,图5为提供占用内存较大的key和子key给用户进行清理的界面一实施例的示意图,如图5所示,扫描结果界面上会显示占用内存较大的多个key和子key,用户可以从中查看哪些key需要进行清理,并选择要清理的key和子key进行删除。

通过上述模块401至404,本发明redis缓存清理程序首先通过scan命令迭代扫描redis缓存中存储的key,之后判断各个key的数据类型,对于string类型的key,获取所述key中占用内存较大的key并提供给用户,对于非string类型的key,通过与所述非string类型对应的扫描命令对所述key进行迭代扫描以得到所述key中包括的子key,获取各个子key中占用内存较大的子key并提供给用户,由于迭代扫描可以实现一次只对redis缓存中的部分数据进行扫描输出,其避免了redis缓存中数据量较大时容易堵塞的问题;同时本发明将占用内存较大的key和子key提供给用户,由此用户可以知道哪些key和子key需要进行清理;此外,对于非string类型的key,其通常占用内存较大,本发明不是对其直接进行删除操作,而是对其进行进一步迭代扫描得到其包含的子key,并对子key进行选择删除,其也可以避免直接删除非string类型的key时容易造成服务器堵塞的问题。

基于上述第一实施例,提出本发明所述的redis缓存清理程序400的第二实施例。如图4所示,为本发明所述的redis缓存清理程序400第二实施例的功能模块示意图。在本实施例中,所述redis缓存清理程序400还包括内存阈值判断模块405、空key判断模块406、空key删除模块407以及清理模块408。本实施例中,各功能模块的说明如下:

所述内存阈值判断模块405,用于对string类型的key,判断所述key的value所占的内存是否大于预设内存阈值,对于内存大于预设内存阈值的key,将所述key提供给用户,对于内存不大于预设内存阈值的key,不进行处理。本实施例中,当通过scan命令对redis缓存进行迭代扫描时,对于当前扫描结果中的string类型的key,会获取各个key的value所占的内存并判断其内存是否大于预设内存阈值,当大于预设内存阈值时,表明该key所占用的内存空间较大,需要进行删除的可能性较大,因此将其提供给用户,为进一步释放内存提供依据,由用户选择是否进行删除,而当不大于预设内存阈值时,表明该key所占用的内存空间不大,进行删除的可能性较低,因此此时无需将其提供给用户进行删除。

所述空key判断模块406,用于判断各个子key的value是否为空,对于value为空的子key,执行空key删除模块407,对于value不为空的子key,判断子key的value所占的内存是否大于预设内存阈值,对于内存大于预设内存阈值的子key,将所述子key提供给用户,对于内存不大于预设内存阈值的子key,不进行处理。本实施例中,对于value不为空的子key,当子key对应的value所占的内存大于预设内存阈值时,表明该子key所占用的内存空间较大,需要进行删除的可能性较大,因此将其提供给用户,为进一步释放内存提供依据,由用户选择是否进行删除,而当不大于预设内存阈值时,表明该子key所占用的内存空间不大,进行删除的可能性较低,因此此时无需将其提供给用户进行删除。

所述空key删除模块407,用于直接删除value为空的子key。对于非string类型的key,其里面经常会包含大量空value的子key,因此本实施例中,对非string类型的key进行迭代扫描而得到所述key中包括的大量子key后,这些子key中可能某些key不具有value,即子key的value为空,由于这些value为空的key仍会占用一定的内存空间,因此可对这些无value的key直接删除,以增大redis缓存中可用的内存空间。

所述清理模块408,用于接收用户对string类型的所述key和/或所述子key的选择操作并将用户选中的key和/或子key从所述redis缓存中删除以释放相应的内存空间。当用户接收到记录的所占内存大于预设内存阈值的key和/或子key后,用户可以主动选择删除某些key和/或子key,进而释放其所占的内存空间。

通过上述模块401至408,本发明redis缓存清理程序首先通过scan命令迭代扫描redis缓存中存储的key,之后判断各个key的数据类型,对于string类型的key,获取所述key的value所占的内存并将内存大于预设内存阈值的key提供给用户,对于非string类型的key,通过与所述非string类型对应的扫描命令对所述key进行迭代扫描以得到所述key中包括的子key,获取各个子key的value所占的内存并将内存大于预设内存阈值的子key提供给用户,同时直接将value为空的子key进行删除,其通过迭代扫描可以实现一次只对redis缓存中的部分数据进行扫描输出,其避免了redis缓存中数据量较大时容易堵塞的问题;同时本发明将内存大于预设内存阈值的key和子key提供给用户,由此用户可以主动选择对一些占用内存较大的key和子key进行清理;此外,对于非string类型的key,其通常占用内存较大,本发明不是对其直接进行删除操作,而是对其进行进一步迭代扫描得到其包含的子key,并对子key进行选择删除,其也可以避免直接删除非string类型的key时容易造成服务器堵塞的问题,此外,删除value为空的子key,也可以进一步释放内存空间。

此外,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有redis缓存清理程序,所述redis缓存清理程序被执行时实现图1至图2所述的redis缓存清理方法的步骤。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1