Redis集群的键值遍历方法、服务器及存储介质技术

技术编号:24206330 阅读:24 留言:0更新日期:2020-05-20 14:49
本发明专利技术涉及一种集群存储技术,揭露了一种Redis集群的键值遍历方法,该方法包括:通过jedis连接池获取Redis集群节点集合,并与所述Redis集群中每个节点建立连接;轮询所述Redis集群中所有节点,采用SCAN命令分别查询每个节点中的键值,以得到所述Redis集群中所有符合条件的键值。本发明专利技术还提供一种服务器及存储介质。本发明专利技术提供的Redis集群的键值遍历方法、服务器及存储介质能够提高服务器性能,并且实现简单方便。

Key traversal method, server and storage medium of redis cluster

【技术实现步骤摘要】
Redis集群的键值遍历方法、服务器及存储介质
本专利技术涉及集群存储
,尤其涉及一种Redis集群的键值遍历方法、服务器及计算机可读存储介质。
技术介绍
Redis是一个key-value(键值对)型存储系统,主要分为主从模式和集群模式两种。其中,主从模式中的每个节点都存储有所有的key(关键字),而集群模式中的每个节点只存储有部分key,且所有节点中key的组合构成了整个集群中的所有key。在对Redis集群中每个节点下的key进行扫描时,现有的KEYS命令会一次性扫描所有记录。并且,KEYS算法是遍历算法,复杂度是O(n),如果Redis数据量非常大,例如有千万级以上的key,这个命令就会导致Redis服务卡顿。由于Redis是单线程程序,顺序执行所有命令,其它命令必须等到当前的KEYS命令执行完了才可以继续,可能导致所有读写Redis的其它命令都会被延后甚至会超时报错。因此使用KEYS命令会影响Redis性能,对环境造成堵塞,最终使系统不能使用,不适合用于生产环境。Redis2.8版本出现了一个新命令SCAN,可以用来分批次扫描Redis记录,但是Redis集群是不直接支持使用SCAN方法的,导致开发中遇到困难,或者需要对现有的架构改动比较大,实现麻烦。
技术实现思路
有鉴于此,本专利技术提出一种Redis集群的键值遍历方法、服务器及计算机可读存储介质,以解决至少一个上述技术问题。首先,为实现上述目的,本专利技术提出一种Redis集群的键值遍历方法,该方法包括步骤:通过jedis连接池获取Redis集群节点集合,并与所述Redis集群中每个节点建立连接;轮询所述Redis集群中所有节点,采用SCAN命令分别查询每个节点中的键值,以得到所述Redis集群中所有符合条件的键值。可选地,所述轮询所述Redis集群中所有节点,采用SCAN命令分别查询每个节点中的键值,以得到所述Redis集群中所有符合条件的键值的步骤包括:根据用户输入设置当前节点的查询参数;根据所述查询参数采用SCAN命令扫描当前节点,经过一次或多次迭代查询出所述当前节点中的键值;继续轮询下一个节点,直至所述Redis集群中所有节点全部扫描完毕,得到所述Redis集群中所有键值。可选地,该方法在所述根据所述查询参数采用SCAN命令扫描当前节点,经过一次或多次迭代查询出所述当前节点中的键值的步骤之后还包括:将查询结果放入set容器中去重。可选地,所述将查询结果放入set容器中去重的步骤包括:当每次收到SCAN命令返回的查询结果时,判断所述查询结果是否为空,如果不为空,则将所述查询结果赋值到set容器中自动去除重复数据。可选地,所述查询参数包括cursor、MATCH、COUNT,其中cursor表示游标,COUNT表示每次迭代所返回的元素数量,MATCH表示所查询的关键字key的正则模式。可选地,所述根据所述查询参数采用SCAN命令扫描当前节点,经过一次或多次迭代查询出所述当前节点中的键值的步骤还包括:每次收到SCAN命令返回的查询结果时,获取所述查询结果中的游标,判断所述游标是否等于0;若所述游标不为0,继续以所述游标作为新的迭代参数进行下一次迭代,获取SCAN命令返回的查询结果;若所述游标等于0,表示当前节点中的迭代已结束,继续轮询下一个节点。可选地,针对每一次迭代,COUNT参数的值可以设置为相同或者不同。可选地,在所述根据所述查询参数采用SCAN命令扫描当前节点,经过一次或多次迭代查询出所述当前节点中的键值的步骤中,每一次迭代包括:所述SCAN命令根据COUNT参数所设置的元素数量和MATCH参数所设置的条件遍历当前节点中存储键值的数组,返回所述数组中符合条件的查询结果,并根据已遍历的数组的索引返回所述游标。此外,为实现上述目的,本专利技术还提供一种服务器,包括存储器、处理器,所述存储器上存储有可在所述处理器上运行的Redis集群的键值遍历系统,所述Redis集群的键值遍历系统被所述处理器执行时实现如上述的Redis集群的键值遍历方法的步骤。进一步地,为实现上述目的,本专利技术还提供一种计算机可读存储介质,所述计算机可读存储介质存储有Redis集群的键值遍历系统,所述Redis集群的键值遍历系统可被至少一个处理器执行,以使所述至少一个处理器执行如上述的Redis集群的键值遍历方法的步骤。相较于现有技术,本专利技术所提出的Redis集群的键值遍历方法、服务器及计算机可读存储介质,可以通过jedis连接池轮询Redis集群每个节点下,再使用SCAN命令对当前节点进行扫描,查询该节点下的key,实现使用Redis源码原生方式获取集群中每个节点下的key。虽然SCAN方法没有keys方法执行速度快,但是它是分次进行的,不会阻塞线程,大大提高服务器性能。并且,本专利技术不用对RedisSCAN方法重写,也不用增加任何配置文件和方法,实现简单方便。附图说明图1是本专利技术服务器一可选的硬件架构的示意图;图2是本专利技术Redis集群的键值遍历系统第一实施例的程序模块示意图;图3是本专利技术Redis集群的键值遍历系统第二实施例的程序模块示意图;图4是本专利技术Redis集群的键值遍历方法较佳实施例的流程示意图;图5是图4中步骤S402第一可选实施例的细化流程图;图6是图4中步骤S402第二可选实施例的细化流程图;本专利技术目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。具体实施方式为了使本专利技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本专利技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本专利技术,并不用于限定本专利技术。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。需要说明的是,在本专利技术中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本专利技术要求的保护范围之内。参阅图1所示,是本专利技术服务器2一可选的硬件架构的示意图。本实施例中,所述服务器2可包括,但不仅限于,可通过系统总线相互通信连接存储器11、处理器12、网络接口13。需要指出的是,图1仅示出了具有组件11-13的服务器2,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。其中,所述服务器2可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器等计算设备,该服务器2可以是独立的服务器,也可以是多个服本文档来自技高网...

