一种Redis分布式数据库主键id的生成方法及系统、存储介质技术方案

技术编号:20044991 阅读:51 留言:0更新日期:2019-01-09 04:11
本发明专利技术公开了一种Redis分布式数据库主键id的生成方法及系统、存储介质,其中方法包括:响应于数据表主键id的生成请求,查询Redis集群内是否包含该数据表主键id对应的Key;在查询到该数据表主键id对应的Key后,判断是否需要批量添加数据库记录,若不需要,则在原步长值的基础上自动加1;若需要,则根据用户选择生成的步长值产生一个数组。本发明专利技术提供的Redis分布式数据库主键id的生成方法及系统、存储介质,使用Redis集群来产生主键id,主键id字段能够以正整数的形式持续自增,在高并发的场景下id值不重复;在业务发生问题进行回滚的时候,主键id也可以回滚到增长以前。在使用习惯上,能够较好地兼容以前auto_increament功能带来的主键id方式。

【技术实现步骤摘要】
一种Redis分布式数据库主键id的生成方法及系统、存储介质
本专利技术涉及分布式计算
,尤其涉及一种Redis(REmoteDIctionaryServer,key-value存储系统)分布式数据库主键id的生成方法及系统、存储介质。
技术介绍
MySQL(关系型数据库管理系统)数据库的每个表都可以使用自增的功能产生连续的数字id(Identity,身份标识),这一id通常被作为各种数据的主键id,具有唯一性,以保证通过该id的具体数据一一对应。但是,在MySQL集群的情况下,程序访问到数据库时,每个数据库会根据自己的情况进行自增,因此就会出现多个数据库具有同一个id,但对应的数据并不相同的情况。目前,现有的主要解决方案是以Twitter(推特)的分布式自增ID算法snowflake为基础的衍生版,利用这一算法生成的主键id过长,构造复杂,不适合代替MySQL原本的auto_increment功能,以生成单纯的数字主键id。
技术实现思路
本专利技术提供一种Redis分布式数据库主键id的生成方法及系统、存储介质,能够代替MySQL原本的auto_increament功能,使得主键id字段是一个单纯的数字,而且能够持续自增、在高并发的场景下,id值不重复。本专利技术提供的Redis分布式数据库主键id的生成方法,包括以下步骤:响应于数据表主键id的生成请求,查询Redis集群内是否包含该数据表主键id对应的Key(标识符);若Redis集群内包含该数据表主键id对应的Key,则使用该Key;若Redis集群内不包含该数据表主键id对应的Key,则创建Key;在Redis集群内查询到该数据表主键id对应的Key后,判断是否需要批量添加数据库记录,若不需要,则在主键id查询的基础上自动加1,生成一个数值;若需要,则根据主键id查询值产生一个数组;并将得到的数值或数组与其他数据一起写入数据库;当写入数据库失败时,进一步判断增加的步长是否为1;若增加的步长为1,则将Redis中的数据减掉1,然后向数据库抛送一个异常,使数据库删除对应插入的数据;若增加的步长不为1,则将Redis中的数据减掉一个数组,然后向数据库抛出一个异常,使数据库删除对应插入的数据。作为一种可实施方式,本专利技术的Redis分布式数据库主键id的生成方法,还包括以下步骤:在将得到的数值或数组与其他数据一起写入数据库后,判断写入数据是否成功;若写入数据成功,则结束流程。作为一种可实施方式,在Redis集群内查询到该数据表主键id对应的Key后,判断是否需要批量添加数据库记录,具体为:在Redis集群内查询到该数据表主键id对应的Key后,判断增加的步长是否为1;若判断为是,则在主键id查询值的基础上自动加1,生成一个数值,将得到的数值与其他数据一起写入数据库;若判断为否,则根据主键id查询值产生一个数组,并将得到的数组与其他数据一起写入数据库。相应地,本专利技术提供的Redis分布式数据库主键id的生成系统,包括查询模块、数据库写入模块以及回滚模块;所述查询模块,用于响应于数据表主键id的生成请求,查询Redis集群内是否包含该数据表主键id对应的Key;若Redis集群内包含该数据表主键id对应的Key,则使用该Key;若Redis集群内不包含该数据表主键id对应的Key,则创建Key;所述数据库写入模块,用于在Redis集群内查询到该数据表主键id对应的Key后,判断是否需要批量添加数据库记录,若不需要,则在主键id查询值的基础上自动加1,生成一个数值;若需要,则根据主键id查询值产生一个数组;并将得到的数值或数组与其他数据一起写入数据库;所述回滚模块,用于当写入数据库失败时,进一步判断增加的步长是否为1;若增加的步长为1,则将Redis中的数据减掉1,然后向数据库抛送一个异常,使数据库删除对应插入的数据;若增加的步长不为1,则将Redis中的数据减掉一个数组,然后向数据库抛出一个异常,使数据库删除对应插入的数据。作为一种可实施方式,本专利技术提供的Redis分布式数据库主键id的生成系统,还包括判断模块;所述判断模块,用于在将得到的数值或数组与其他数据一起写入数据库后,判断写入数据是否成功;并在判断写入数据成功后,结束流程。作为一种可实施方式,所述数据库写入模块包括写数据单元;所述写数据单元,用于在Redis集群内查询到该数据表主键id对应的Key后,判断增加的步长是否为1;若判断为是,则在主键id查询值的基础上自动加1,生成一个数值,将得到的数值与其他数据一起写入数据库;若判断为否,则根据主键id查询值产生一个数组,并将得到的数组与其他数据一起写入数据库。本专利技术还提供了一种Redis分布式数据库主键id的生成系统,包括存储器和处理器;所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;所述处理器,连接Redis集群和所述存储器,用于根据所述程序代码中的指令执行如上述任一项所述的Redis分布式数据库主键id的生成方法。本专利技术还提供了一种存储介质,所述存储介质用于存储程序代码,所述程序代码用于执行如上述任一项所述的Redis分布式数据库主键id的生成方法。与现有技术相比,本技术方案具有以下优点:本专利技术提供的Redis分布式数据库主键id的生成方法及系统、存储介质,使用Redis集群来产生主键id,主键id字段能够以正整数的形式持续自增,在高并发的场景下id值不重复;在业务发生问题进行回滚的时候,主键id也可以回滚到增长以前。在使用习惯上,能够较好地兼容以前auto_increament功能带来的主键id方式。附图说明图1为本专利技术实施例一提供的Redis分布式数据库主键id的生成方法的流程示意图;图2为本专利技术实施例二提供的Redis分布式数据库主键id的生成系统的结构示意图。具体实施方式以下结合附图,对本专利技术上述的和另外的技术特征和优点进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术的部分实施例,而不是全部实施例。分布式系统中,有一些需要使用全局唯一ID的场景。有些时候,需要使用简单一些的而且能够适合代替MySQL原本的auto_increment功能,以生成单纯的数字主键id。基于此,本专利技术提供了一种Redis分布式数据库主键id的生成方法及系统,通过使用Redis集群来产生主键id。由于Redis是单线程的,所有的并发数据都会转成队列来处理,因此不存在线程是否安全的问题。同时,Redis本身就是缓存,响应速度快,所以使用Redis集群来产生主键id也满足高可用的需求。本专利技术实施例一提供了一种Redis分布式数据库主键id的生成方法,如图1所示,包括以下步骤:S100、响应于数据表主键id的生成请求,查询Redis集群内是否包含该数据表主键id对应的Key;若Redis集群内包含该数据表主键id对应的Key,则使用该Key;若Redis集群内不包含该数据表主键id对应的Key,则创建Key;S200、在Redis集群内查询到该数据表主键id对应的Key后,判断是否需要批量添加数据库记录,若不需要,则在主键id查询值的基础上自动加1,生成一个数值;若需要,则根据主键id查询值产生一个数组;并将得到的数值或数组与其他数据一起写入数本文档来自技高网...

