CN108614740A - 基于进程间共享内存方式生成唯一id的方法及系统 - Google Patents
基于进程间共享内存方式生成唯一id的方法及系统 Download PDFInfo
- Publication number
- CN108614740A CN108614740A CN201611141779.4A CN201611141779A CN108614740A CN 108614740 A CN108614740 A CN 108614740A CN 201611141779 A CN201611141779 A CN 201611141779A CN 108614740 A CN108614740 A CN 108614740A
- Authority
- CN
- China
- Prior art keywords
- content
- memory headroom
- signal
- unique
- shared drive
- 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.)
- Pending
Links
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/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Abstract
本发明提供了一种基于进程间共享内存方式生成唯一ID的方法及系统,方法:通过进程间通信方式创建一个秘匙;获得一个信号ID,通过秘匙标识信号ID;将信号ID进行锁定,得到信号锁;获得共享内存中的一块内存空间;判断内存空间中是否存在内容,得到判定结果;根据判定结果,对所述自增序列进行赋值,生成内存空间中的新的存储内容;将信号锁释放,并结合内存空间中的新的存储内容,生成一个唯一的信号ID。本发明通过进程间共享内存的方式,生成唯一的信号ID,该生成的唯一的信号ID具有唯一的秘匙,且每次生成ID都会重复上述过程,所以在高并发的情况下,生成的每个信号ID都是唯一的,不会出现重复的问题。
Description
技术领域
本发明涉及电子通信领域,尤其涉及基于进程间共享内存方式生成唯一ID的方法及系统。
背景技术
现有的生成信号ID的算法主要有以下三种,第一种是twitter的Snowflake算法,为了满足Twitter每秒上万条消息的请求,每条消息都必须分配一条唯一的ID,这些ID还需要一些大致的顺序(方便客户端排序),并且在分布式系统中不同机器产生的ID必须不同。Snowflake算法核心是把时间戳、工作机器ID和序列号组合在一起。但该算法在高并发下会出现重复的ID。
第二种是flickr的双db方案(全局主键生成方案),双db方案的主要想法是分别生成奇、偶的ID,ID生成是事务的,此算法的优点是速度快、稳定性高、一致性高,并且没有单点问题,但是此方法的性能不高,需要部署两个db服务器,导致ID生成不连续。
第三种是redis+lua的实现方案,可以非常方便的实现一个ID生成服务,如果在redis-client里采用预取技术,可以保证ID的连续性,如果redis-client实例经常会重启,可以将使用的ID dump成文件,方便重启时不浪费ID。此方法速度极快,ID连续性较高,但此方法存在单点及生成不一致问题。
当前生成唯一ID的做法是使用通用唯一识别码(Universally UniqueIdentifier),即UUID,或者是微软的GUID(Globals Unique Identifiers)来生成,它们生成的ID在高并发的情况下会出现重复的情况,并且生成的ID都比较长,32个字节。
因此,现有技术中的技术缺陷是:生成的唯一ID在高并发的情况下会出现重复的情况。
发明内容
针对上述技术问题,本发明提供一种基于进程间共享内存方式生成唯一ID的方法及系统,通过进程间共享内存的方式,生成唯一的信号ID,可解决高并发的情况下,信号ID的重复问题。
为解决上述技术问题,本发明提供的技术方案是:
本发明提供一种基于进程间共享内存方式生成唯一ID的方法,包括:
步骤S1,通过进程间通信方式创建一个秘匙;
步骤S2,获得一个信号ID,通过所述秘匙标识所述信号ID;
步骤S3,将所述信号ID进行锁定,得到信号锁;
步骤S4,获得共享内存中的一块内存空间;
步骤S5,判断所述内存空间中是否存在内容,得到判定结果,所述判定结果包括存在内容和不存在内容两种情况,所述内容包括时间戳和自增序列;
步骤S6,根据所述判定结果,对所述自增序列进行赋值,生成所述内存空间中的新的存储内容;
步骤S7,将所述信号锁释放,并结合所述内存空间中的新的存储内容,生成一个唯一的信号ID。
本发明提供的一种基于进程间共享内存方式生成唯一ID的方法,其技术方案为:先通过进程间通信方式创建一个秘匙;然后获得一个信号ID,通过所述秘匙标识所述信号ID;接着将所述信号ID进行锁定,得到信号锁;然后获得共享内存中的一块内存空间;接着判断所述内存空间中是否存在内容,得到判定结果,所述判定结果包括存在内容和不存在内容两种情况,所述内容包括时间戳和自增序列;然后根据所述判定结果,对所述自增序列进行赋值,生成所述内存空间中的新的存储内容;最后将所述信号锁释放,并结合所述内存空间中的新的存储内容,生成一个唯一的信号ID。
本发明的基于进程间共享内存方式生成唯一ID的方法,首先获得一个信号ID,然后将这个信号ID用秘匙标识起来,用来与其他的信号ID进行区分,即每个信号ID的秘匙是唯一对应的,然后暂时将信号ID锁定,在共享内存中的一块内存空间中存入信号ID的内容,最后释放信号锁,结合信号ID的内容,生成唯一的信号ID,该生成的唯一的信号ID是唯一的,因为其具有唯一的秘匙,所以在高并发的情况下,生成的每个信号ID都是唯一的,不会出现重复的问题。
进一步地,所述步骤S4具体为:
判断所述共享空间中是否存在内存空间,得到判定结果;
根据所述判定结果,进行处理,得到所述共享空间中的一块内存空间:
当所述共享空间中存在内存空间,不作处理,得到所述共享空间中的一块内存空间;
当所述共享空间中不存在内存空间,开辟出一块内存空间,得到所述共享空间中的一块内存空间。
进一步地,所述步骤S6,具体为:
当所述内存空间中存在内容,将所述存在的内容中时间戳对应的时间与当前时间进行比较,对所述自增序列进行赋值,生成所述内存空间中的新的存储内容;
当所述内存空间中不存在内容,将自增序列设置成1,存储到所述内存空间中,得到所述内存空间中的新的存储内容。
进一步地,将所述存在的内容中时间戳对应的时间与当前时间进行比较,对所述自增序列进行赋值,具体为:
当所述存在的内容中时间戳对应的时间不小于所述当前时间1秒,将自增序列重置为1;
当所述存在的内容中时间戳对应的时间小于所述当前时间1秒,将自增序列累加,直到覆盖所述存在的内容。
进一步地,所述唯一的信号ID由服务器编号、时间戳和自增序列组成,为16位的数字。
第二方面,本发明提供了一种基于进程间共享内存方式生成唯一ID的系统,包括:
秘匙创建模块,用于通过进程间通信方式创建一个秘匙;
信号ID获取模块,用于获得一个信号ID,通过所述秘匙标识所述信号ID;
信号ID锁定模块,用于将所述信号ID进行锁定,得到信号锁;
内存空间获取模块,用于获得共享内存中的一块内存空间;
内容判断模块,用于判断所述内存空间中是否存在内容,得到判定结果,所述判定结果包括存在内容和不存在内容两种情况,所述内容包括时间戳和自增序列;
内容存储模块,用于根据所述判定结果,对所述自增序列进行赋值,生成所述内存空间中的新的存储内容;
唯一信号ID生成模块,用于将所述信号锁释放,并结合所述内存空间中的新的存储内容,生成一个唯一的信号ID。
本发明提供的基于进程间共享内存方式生成唯一ID的系统,其技术方案为:先通过秘匙创建模块,用于通过进程间通信方式创建一个秘匙;接着通过信号ID获取模块,用于获得一个信号ID,通过所述秘匙标识所述信号ID;然后通过信号ID锁定模块,用于将所述信号ID进行锁定,得到信号锁;接着通过内存空间获取模块,用于获得共享内存中的一块内存空间;然后通过内容判断模块,用于判断所述内存空间中是否存在内容,得到判定结果,所述内容包括时间戳和自增序列;接着通过内容存储模块,用于根据所述判定结果,对所述自增序列进行赋值,生成所述内存空间中的新的存储内容;最后通过唯一信号ID生成模块,用于将所述信号锁释放,并结合所述内存空间中的新的存储内容,生成一个唯一的信号ID。
本发明的基于进程间共享内存方式生成唯一ID的系统,首先获得一个信号ID,然后将这个信号ID用秘匙标识起来,用来与其他的信号ID进行区分,即每个信号ID的秘匙是唯一对应的,然后暂时将信号ID锁定,在共享内存中的一块内存空间中存入信号ID的内容,最后释放信号锁,结合信号ID的内容,生成唯一的信号ID,该生成的唯一的信号ID是唯一的,因为其具有唯一的秘匙,所以在高并发的情况下,生成的每个信号ID都是唯一的,不会出现重复的问题。
进一步地,所述内存空间获取模块,具体用于:
判断所述共享空间中是否存在内存空间,得到判定结果;
根据所述判定结果,进行处理,得到所述共享空间中的一块内存空间:
当所述共享空间中存在内存空间,不作处理,得到所述共享空间中的一块内存空间;
当所述共享空间中不存在内存空间,开辟出一块内存空间,得到所述共享空间中的一块内存空间。
进一步地,所述内容存储模块,具体用于:
当所述内存空间中存在内容,将所述存在的内容中时间戳对应的时间与当前时间进行比较,对所述自增序列进行赋值,生成所述内存空间中的新的存储内容;
当所述内存空间中不存在内容,将自增序列设置成1,存储到所述内存空间中,得到所述内存空间中的新的存储内容。
进一步地,所述内容存储模块,具体用于:
将所述存在的内容中时间戳对应的时间与当前时间进行比较,对所述自增序列进行赋值,具体为:
当所述存在的内容中时间戳对应的时间不小于所述当前时间1秒,将自增序列重置为1;
当所述存在的内容中时间戳对应的时间小于所述当前时间1秒,将自增序列累加,直到覆盖所述存在的内容。
进一步地,所述唯一的信号ID由服务器编号、时间戳和自增序列组成,为16位的数字。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍。
图1示出了本发明第一实施例所提供的一种基于进程间共享内存方式生成唯一ID的方法的流程图;
图2示出了本发明第一实施例所提供的一种基于进程间共享内存方式生成唯一ID的方法的共享内存示意图。
图3示出了本发明第二实施例所提供的一种基于进程间共享内存方式生成唯一ID的系统的示意图。
具体实施方式
下面将结合附图对本发明技术方案的实施例进行详细的描述。以下实施例仅用于更加清楚地说明本发明的技术方案,因此只是作为示例,而不能以此来限制本发明的保护范围。
实施例一
图1示出了本发明第一实施例所提供的一种基于进程间共享内存方式生成唯一ID的方法的流程图;如图1所示,实施例一提供的一种基于进程间共享内存方式生成唯一ID的方法,包括:
步骤S1,通过进程间通信方式创建一个秘匙;
步骤S2,获得一个信号ID,通过秘匙标识信号ID;
步骤S3,将信号ID进行锁定,得到信号锁;
步骤S4,获得共享内存中的一块内存空间;
步骤S5,判断内存空间中是否存在内容,得到判定结果,判定结果包括存在内容和不存在内容两种情况,内容包括时间戳和自增序列;
步骤S6,根据判定结果,对所述自增序列进行赋值,生成内存空间中的新的存储内容;
步骤S7,将信号锁释放,并结合内存空间中的新的存储内容,生成一个唯一的信号ID。
本发明提供的一种基于进程间共享内存方式生成唯一ID的方法,其技术方案为:先通过进程间通信方式创建一个秘匙;然后获得一个信号ID,通过秘匙标识信号ID;接着将信号ID进行锁定,得到信号锁;然后获得共享内存中的一块内存空间;接着判断内存空间中是否存在内容,得到判定结果,内容包括时间戳和自增序列;然后根据判定结果,对所述自增序列进行赋值,生成内存空间中的新的存储内容;最后将信号锁释放,并结合内存空间中的新的存储内容,生成一个唯一的信号ID。
本发明的基于进程间共享内存方式生成唯一ID的方法,首先要创建一个秘匙(Key),即共享内存对象的创建,key为共享内存对象的引用标识符,在对共享内存对象的访问都通过该引用标识符进行。获得一个信号ID,然后将这个信号ID用秘匙标识起来,每个信号ID的秘匙是唯一对应的,然后暂时将信号ID锁定,在共享内存中的一块内存空间中存入信号ID的内容,最后释放信号锁,结合信号ID的内容,生成唯一的信号ID,该生成的唯一的信号ID是唯一的,因为其具有唯一的秘匙,且每次生成ID都会重复上述过程,所以在高并发的情况下,生成的每个信号ID都是唯一的,不会出现重复的问题。
其中,在将信号ID锁定后,判断共享空间中是否存在内存空间,如果存在就直接运用这一块内存空间,如果不存在,要在这个共享内存中开辟出一块内存空间。接着当内存空间中存在内容,将存在的内容中时间戳对应的时间与当前时间进行比较,当存在的内容中时间戳对应的时间不小于当前时间1秒,将自增序列重置为1;当存在的内容中时间戳对应的时间小于当前时间1秒,将自增序列累加,直到覆盖存在的内容,得到内存空间中的新的存储内容;
相对应地,当内存空间中不存在内容,将自增序列设置成1,存储到内存空间中,得到内存空间中的新的存储内容。由于生成的唯一ID中包括自增序列,因此通过对自增序列的设置来获得内存空间中存入的新的内容。
具体地,生成的唯一的信号ID是由服务器编号、时间戳和自增序列组成的,为16位的数字。
其中服务器编号为两位,时间戳为十位,自增序列为四位,这样组成16位ID。比如,生成的唯一的ID是:2214782515203456,其中服务器编号serverId就是22,时间戳unixtime就是1478251520,自增序列increment就是3456,这里,时间戳取到秒。形成的这个16位数的ID,没有使用年限的限制。
单台服务器支持1秒生成9999个自增ID,如果increment的位数增加,会支持更多的并发量,因此信号ID的生成支持分布式部署,每秒的并发数会呈倍数的增长,没有并发量的限制。
进程间通信(interprocess communication)技术是让拥有依赖关系的进程间协调工作。一般而言,进程有单独的地址空间(内存空间)。我们可以举例说明一下可执行程序被装载到内存后建立的一系列映射来进一步理解:如果我们有两个进程(进程A和进程B),那么,在进程A中声明的数据对于进程B是不可用的。而且,进程B看不到进程A中发生的事件,反之亦然。如果进程A和B一起工作来完成某个任务,必须有一个在两个进程间通信信息和时间的方法。我们这里可以去看看基本的进程组件。进程有一个文本、数据以及堆栈片段。进程可能也有从自由存储空间中分配的其它内存。进程所占有的数据一般位于数据片段、堆栈片段或进程的动态分配内存中。数据对于其它进程来说是受保护的。为了让一个进程访问另外一个进程的数据,必须最终使用操作系统调用。与之类似,为了让一个进程知道另一个进程中文本片段中发生的事件,必须在进程间建立一种通信方式。当进程将数据发送到另一进程时,称做IPC(interprocess communication,进程间通信)。
共享内存是进程间通信方式中的一种,进程需要可以被其他进程浏览的内存块。希望访问这个内存块的其他进程请求对它的访问,或由创建它的进程授予访问内存块的权限。可以访问特定内存块的所有进程对它具有即时可见性。共享内存被映射到使用它的每个进程的地址空间。所以,它看起来像是另一个在进程内声明的变量。当一个进程写共享内存,所有的进程都立即知道写入的内容,而且可以访问。
进程间共享内存的关系与函数间全局变量的关系相似。程序中的所有函数都可以使用全局变量的值。同样,共享内存块可以被正在执行的所有进程访问。内存块(内存空间)可能共享一个逻辑地址,进程也可以共享某些物理地址。
本发明中采用的进程间的通信方式是共享内存的方式。在两个进程之外的内存空间中,进行处理得到唯一的信号ID。因为共享内存是最快的IPC方式,它是针对其他进程间通信方式运行效率低而专门设计的。
其中,将信号ID进行锁定,得到信号锁,是通过信号量实现的,信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,本发明中采用信号量对于信号ID进行锁定,目的是为了使进程间以及同一进程内不同线程之间的同步。
下面举例进一步说明:
有两个进程,进程A和进程B,进程A创建一块共享内存,写下Hello,World然后退出;进程B根据key(秘匙)得到进程A创建的共享内存,然后读取共享内存中的数据,参见图2。其中,秘匙是用来标识进程A的,通过秘匙,进程B可访问进程A在共享内存中存储的数据。
实施例二
图3示出了本发明第二实施例所提供的一种基于进程间共享内存方式生成唯一ID的系统的示意图;如图3所示,实施例二提供的一种基于进程间共享内存方式生成唯一ID的系统,包括:
秘匙创建模块101,用于通过进程间通信方式创建一个秘匙;
信号ID获取模块102,用于获得一个信号ID,通过秘匙标识信号ID;
信号ID锁定模块103,用于将信号ID进行锁定,得到信号锁;
内存空间获取模块104,用于获得共享内存中的一块内存空间;
内容判断模块105,用于判断内存空间中是否存在内容,得到判定结果,判定结果包括存在内容和不存在内容两种情况,内容包括时间戳和自增序列;
内容存储模块106,用于根据判定结果,对所述自增序列进行赋值,生成内存空间中的新的存储内容;
唯一信号ID生成模块107,用于将信号锁释放,并结合内存空间中的新的存储内容,生成一个唯一的信号ID。
本发明提供的基于进程间共享内存方式生成唯一ID的系统10,其技术方案为:先通过秘匙创建模块101,用于通过进程间通信方式创建一个秘匙;接着通过信号ID获取模块102,用于获得一个信号ID,通过秘匙标识信号ID;然后通过信号ID锁定模块103,用于将信号ID进行锁定,得到信号锁;接着通过内存空间获取模块104,用于获得共享内存中的一块内存空间;然后通过内容判断模块105,用于判断内存空间中是否存在内容,得到判定结果,内容包括时间戳和自增序列;接着通过内容存储模块106,用于根据判定结果,对所述自增序列进行赋值,生成内存空间中的新的存储内容;最后通过唯一信号ID生成模块107,用于将信号锁释放,并结合内存空间中的新的存储内容,生成一个唯一的信号ID。
本发明的基于进程间共享内存方式生成唯一ID的系统10,首先获得一个信号ID,然后将这个信号ID用秘匙标识起来,用来与其他的信号ID进行区分,即每个信号ID的秘匙是唯一对应的,然后暂时将信号ID锁定,在共享内存中的一块内存空间中存入信号ID的内容,最后释放信号锁,结合信号ID的内容,生成唯一的信号ID,该生成的唯一的信号ID是唯一的,因为其具有唯一的秘匙,且每次生成ID都会重复上述过程,所以在高并发的情况下,生成的每个信号ID都是唯一的,不会出现重复的问题。
另外,生成的唯一的信号ID是由服务器编号、时间戳和自增序列组成的,为16位的数字。
其中服务器编号为两位,时间戳为十位,自增序列(自增序列)为四位,这样组成16位ID。比如,生成的唯一的ID是:2214782515203456,其中服务器编号serverId就是22,时间戳unixtime就是1478251520,自增序列increment就是3456,这里,时间戳取到秒。16位数的ID,没有使用年限的限制。
单台服务器支持1秒生成9999个自增ID,如果increment的位数增加,会支持更多的并发量,因此信号ID的生成支持分布式部署,每秒的并发数会呈倍数的增长,没有并发量的限制。
具体地,内存空间获取模块104,具体用于:
判断共享空间中是否存在内存空间,得到判定结果;
根据判定结果,进行处理,得到共享空间中的一块内存空间:
当共享空间中存在内存空间,不作处理,得到共享空间中的一块内存空间;
当共享空间中不存在内存空间,开辟出一块内存空间,得到共享空间中的一块内存空间。
其中,共享内存中的一块内存空间的获取过程如下:
首先要判断共享空间中是否存在内存空间,如果存在就直接运用这一块内存空间,如果不存在,要在这个共享内存中开辟出一块内存空间。
具体地,内容存储模块106,具体用于:
当内存空间中存在内容,将存在的内容中时间戳对应的时间与当前时间进行比较;
当存在的内容中时间戳对应的时间不小于当前时间1秒,将自增序列重置为1;
当存在的内容中时间戳对应的时间小于当前时间1秒,将自增序列累加,直到覆盖存在的内容,得到内存空间中的新的存储内容;
当内存空间中不存在内容,将自增序列设置成1,存储到内存空间中,得到内存空间中的新的存储内容。
内存空间中可能存在内容,也可能不存在内容,如果存在内容,通过对自增序列的设置,将这个内容覆盖住,如果不存在内容,就通过对自增序列的设置,得到新的内容,其中自增序列的具体设置是根据内容中的时间与当前时间进行比较设置的,由于生成的唯一ID中包括自增序列,因此通过对自增序列的设置来获得内存空间中存入的新的内容。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围当中。
Claims (10)
1.基于进程间共享内存方式生成唯一ID的方法,其特征在于,包括:
步骤S1,通过进程间通信方式创建一个秘匙;
步骤S2,获得一个信号ID,通过所述秘匙标识所述信号ID;
步骤S3,将所述信号ID进行锁定,得到信号锁;
步骤S4,获得共享内存中的一块内存空间;
步骤S5,判断所述内存空间中是否存在内容,得到判定结果,所述判定结果包括存在内容和不存在内容两种情况,所述内容包括时间戳和自增序列;
步骤S6,根据所述判定结果,对所述自增序列进行赋值,生成所述内存空间中的新的存储内容;
步骤S7,将所述信号锁释放,并结合所述内存空间中的新的存储内容,生成一个唯一的信号ID。
2.根据权利要求1所述的基于进程间共享内存方式生成唯一ID的方法,其特征在于,
所述步骤S4具体为:
判断所述共享空间中是否存在内存空间,得到判定结果;
根据所述判定结果,进行处理,得到所述共享空间中的一块内存空间:
当所述共享空间中存在内存空间,不作处理,得到所述共享空间中的一块内存空间;
当所述共享空间中不存在内存空间,开辟出一块内存空间,得到所述共享空间中的一块内存空间。
3.根据权利要求1所述的基于进程间共享内存方式生成唯一ID的方法,其特征在于,
所述步骤S6,具体为:
当所述内存空间中存在内容,将所述存在的内容中时间戳对应的时间与当前时间进行比较,对所述自增序列进行赋值,生成所述内存空间中的新的存储内容;
当所述内存空间中不存在内容,将自增序列设置成1,存储到所述内存空间中,得到所述内存空间中的新的存储内容。
4.根据权利要求3所述的基于进程间共享内存方式生成唯一ID的方法,其特征在于,
将所述存在的内容中时间戳对应的时间与当前时间进行比较,对所述自增序列进行赋值,具体为:
当所述存在的内容中时间戳对应的时间不小于所述当前时间1秒,将自增序列重置为1;
当所述存在的内容中时间戳对应的时间小于所述当前时间1秒,将自增序列累加,直到覆盖所述存在的内容。
5.根据权利要求1所述的基于进程间共享内存方式生成唯一ID的方法,其特征在于,
所述唯一的信号ID由服务器编号、时间戳和自增序列组成,为16位的数字。
6.基于进程间共享内存方式生成唯一ID的系统,其特征在于,包括:
秘匙创建模块,用于通过进程间通信方式创建一个秘匙;
信号ID获取模块,用于获得一个信号ID,通过所述秘匙标识所述信号ID;
信号ID锁定模块,用于将所述信号ID进行锁定,得到信号锁;
内存空间获取模块,用于获得共享内存中的一块内存空间;
内容判断模块,用于判断所述内存空间中是否存在内容,得到判定结果,所述判定结果包括存在内容和不存在内容两种情况,所述内容包括时间戳和自增序列;
内容存储模块,用于根据所述判定结果,对所述自增序列进行赋值,生成所述内存空间中的新的存储内容;
唯一信号ID生成模块,用于将所述信号锁释放,并结合所述内存空间中的新的存储内容,生成一个唯一的信号ID。
7.根据权利要求6所述的基于进程间共享内存方式生成唯一ID的系统,其特征在于,
所述内存空间获取模块,具体用于:
判断所述共享空间中是否存在内存空间,得到判定结果;
根据所述判定结果,进行处理,得到所述共享空间中的一块内存空间:
当所述共享空间中存在内存空间,不作处理,得到所述共享空间中的一块内存空间;
当所述共享空间中不存在内存空间,开辟出一块内存空间,得到所述共享空间中的一块内存空间。
8.根据权利要求6所述的基于进程间共享内存方式生成唯一ID的系统,其特征在于,
所述内容存储模块,具体用于:
当所述内存空间中存在内容,将所述存在的内容中时间戳对应的时间与当前时间进行比较,对所述自增序列进行赋值,生成所述内存空间中的新的存储内容;
当所述内存空间中不存在内容,将自增序列设置成1,存储到所述内存空间中,得到所述内存空间中的新的存储内容。
9.根据权利要求8所述的基于进程间共享内存方式生成唯一ID的系统,其特征在于,
所述内容存储模块,具体用于:
将所述存在的内容中时间戳对应的时间与当前时间进行比较,对所述自增序列进行赋值,具体为:
当所述存在的内容中时间戳对应的时间不小于所述当前时间1秒,将自增序列重置为1;
当所述存在的内容中时间戳对应的时间小于所述当前时间1秒,将自增序列累加,直到覆盖所述存在的内容。
10.根据权利要求6所述的基于进程间共享内存方式生成唯一ID的系统,其特征在于,
所述唯一的信号ID由服务器编号、时间戳和自增序列组成,为16位的数字。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611141779.4A CN108614740A (zh) | 2016-12-12 | 2016-12-12 | 基于进程间共享内存方式生成唯一id的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611141779.4A CN108614740A (zh) | 2016-12-12 | 2016-12-12 | 基于进程间共享内存方式生成唯一id的方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108614740A true CN108614740A (zh) | 2018-10-02 |
Family
ID=63657033
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611141779.4A Pending CN108614740A (zh) | 2016-12-12 | 2016-12-12 | 基于进程间共享内存方式生成唯一id的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108614740A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109522132A (zh) * | 2018-11-27 | 2019-03-26 | 郑州云海信息技术有限公司 | 一种标识生成的方法及装置 |
CN110750579A (zh) * | 2019-10-21 | 2020-02-04 | 浪潮云信息技术有限公司 | 一种云数据库Redis的高效内存分布方法及系统 |
CN110990169A (zh) * | 2019-11-29 | 2020-04-10 | 深圳市风云实业有限公司 | 一种利用共享内存进行进程间字节流通信的结构及方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070203959A1 (en) * | 2006-02-24 | 2007-08-30 | Samsung Electronics Co., Ltd. | Apparatus and method for managing resources using virtual ID in multiple Java application environment |
CN102662632A (zh) * | 2012-03-14 | 2012-09-12 | 北京神州数码思特奇信息技术股份有限公司 | 一种利用信号量实现的序列号生成方法和生成器 |
CN102722405A (zh) * | 2012-06-06 | 2012-10-10 | 新浪网技术(中国)有限公司 | 高并发、多线程应用中的计数方法及系统 |
CN103514053A (zh) * | 2013-09-22 | 2014-01-15 | 中国科学院信息工程研究所 | 一种基于共享内存的进程间通讯方法 |
CN105812248A (zh) * | 2016-05-09 | 2016-07-27 | 腾讯科技(深圳)有限公司 | 标识取值的分配方法和装置 |
-
2016
- 2016-12-12 CN CN201611141779.4A patent/CN108614740A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070203959A1 (en) * | 2006-02-24 | 2007-08-30 | Samsung Electronics Co., Ltd. | Apparatus and method for managing resources using virtual ID in multiple Java application environment |
CN102662632A (zh) * | 2012-03-14 | 2012-09-12 | 北京神州数码思特奇信息技术股份有限公司 | 一种利用信号量实现的序列号生成方法和生成器 |
CN102722405A (zh) * | 2012-06-06 | 2012-10-10 | 新浪网技术(中国)有限公司 | 高并发、多线程应用中的计数方法及系统 |
CN103514053A (zh) * | 2013-09-22 | 2014-01-15 | 中国科学院信息工程研究所 | 一种基于共享内存的进程间通讯方法 |
CN105812248A (zh) * | 2016-05-09 | 2016-07-27 | 腾讯科技(深圳)有限公司 | 标识取值的分配方法和装置 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109522132A (zh) * | 2018-11-27 | 2019-03-26 | 郑州云海信息技术有限公司 | 一种标识生成的方法及装置 |
CN110750579A (zh) * | 2019-10-21 | 2020-02-04 | 浪潮云信息技术有限公司 | 一种云数据库Redis的高效内存分布方法及系统 |
CN110990169A (zh) * | 2019-11-29 | 2020-04-10 | 深圳市风云实业有限公司 | 一种利用共享内存进行进程间字节流通信的结构及方法 |
CN110990169B (zh) * | 2019-11-29 | 2022-11-01 | 深圳市风云实业有限公司 | 一种利用共享内存进行进程间字节流通信的结构及方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7620781B2 (en) | Efficient Bloom filter | |
CN110032571B (zh) | 业务流程处理方法、装置、存储介质及计算设备 | |
JP2016062608A (ja) | 共有メモリにおけるデータにアクセスするためのメカニズム及び方法 | |
CN104111897B (zh) | 一种数据处理方法、装置及计算机系统 | |
US7885967B2 (en) | Management of large dynamic tables | |
US6668291B1 (en) | Non-blocking concurrent queues with direct node access by threads | |
KR101959153B1 (ko) | 데이터베이스에서의 계좌와 관련된 거래 요청의 효율적인 처리를 위한 시스템 | |
US20160182637A1 (en) | Isolating Clients of Distributed Storage Systems | |
US10162828B2 (en) | Striping files across nodes of a distributed file system | |
US9251162B2 (en) | Secure storage management system and method | |
CN102880557B (zh) | 一种异构数据源的多级分布式高速缓存的查找方法 | |
CN107454203A (zh) | 在分布式系统中生成唯一id的方法 | |
US9767019B2 (en) | Pauseless garbage collector write barrier | |
CN106815298A (zh) | 基于块存储的分布式共享文件系统 | |
CN108614740A (zh) | 基于进程间共享内存方式生成唯一id的方法及系统 | |
CN107667363A (zh) | 具有多种可选数据处理策略的基于对象的存储集群 | |
CN107577678A (zh) | 处理数据库事务的方法、客户端和服务器 | |
CN103886109B (zh) | 一种实现数据库行锁的方法及装置 | |
CN103914399A (zh) | 一种并行计算系统中的磁盘缓存方法及装置 | |
CN104508645A (zh) | 用于使用多个子锁来控制对具有读取器-写入器锁的共享数据结构的访问的系统和方法 | |
CN106844041A (zh) | 内存管理的方法及内存管理系统 | |
CN106936931A (zh) | 分布式锁的实现方法、相关设备及系统 | |
CN106528893A (zh) | 数据同步方法及装置 | |
CN105446889B (zh) | 一种内存管理方法、装置以及内存控制器 | |
US10387335B2 (en) | Memory system and handles to master capabilities |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20181002 |
|
RJ01 | Rejection of invention patent application after publication |