【技术保护点】
1.一种Redis集群的键值遍历方法,其特征在于,所述方法包括步骤:/n通过jedis连接池获取Redis集群节点集合,并与所述Redis集群中每个节点建立连接;/n轮询所述Redis集群中所有节点,采用SCAN命令分别查询每个节点中的键值,以得到所述Redis集群中所有符合条件的键值。/n

【技术特征摘要】
1.一种Redis集群的键值遍历方法,其特征在于,所述方法包括步骤:
通过jedis连接池获取Redis集群节点集合,并与所述Redis集群中每个节点建立连接;
轮询所述Redis集群中所有节点,采用SCAN命令分别查询每个节点中的键值,以得到所述Redis集群中所有符合条件的键值。


2.如权利要求1所述的Redis集群的键值遍历方法,其特征在于,所述轮询所述Redis集群中所有节点,采用SCAN命令分别查询每个节点中的键值,以得到所述Redis集群中所有符合条件的键值的步骤包括:
根据用户输入设置当前节点的查询参数;
根据所述查询参数采用SCAN命令扫描当前节点,经过一次或多次迭代查询出所述当前节点中的键值;
继续轮询下一个节点,直至所述Redis集群中所有节点全部扫描完毕,得到所述Redis集群中所有键值。


3.如权利要求2所述的Redis集群的键值遍历方法,其特征在于,该方法在所述根据所述查询参数采用SCAN命令扫描当前节点,经过一次或多次迭代查询出所述当前节点中的键值的步骤之后还包括:
将查询结果放入set容器中去重。


4.如权利要求3所述的Redis集群的键值遍历方法,其特征在于,所述将查询结果放入set容器中去重的步骤包括:
当每次收到SCAN命令返回的查询结果时,判断所述查询结果是否为空,如果不为空,则将所述查询结果赋值到set容器中自动去除重复数据。


5.如权利要求2或3所述的Redis集群的键值遍历方法,其特征在于,所述查询参数包括cursor、MATCH、COUNT,其中,cursor表示游标,COUNT表示每次迭代所返回的元素数量,MATCH表示所查询的关键字key的正则模式。<...

【专利技术属性】
技术研发人员:齐天亮
申请(专利权)人:中国平安财产保险股份有限公司
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1