【技术保护点】
1.一种Redis分布式数据库主键id的生成方法,其特征在于,包括以下步骤:响应于数据表主键id的生成请求,查询Redis集群内是否包含该数据表主键id对应的Key;若Redis集群内包含该数据表主键id对应的Key,则使用该Key;若Redis集群内不包含该数据表主键id对应的Key,则创建Key;在Redis集群内查询到该数据表主键id对应的Key后,判断是否需要批量添加数据库记录,若不需要,则在主键id查询值的基础上自动加1,生成一个数值;若需要,则根据主键id查询值产生一个数组;并将得到的数值或数组与其他数据一起写入数据库;当写入数据库失败时,进一步判断增加的步长是否为1;若增加的步长为1,则将Redis中的数据减掉1,然后向数据库抛送一个异常,使数据库删除对应插入的数据;若增加的步长不为1,则将Redis中的数据减掉一个数组,然后向数据库抛出一个异常,使数据库删除对应插入的数据。

【技术特征摘要】
1.一种Redis分布式数据库主键id的生成方法,其特征在于,包括以下步骤:响应于数据表主键id的生成请求,查询Redis集群内是否包含该数据表主键id对应的Key;若Redis集群内包含该数据表主键id对应的Key,则使用该Key;若Redis集群内不包含该数据表主键id对应的Key,则创建Key;在Redis集群内查询到该数据表主键id对应的Key后,判断是否需要批量添加数据库记录,若不需要,则在主键id查询值的基础上自动加1,生成一个数值;若需要,则根据主键id查询值产生一个数组;并将得到的数值或数组与其他数据一起写入数据库;当写入数据库失败时,进一步判断增加的步长是否为1;若增加的步长为1,则将Redis中的数据减掉1,然后向数据库抛送一个异常,使数据库删除对应插入的数据;若增加的步长不为1,则将Redis中的数据减掉一个数组,然后向数据库抛出一个异常,使数据库删除对应插入的数据。2.根据权利要求1所述的Redis分布式数据库主键id的生成方法,其特征在于,还包括以下步骤:在将得到的数值或数组与其他数据一起写入数据库后,判断写入数据是否成功;若写入数据成功,则结束流程。3.根据权利要求1或2所述的Redis分布式数据库主键id的生成方法,其特征在于,在Redis集群内查询到该数据表主键id对应的Key后,判断是否需要批量添加数据库记录,具体为:在Redis集群内查询到该数据表主键id对应的Key后,判断增加的步长是否为1;若判断为是,则在主键id查询值的基础上自动加1,生成一个数值,将得到的数值与其他数据一起写入数据库;若判断为否,则根据主键id查询值产生一个数组,并将得到的数组与其他数据一起写入数据库。4.一种Redis分布式数据库主键id的生成系统,其特征在于,包括查询模块、数据库写入模块以及回滚模块;所述查询模块,用于响应于数据表主键id的生成请求,查询Redis集群内是否包含该数据表主键id对应的Key;若Redis集群内包含该数据表主键id对应...

【专利技术属性】
技术研发人员:陆宇峰张勇
申请(专利权)人:杭州启博科技有限公司
类型:发明
国别省市:浙江,33

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

1