CN109558069B - 一种存储消息的方法和装置与一种读取消息的方法和装置 - Google Patents
一种存储消息的方法和装置与一种读取消息的方法和装置 Download PDFInfo
- Publication number
- CN109558069B CN109558069B CN201710889500.9A CN201710889500A CN109558069B CN 109558069 B CN109558069 B CN 109558069B CN 201710889500 A CN201710889500 A CN 201710889500A CN 109558069 B CN109558069 B CN 109558069B
- Authority
- CN
- China
- Prior art keywords
- message
- meta
- information
- group
- key
- 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
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0652—Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0674—Disk device
- G06F3/0676—Magnetic disk device
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Computer And Data Communications (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本申请提供一种存储消息的方法和装置以及一种读取消息的方法和装置。其中,所述一种存储消息的方法,包括:获取存储指定的待存储消息的请求;根据所述请求所对应的待存储消息的相关信息,生成所述待存储消息的含有第一删除标志的元信息数据和含有第二删除标志的消息实体数据;将所述待存储消息的元信息数据以及相应的待存储消息的消息实体数据原子地存储到存储介质。本申请能够起到简化消息的管理,提高管理消息的灵活性的作用。
Description
技术领域
本申请涉及一种管理消息的方法。具体涉及一种存储消息的方法和装置以及一种读取消息的方法和装置。
背景技术
本申请所涉及的消息是指业务系统或业务系统的不同功能模块间传递信息的载体。当业务系统或业务系统的功能模块需要通知其他的业务系统或系统的其他功能模块执行后续的操作时,会产生必要的信息,所述信息被保存到相应的消息组,以便其他业务系统或系统的其他功能模块从所述消息组读取所述必要的信息,执行后续的操作。
消息管理系统管理消息的存储,读取和删除,可以被当作消息系统的的服务端,产生消息的业务系统或业务系统的功能模块是消息的生产者,需要获得消息的内容和相关数据并能够删除消息的业务系统或业务系统的功能模块是消息的消费者,也可以被当作消息系统的客户端。
可靠消息系统管理消息的读取状态来保证消息至少读取成功一次。在消息系统服务端管理消息读取状态,需要保证读取者来读取消息时总是返回当前消息组中最先进入的消息。尤其是需要处理那些客户端没有读取成功的消息,保证这些消息可以被再次读取,最终做到所有消息至少被读取一次。
实现该方式的已有方案可以大致分为两类:
第一类,在消息的元数据信息中增加一个属性来记录消息的是否已经被成功读取。在消息被发送到消息系统时将消息的读取状态设置为“未读取”,在用户读取获取消息后将消息状态置为“正在读取”,用户成功读取后主动将消息的状态置为“已读取”。每次用户读取消息时,系统都是从最早进入且未被读取的消息开始取出其后的消息,过滤掉其中的“已读取”和“正在读取”的消息,返回“未读取”消息给用户。用户如果未能在约定的时间内读取成功,系统会把消息从“正在读取”状态改为“未读取”状态,使消息可以被再次读取,来保证消息至少读取成功一次。
第一类在消息系统服务端管理消息的读取状态的技术方案需要修改消息的属性。在多个线程并发读取消息时,并发更改消息的状态会导致随机写磁盘,严重影响系统的性能。另外,维护最早进入且未被读取的消息也较为复杂。而且,每次给用户返回消息,都需要过滤“正在读取”和“读取成功”的消息。
第二类,将一个组分成两部分:“待读取的消息集合”和“正在读取的消息集合”。消息发送至系统后进入“待读取的消息集合”。用户获取消息后,消息出“待读取的消息集合”,进入“正在读取的消息集合”。读取成功后,用户主动将消息从“待读取的消息集合”删除。否则,在超出约定的超时时间后,系统会把消息从“正在读取的消息集合”移至“待读取的消息集合”,使消息可以被再次读取,来保证消息至少读取成功一次。
第二类在消息系统服务端管理消息的读取状态的技术方案需要维护两个份消息集合,而且消息的状态改变需要修改两个消息集合。尤其在消息读取失败后,系统需要把该消息再次加入“未读取的消息集合”来保证至少读取成功一次。因为需要保证消息先进先出,未能成功读取的消息需要被“插入”到“未读取的消息集合”中特定的位置。如果使用随机写的方式来实现“插入”会产生严重的性能问题。如果使用追加写的方式来实现逻辑上的“插入”,往往会因为物理上的数据归并不及时导致在读取消息的时候需要过滤大量逻辑上已经删除的消息,同时也需要特别处理大量消息过期的情况,增加了实现的复杂性。
可见,上述两类目前管理消息的方式具有管理消息复杂,成本较高的问题。
发明内容
本申请提供一种存储消息的方法。本申请同时提供一种存储消息的装置,以及一种读取消息的方法和装置。
本申请提供的一种存储消息的方法,包括:
获取存储指定的待存储消息的请求;
根据所述请求所对应的待存储消息的相关信息,生成所述待存储消息的含有第一删除标志的元信息数据和含有第二删除标志的消息实体数据;
将所述待存储消息的元信息数据以及相应的待存储消息的消息实体数据原子地存储到存储介质。
可选的,根据所述请求所对应的待存储消息的相关信息,生成所述待存储消息的含有第一删除标志的元信息数据和含有第二删除标志消息实体数据包括:
为所述待存储消息生成消息标识;
根据所述请求所对应的待存储消息的相关信息,生成包括元信息键和元信息删除标志的所述待存储消息的元信息数据;
根据所述请求所对应的待存储消息的相关信息,生成包括消息实体键,消息实体值和消息实体删除标志的所述待存储消息的消息实体数据;
其中,所述元信息删除标志为所述第一删除标志,所述消息实体删除标志为所述消息实体删除标志。
可选的,所述根据所述请求所对应的待存储消息的相关信息,生成包括元信息键和元信息删除标志的所述待存储消息的元信息数据包括:
将当前时间作为生成元信息数据的时间,生成包括所述待存储消息所属的消息组的标识,生成元信息数据的时间,所述消息标识和元信息标识的所述待存储消息的元信息键;
生成值为假的所述待存储消息的元信息删除标志。
可选的,所述根据所述请求所对应的待存储消息的相关信息,生成包括消息实体键,消息实体值和消息实体删除标志的所述待存储消息的消息实体数据包括:
生成包括所述待存储消息所属的消息组的标识,所述消息标识和消息实体标识的所述待存储消息的消息实体键;
生成包括所述待存储消息的内容的所述待存储消息的消息实体值;
生成值为假的所述待存储消息的消息实体删除标志。
可选的,所述消息标识为递增编号的数字。
此外,本申请还提供一种读取消息的方法,包括以下步骤:
获取请求者读取指定消息组的消息的请求;
根据缓存中所述请求所对应的消息组的第一个消息的元信息数据,生成相应的删除消息的元信息数据和隐藏消息的元信息数据;
将所述删除消息的元信息数据和所述隐藏消息的元信息数据原子地存储到存储介质;
将所述请求所对应的消息组的第一个消息的相关数据输出;
其中,所述第一个消息包括生成元信息数据的时间最早的消息。
可选的,所述根据所述请求所对应的消息组的第一个消息的元信息数据,生成相应的删除消息的元信息数据和隐藏消息的元信息数据包括:
根据所述第一个消息的元信息数据生成删除消息的元信息数据;
根据所述第一个消息和其所对应的超时时长生成隐藏消息的元信息数据;
可选的,所述根据所述第一个消息的元信息数据生成删除消息的元信息数据包括:
将所述第一个消息的的元信息键作为删除消息的元信息键,设置所述删除消息的元信息删除标志为真,生成删除消息的元信息数据。
可选的,所述根据所述第一个消息和其所对应的超时时长生成隐藏消息的元信息数据包括:
将所述第一个消息的元信息键的生成元信息数据的时间加上所述消息所对应的超时时长后得到的元信息键作为隐藏消息的元信息键,设置隐藏消息的元信息删除标志为假,生成隐藏消息的元信息数据。
可选的,所述将所述请求所对应的消息组的第一个消息的相关数据输出包括:
根据所述第一个消息的元信息数据,将相应的第一个消息的内容读入缓存;
将缓存中所述消息的内容及所述消息的属性数据输出。
可选的,所述将所述请求所对应的消息组的第一个消息的相关数据输出的步骤后还包括:
获取删除所读取的所述消息的请求;
当所述请求所对应的消息的元信息键的生成元信息数据与当前时间的差值小于所述消息的超时时长时,将所述隐藏消息的元信息键作为删除隐藏消息的元信息键,设置所述删除隐藏消息的元信息删除标志为真,生成删除隐藏消息的元信息数据;
存储所述删除隐藏消息的元信息数据。
可选的,所述根据缓存中所述请求所对应的消息组的第一个消息的元信息数据,生成相应的删除消息的元信息数据和隐藏消息的元信息数据的步骤前,还包括:
根据所述请求所对应的消息组的标识确定所述消息组的起始消息的元信息键;
根据当前时间确定所述消息组的截止消息的元信息键;
将所述消息组的起始消息的元信息键和所述消息组的截止消息的元信息键范围内的预先指定数量的消息的元信息数据读取到缓存中。
可选的,所述根据所述消息组的标识确定所述消息组的起始消息的元信息键包括:
根据是否存在被保存的所述消息组的起始消息的元信息键的情况,确定所述消息组的初始化消息的元信息键;
从所述消息组的初始化消息的元信息键开始,读取所述消息组的预先指定数量的消息的元信息数据;
当所述消息组的初始化消息的元信息键的生成元信息数据的时间加上所述消息组的消息过期时长的和小于当前时间时,将当前时间与过期时长的差值作为所述消息组的起始消息的元信息键的生成元信息数据的时间,将0作为所述消息组的起始消息的元信息键的消息标识,将所述消息组的标识作为所述消息组的起始消息的元信息键的消息组的标识,按照构造元信息键的规则生成所述消息组的起始消息的元信息键。
可选的,所述根据是否存在被保存的所述消息组的起始消息的元信息键的情况,确定所述消息组的初始化消息的元信息键包括:
当存在以前保存的所述消息组的起始消息的元信息键时,将所述以前保存的所述消息组的起始消息的元信息键作为所述消息组的初始化消息的元信息键。
可选的,所述根据是否存在被保存的所述消息组的起始消息的元信息键的情况,确定所述消息组的初始化消息的元信息键包括:
当不存在以前保存的所述消息组的起始消息的元信息键时,将0作为所述消息组的初始化消息的元信息键的生成元信息数据的时间,将0作为所述消息组的初始化消息的元信息键的消息标识,将所述消息组的标识作为所述消息组的起始消息的元信息键的消息组的标识,按照构造元信息键的规则生成所述消息组的初始化消息的元信息键。
可选的,所述根据所述消息组的标识确定所述消息组的起始消息的元信息键包括:
将当前时间与过期时长的差值作为所述消息组的起始消息的元信息键的生成元信息数据的时间,将0作为所述消息组的起始消息的元信息键的消息标识,将所述消息组的标识作为所述消息组的起始消息的元信息键的消息组的标识,按照构造元信息键的规则生成所述消息组的起始消息的元信息键。
可选的,所述根据当前时间确定所述消息组的截止消息的元信息键包括:
将当前时间之前最新生成的所述消息组的消息的元信息键中的消息标识作为所述消息组的截止消息的元信息键的消息标识,将当前时间作为所述消息组的截止消息的元信息键的生成元信息数据的时间,将所述消息组的标识作为所述消息组的截止消息的元信息键的消息组的标识,按照构造元信息键的规则生成所述消息组的截止消息的元信息键。
可选的,所述将所述消息组的起始消息的元信息键和所述消息组的截止消息的元信息键范围内的预先指定数量的消息的元信息数据读取到缓存中的步骤后,还包括:
将所述消息的元数据中最后一个消息的元信息键的消息标识加一后的得到的元信息键作为所述消息组的起始消息的元信息键;
存储所述起始消息的元信息键。
此外,本申请还提供一种存储消息的装置,包括:
获取单元,用于获取存储指定的待存储消息的请求;
生成单元,用于根据所述请求所对应的待存储消息的相关信息生成所述待存储消息的含有删除标志的元信息数据和消息实体数据;
存储单元,用于将所述待存储消息的元信息数据以及相应的待存储消息的消息实体数据原子地存储到存储介质。
此外,本申请还提供一种读取消息的装置,包括:
获取单元,用于获取请求者读取指定消息组的消息的请求;
相应元信息数据生成单元,用于根据缓存中所述请求所对应的消息组的第一个消息的元信息数据,生成相应的删除消息的元信息数据和隐藏消息的元信息数据;
存储单元,用于将所述删除消息的元信息数据和所述隐藏消息的元信息数据原子地存储到存储介质;
输出单元,用于将所述请求所对应的消息组的第一个消息的相关数据输出。与现有技术相比,本申请具有以下优点:
本申请提供的一种存储消息的方法将待存储消息的含有第一删除标志的元信息数据和含有第二删除标志的消息实体数据原子地存储,能够起到简化消息的管理,提高管理消息的灵活性的作用。进而达到降低管理消息的成本的效果。
本申请提供的一种读取消息的方法,根据欲读取消息组的第一条消息的元信息数据生成并存储删除消息的元信息数据和隐藏消息的元信息数据,并将欲读取消息组的第一条消息相关的数据输出。通过追加存储相应的消息的原信息数据来控制管理消息的状态,起到简化消息状态管理的作用,进而达到降低管理消息的成本的效果。
附图说明
图1为本申请第一实施例一种存储消息的方法的流程示意图;
图2为本申请第二实施例一种读取消息的方法的流程示意图;
图3为本申请第二实施例一种读取消息的方法的示意图;
图4为本申请第三实施例一种存储消息的装置的结构框图;
图5为本申请第四实施例一种读取消息的装置的结构框图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
本申请第一实施例提供一种存储消息的方法,其流程示意图如图1所示,该实施例包括以下步骤:
步骤S101,获取存储指定的待存储消息的请求。
当业务系统或业务系统的功能模块需要通知其他的业务系统或系统的其他功能模块执行后续的操作时,会产生消息。所述消息包含有其他业务系统或业务系统的其他功能模块执行后续的操作所需的必要信息。所述消息需要被存储到存储介质,以防止系统内存故障导致的消息损坏丢失。
当系统中产生了消息后,系统会形成存储所述新产生的消息的请求。本步骤获取所述请求,所述新产生的消息即为指定的待存储消息。
例如当在线购物系统收到用户提交或确认订单的操作后,会产生一条订单生成消息通知相关的系统(如支付系统)进行后续的操作。所述订单生成消息可以包含有支付系统进行后续操作所需要的必要的信息,如订单生成的时间,金额,用户的标识等等。
所述订单生成消息产生后,获取系统形成的将所述订单生成消息存储起来的请求。
步骤S102,根据所述请求所对应的待存储消息的相关信息,生成所述待存储消息的含有第一删除标志的元信息数据和含有第二删除标志的消息实体数据。
首先,根据所述请求所对应的待存储消息所属的消息组的不同,为所述请求所对应的待存储消息生成消息标识。
根据系统的实际情况,新产生的消息可以归属于相应的组,如消息组是根据产生消息的业务系统的不同划分的,则将同一业务系统产生的消息归属于同一个消息组,为了在同一组内将不同消息区分开,需要为同一消息组内不同的消息赋予不同的消息标识,所述消息标识可以在同一消息组中唯一地确定一条消息。
所述消息标识可以采用字符或数字的形式,本实施中例优选地提供数字的形式,并且为递增编号的数字。这样无需额外的号码生成器就能够做到在同一个消息组中唯一地确定一条消息,易于管理,并且递增编号能够帮助体现消息产生的先后顺序,便于后续查找或过滤消息。
例如,将消息标识起始值设置为0,每次为属于同一消息组内的消息生成消息标识时都依次递增1,即生成的消息组内的消息标识依次为1,2,3,4,5……
其次,利用所述待存储消息所属的消息组的标识,当前时间和所述消息标识等信息,生成所述待存储消息的元信息数据。
所述元信息数据包括元信息键和元信息删除标志。所述元信息键作为键值索引能够用于查找元信息删除标志,其中,所述元信息删除标志为所述第一删除标志。
从系统获得当前时间的信息,将当前时间作为生成元信息数据的时间。对于采用UNIX的系统,可以采用系统的UNIX时间戳作为时间相关数据的值。Unix时间戳是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。Unix时间戳不仅被使用在Unix系统、类Unix系统中,也在许多其他操作系统中被广泛采用。
本实施例获取当前时间的UNIX时间戳,将所述时间戳的值作为所述待存储消息的元信息键的生成元信息数据的时间。
生成元信息数据的时间确定后,生成所述待存储消息的元信息键,所述生成的元信息键包括所述待存储消息所属的消息组的标识,所述生成元信息数据的时间,所述消息标识和元信息标识。
生成值为假的所述待存储消息的元信息删除标志。
将所述待存储消息所属的消息组的标识,所述生成元信息数据的时间,所述消息标识和元信息标识包括在所述待存储消息的元信息键中能够体现所述元信息的生成时间,和所述元信息对应的消息所述的消息组,并在同一消息组内唯一确定所述消息。
将假作为所述待存储消息的元信息删除标志能够体现所述元信息及其所对应的消息的状态。
例如,获取到的当前时间的UNIX时间戳为200000000,所述待存储消息所属的消息组的标识为QE1,所述待存储消息的消息标识为1,元信息标识为“META”,则生成的所述待存储消息的元信息键为:QE1#META#200000000-1,其中“-”和“#”为连接符;所述待存储消息的元信息删除标志为:假。
除了将所述待存储消息的元信息键和元信息删除标志作为所述待存储消息的元信息数据外,还可以将所述待存储消息的属性数据,如所述待存储消息产生的时间,对其所进行的操作等也作为所述待存储消息的元信息数据的一部分。这样能够尽可能把所述待存储消息相关的信息保存下来,为对所述待存储消息进行处理提供更多有用的信息。
例如可以将述待存储消息产生的时间,对其所进行的操作作为所述待存储消息的元信息值。
生成所述待存储消息的元信息数据后,利用所述待存储消息所属的消息组的标识,所述消息标识和所述消息的内容等信息,生成所述待存储消息的消息实体数据。
所述消息实体数据包括消息实体键,消息实体值和消息实体删除标志。所述消息实体键作为键值索引能够用于查找消息实体值和消息实体删除标志,其中,所述消息实体删除标志为所述消息实体删除标志。
利用所述待存储消息所属的消息组的标识,所述消息标识以及消息实体标识,生成所述待存储消息的消息实体键。利用所述待存储消息的内容,生成所述待存储消息的消息实体值。生成值为假的所述待存储消息的消息实体删除标志。
利用所述消息实体键能够在同一个消息组内唯一地确定一条消息的内容。消息实体删除标志为假表明消息状态为有效。
例如,对于获取到的待存储消息内容为“用户A确认订单B,订单的信息为……”的消息,其消息所述的消息组的标识为QE1,其消息标识为1,消息实体标识为DATA,则生成的消息实体键为:QE1#DATA#-1,其中“-”和“#”为连接符;生成的消息实体删除标志为:假。
步骤S103,将所述待存储消息的元信息数据以及相应的待存储消息的消息实体数据原子地存储到存储介质。
生成将所述待存储消息的元信息数据以及相应的待存储消息的消息实体数据后,将所述数据存储到预先设定的存储介质,并确保所述数据都被存储,避免仅部分数据被保存,部分数据没有被保存的情况,即原子地存储,避免存储所述数据的操作被其他操作所中断或干扰。当有数据没有被成功存储时,认为存储所述数据的操作不成功,按照系统的设置,需要再次执行相应的存储操作,直至所述数据都被成功地存储到所述存储介质。
至此,所述获取到的待存储消息被作为元信息数据和消息实体数据存储到了存储介质。通过对消息元信息键进行操作处理,能够灵活地被查询到消息的状态:当保存有值为真的消息元信息删除标志的数据时,表明相应的元信息键所对应的消息的状态为已被删除。同样根据未被删除的消息的元信息键所对应的消息实体进行查询,能够得到消息的内容。
以上为本申请的一种存储消息的方法的实施例,该方法能够起到简化消息的管理,提高管理消息的灵活性的作用。进而达到降低管理消息的成本的效果。
本申请第二实施例提供一种读取消息的方法,其流程示意图如图2所述。包括以下步骤:
步骤S201,获取请求者读取指定消息组的消息的请求。
作为消息的消费者,业务系统可以按照预先设定的时间间隔周期性地进行读取本业务系统相关消息组的消息的操作。或者,根据系统的提示或通知信息,读取相应的消息组的消息。
此外,系统调度程序也可以根据系统预先的设定,读取指定消息组的消息并将所述消息提供给相应的业务程序进行后续的处理。
本步骤所述的请求者包括消息的消费者或系统调度程序,当所述请求者产生读取指定消息组的消息的请求时,获取所述请求。
例如,请求者欲读取消息组的标识为QE1的消息组的消息,本步骤获取所述请求,所述请求所对应的消息组的标识为QE1。
当缓存中不存在所述指定消息组的消息的元信息数据时,在进行下一步骤之前,还需要将所述指定消息组的消息的元信息数据从存储介质读入到缓存中,所述将所述指定消息组的消息的元信息数据从存储介质读入到缓存中包括下述步骤:
步骤一,根据所述请求所对应的消息组的标识确定所述消息组的起始消息的元信息键。
首先根据以前保存的所述消息组的起始消息的元信息键的情况,确定所述消息组的本次读取消息操作的起始消息的元信息键。
当存在以前保存的所述消息组的起始消息的元信息键时,将所述以前保存的所述消息组的起始消息的元信息键作为所述消息组的初始化消息的元信息键。
将以前保存的所述消息组的起始消息的元信息键作为本次读取消息操作的消息组的初始化消息的元信息键,能够快速定位到未处理过的消息,避免重复读入消息的相关数据。
例如,对于所述欲读取的消息组的标识为“QE1”,以前所保存的起始消息元信息键为QE1#META#10-1,将其作为本次读取消息操作所对应的消息组的初始化消息的元信息键。
当不存在以前保存的所述消息组的起始消息的元信息键时,将0作为所述消息组的初始化消息的元信息键的生成元信息数据的时间,将0作为所述消息组的初始化消息的元信息键的消息标识,将所述消息组的标识作为所述消息组的起始消息的元信息键的消息组的标识,按照构造元信息键的规则生成所述消息组的初始化消息的元信息键。
采用UNIX时间戳值作为生成元信息数据的时间时,用0作为所述消息组的初始化消息的元信息键的生成元信息数据的时间,能够避免不同的时间系统导致的过期时间的UNIX时间戳值大于当前时间引起的元信息键生成元信息数据时间为负的情况。
例如,欲读取消息组的标识为:QE1,按照构造元信息键的规则生成的本次读取消息操作所对应的消息组的初始化消息的元信息键为:QE1#META#0-0,其中“META”为元信息标识,“#”和“-”为连接符。
确定了本次读取消息操作所对应的消息组的初始化消息的元信息键后,从所述消息组的初始化消息的元信息键开始,读取所述消息组的预先指定数量的消息的元信息数据。
例如,对于所述欲读取的消息组的标识为“QE1”,所述消息组内消息标识为从1开始的每次递增为一的数字,元信息标识为“META”,元信息键各个部分间的连接符分别为“#”和“-”,生成元信息数据的时间最早为UNIX时间戳10开始,当预先设置读取所述欲读取消息组的100个元信息数据时,从初始化消息的元信息键开始,读取到的元信息键分别为:
QE1#META#10-1
QE1#META#20-2
QE1#META#30-3
QE1#META#40-4
QE1#META#50-5
QE1#META#60-6
QE1#META#70-7
QE1#META#80-8
QE1#META#90-9
QE1#META#100-10
QE1#META#110-11
QE1#META#120-12
……
QE1#META#1000-100
读入元信息键后,当所述消息组的初始化消息的元信息键的生成元信息数据的时间加上所述消息组的消息过期时长的和小于当前时间时,将当前时间与过期时长的差值作为所述消息组的起始消息的元信息键的生成元信息数据的时间,将0作为所述消息组的起始消息的元信息键的消息标识,将所述消息组的标识作为所述消息组的起始消息的元信息键的消息组的标识,按照构造元信息键的规则生成所述消息组的起始消息的元信息键。
例如,对于前述读取到的100条消息的元信息键,若当前时间的时间戳减掉所述消息组的消息过期时长的差值为100,则表明下述消息为过期消息,不再有效:
QE1#META#10-1
QE1#META#20-2
QE1#META#30-3
QE1#META#40-4
QE1#META#50-5
QE1#META#60-6
QE1#META#70-7
QE1#META#80-8
QE1#META#90-9
所述消息组标识为QE1的消息组的本次读取操作的起始消息的元信息键为:QE1#META#100-0。
对于不存在不同的系统的时间可能导致构造的生成元信息数据的时间为负的情况,可以直接采用当前时间与过期时间的差值作为所述消息组的起始消息的元信息键的生成元信息数据的时间,将0作为所述消息组的起始消息的元信息键的消息标识,将所述消息组的标识作为所述消息组的起始消息的元信息键的消息组的标识,按照构造元信息键的规则生成所述消息组的起始消息的元信息键。
例如,对于所述欲读取的消息组的标识为“QE1”,当前时间与过期时间的差值为100的情况,按照构造元信息键的规则,生成所述消息组本次读取操作的起始消息的元信息键为QE1#META#100-0。
步骤二,根据当前时间确定所述消息组的截止消息的元信息键。
根据当前时间,查找并获取存储的所述欲读取消息组的消息的元信息数据中消息标识最大的消息标识,将其作为将当前时间之前最新生成的所述消息组的消息的元信息键中的消息标识,进而将其作为所述消息组的本次读取操作的截止消息的元信息键的消息标识,将当前时间作为所述消息组的截止消息的元信息键的生成元信息数据的时间,将所述消息组的标识作为所述消息组的截止消息的元信息键的消息组的标识,按照构造元信息键的规则生成所述消息组的截止消息的元信息键。
根据当前时间和所存储的所述消息组的最大消息标识构造本次读取消息操作的截至消息的元信息键,能够将截止到当前时间前的所有有效消息包括进来,保证读取到目前最完全的消息。
例如,当前时间的UNIX时间戳值为2000,根据当前时间查找到目前存储的所述欲读取消息组的消息的元信息数据中最大的消息标识为1000,所述欲读取消息组的标识为QE1,元信息标识为“META”,元信息键各个部分间的连接符分别为“#”和“-”,按照构造元信息键的规则生成的本次读取消息操作的截止消息的元信息键为:QE1#META#2000-1000。
步骤三,将所述消息组的起始消息的元信息键和所述消息组的截止消息的元信息键范围内的预先指定数量的消息的元信息数据读取到缓存中。
根据前面步骤中得到的本次读取消息操作的起始消息的元信息键和截止消息的元信息键,将指定数量的所述欲读取消息组的消息的元信息数据读入到缓存中以供后续的处理。
例如,本次读取消息操作的所述消息组的起始消息的元信息键为QE1#META#100-10,本次读取消息操作所对应的消息组的截止消息的元信息键为QE1#META#2000-1000,预先指定将所述起始消息与所述截止消息间的100条消息的元信息数据读入缓存,读取到的元信息数据的元信息键为:
QE1#META#100-10
QE1#META#110-11
QE1#META#120-12
……
QE1#META#1100-110
同时将其他相应的元信息数据如与所述元信息键相对应的元信息删除标志以及其他相应的消息属性数据也读入到缓存。
至此,将所述消息组的起始消息的元信息键和所述消息组的截止消息的元信息键范围内所述消息组的相应的预先指定数量的消息的元信息数据读取到了缓存中。
此后还可以将所述消息的元数据中最后一个消息的元数据的消息标识加一后的得到的元信息键作为所述消息组的起始消息的元信息键并存储所述起始消息的元信息键。
该元信息键被存储后能够用于以后将元信息数据读入缓存时,快速过滤掉已读取的数据。
例如对于前面读取到的元信息数据的元信息键为下述数据的情况:
QE1#META#100-10
QE1#META#110-11
QE1#META#120-12
……
QE1#META#1100-110
将元信息键QE1#META#1100-110的消息标识加一,得到的元信息键QE1#META#1100-111作为所述消息组的本此读取消息操作的可存储的起始消息的元信息键,将其存储到存储介质。
步骤S202,根据缓存中所述请求所对应的消息组的第一个消息的元信息数据,生成相应的删除消息的元信息数据和隐藏消息的元信息数据。
当获取到请求者读取指定消息组的消息的请求后,缓存中存在所述指定消息组的消息的元信息数据时,或者当获取到请求者读取指定消息组的消息的请求后,将所述指定消息组的消息的元信息数据从存储接种读入到缓存中后,执行本步骤。
生成本次读取消息操作请求所对应的消息组的删除消息的元信息数据时,将缓存中所述请求所对应的消息组的第一个消息的元信息键作为删除消息的元信息键,将真作为删除消息的元信息删除标志,生成删除消息的元信息数据。
所述第一个消息包括生成元信息数据的时间最早的消息。具体可以通过元信息键的生成元信息数据的时间来判断。即生成元信息数据的时间最早的元信息键所对应的消息为第一个消息。
具体地,通过对缓存中所述请求所对应的消息组的元信息数据中的原信息键进行查找,获得生成元信息数据时间最早的元信息键,将该元信息键作为本次读取消息操作所对应的消息组的删除消息的元信息键,将真作为所述删除消息的元信息删除标志。
利用生成元信息数据时间最早的元信息键和将元信息删除标志置为真能够确保读取到消息组内最早生成的消息,且在读取时设置其状态为已经读取。
例如,对于缓存中存储的所述请求所对应的元信息键为下述数据的情况:
QE1#META#100-10
QE1#META#110-11
QE1#META#120-12
……
QE1#META#1100-110
生成元信息数据时间最早的时间戳为100,即,本次读取消息操作所对应的删除消息的元信息键为QE1#META#100-10,设置所述删除消息的元信息删除标志为真。
生成本次读取消息操作所对应的消息组的隐藏消息的元信息数据时,将缓存中所述请求所对应的消息组的第一个消息的元信息键的生成元信息数据的时间加上所述消息所对应的超时时长后的元信息键作为隐藏消息的元信息键,将假作为隐藏消息的元信息删除标志,生成隐藏消息的元信息数据。
所述第一个消息包括生成元信息数据的时间最早的消息。具体可以通过元信息键的生成元信息数据的时间来判断。即生成元信息数据的时间最早的元信息键所对应的消息为第一个消息。
所述消息的超时时长的作用在于,当所述消息被读取后,在所述时长内若没有被确认已经读取可以删除,则所述消息的状态恢复为未被读取,继续有效。
具体地,通过对缓存中所述请求所对应的消息组的元信息数据中的元信息键进行查找,获得生成元信息数据时间最早的元信息键,将所述元信息键的生成元信息数据的时间加上所述消息的超时时长后的时间作为本次读取消息操作所对应的隐藏消息的元信息键的生成元信息数据的时间,将所述生成元信息数据时间最早的元信息键的其他部分作为所述隐藏消息的元信息键的其他部分。生成本次读取消息操作相应的所述请求所对应的消息组的隐藏消息的元信息键,将假作为所述隐藏消息的元信息删除标志。
将生成元信息数据时间最早的元信息键的生成元信息数据的时间加上所述消息的超时时长生成隐藏消息的元信息键和将所述隐藏消息的元信息删除标志设置为假能够起到若所述消息被读取后,超时时长内没有被确认已经读取可以删除,则所述消息的状态恢复为未被读取,继续有效的效果。
例如,对于缓存中存储的所述请求所对应的元信息键为下述数据的情况:
QE1#META#100-10
QE1#META#110-11
QE1#META#120-12
……
QE1#META#1100-110
若元信息键QE1#META#100-10所对应的消息的超时时长为100,则生成本次读取消息操作相应的所述请求所对应的消息组的隐藏消息的元信息键为QE1#META#200-10,设置所述隐藏消息的元信息删除标志为假。
至此,生成了本次读取消息操作相应的所述请求所对应的消息组的删除消息和隐藏消息的元信息数据如下:
删除消息的元信息键:QE1#META#100-10,删除消息的元信息删除标志:真;
隐藏消息的元信息键:QE1#META#200-10,隐藏消息的元信息删除标志:假。
步骤S203,将所述删除消息的元信息数据和所述隐藏消息的元信息数据原子地存储到存储介质。
生成本次读取消息操作请求所对应的消息组的删除消息的元信息数据和隐藏消息的元信息数据后,将所述删除消息和隐藏消息的元信息数据储到预先设定的存储介质,并确保所述数据都被存储,避免仅部分数据被保存,部分数据没有被保存的情况,即原子地存储,原子地存储是指当有数据没有被成功存储时,认为存储所述数据的操作不成功,按照系统的设置,需要再次执行相应的存储操作,直至所述数据都被成功地存储到所述存储介质。从而避免存储所述数据的操作被其他操作所中断或干扰。
步骤S204,将所述请求所对应的消息组的第一个消息的相关数据输出。
成功存储所述生成本次读取消息操作相应的所述请求所对应的消息组的删除消息和隐藏消息的元信息数据后,根据缓存中所述请求所对应的消息组的消息的元信息数据中第一个消息的元信息键,从存储介质获取相应的消息实体值。
与前面步骤中对于第一个消息的说明相同,所述第一个消息包括生成元信息数据的时间最早的消息。具体可以通过元信息键的生成元信息数据的时间来判断。即生成元信息数据的时间最早的元信息键所对应的消息为第一个消息。
具体地,利用所述请求所对应的消息组的标识和缓存中的生成元信息数据时间最早的元信息键的消息标识,按照构造消息实体键的规则构造消息实体键,根据所述消息实体键,查询获得相应的消息实体值,即消息的内容。将所述消息的内容以及所述消息的其他属性数据一并输出。
例如对于缓存中生成元信息数据时间最早的元信息键为QE1#META#100-10的情况,构造的消息实体键为QE1#DATA#100。根据所述消息实体键,查询获得对应的消息实体值,得到消息的内容,将所述消息的内容以及所述消息的其他属性数据一并输出。
当所述消息的其他属性数据来源不同,如缓存时,可以将所述消息的内容先读入缓存,再从缓存中将所述消息的内容以及所述消息的其他属性数据一起输出给相应的读取消息请求的请求者。
在将所述请求所对应的消息组的第一个消息的相关数据输出后,还可以执行下述步骤:
获取所述删除所读取的所述消息的请求。当所述消息被成功读取需进行删除时,所述消息的消费者或系统调度程序会产生删除所述被读取的消息的请求。
获取到删除所读取的所述消息的请求后,当所述请求所对应的消息的元信息键的生成元信息数据的时间加上所述消息的超时时长后大于(晚于)当前时间时,将所述隐藏消息的元信息数据的元信息键作为删除隐藏消息的元信息键,将真作为删除隐藏消息的元信息删除标志,生成删除隐藏消息的元信息数据。
所述请求所对应的消息的元信息键的生成元信息数据的时间加上所述消息的超时时长后大于(晚于)当前时间时,表明所述消息被读取,等待删除,否则表明所述消息虽然被读取。但在超时时长内没有被确认删除,消息的状态已经重新成为有效,不能执行删除操作。
例如,获取到删除消息组的标识为QE1,消息标识为100的消息的请求,采用UNIX时间戳形式的所述消息的元信息键的生成元信息数据的时间为100,该消息的超时时长为100,当前时间的UNIX时间戳值为150,所述消息的元信息键的生成元信息数据的时间100加上该消息的超时时长100的和为200,大于当前时间UNIX时间戳的值150,按照生成元信息键的规则生成删除隐藏消息的元信息数据,包括元信息键:QE1#META#200-10,元信息删除标志:真。
将上述删除隐藏消息的元信息数据存储到存储介质。
综上所述,可知读取消息的大致过程如图3所示,,对于写入到存储介质的消息数据,当缓存中保存有欲读取消息的元信息数据时,从缓存中的元信息数据中确定欲读取消息租的第一条有效的消息实体键,当缓存中不存在欲读取消息的元信息数据时,先将欲读取消息的元信息数据从存储介质读入到缓存中,再从缓存中的元信息数据中确定欲读取消息组的第一条有效的消息实体键。
根据所述消息实体键从存储介质获取相应的消息的内容和相关的属性数据,将所述消息的内容和相关的属性数据一并输出。
当获取到删除消息的请求时,构造删除相应消息的元信息数据,将所述元信息数据存储到存储介质,实现对所述消息的删除操作。
相应的,本申请的第三实施例提供一种存储消息的装置,其结构框图如图4所示,该装置包括以下单元:获取单元U301,生成单元U302和存储单元U303。
所述获取单元U301,用于获取存储指定的待存储消息的请求。
所述生成单元U302,用于根据所述请求所对应的待存储消息的相关信息生成所述待存储消息的含有删除标志的元信息数据和消息实体数据。
所述生成单元U302,可以包括消息标识生成子单元,元信息数据生成子单元,消息实体数据生成子单元。
所述消息标识生成子单元,用于为所述待存储消息生成消息标识。
所述元信息数据生成子单元,用于根据所述请求所对应的待存储消息的相关信息,生成包括元信息键和元信息删除标志的所述待存储消息的元信息数据。
所述元信息数据生成子单元可以包括:元信息键生成子单元和元信息删除标志生成子单元。
所述元信息键生成子单元,用于将当前时间作为生成元信息数据的时间,生成包括所述待存储消息所属的消息组的标识,生成元信息数据的时间,所述消息标识和元信息标识的所述待存储消息的元信息键。
所述元信息删除标志生成子单元,用于生成值为假的所述待存储消息的元信息删除标志。
所述消息实体数据生成子单元,用于根据所述请求所对应的待存储消息的相关信息,生成包括消息实体键,消息实体值和消息实体删除标志的所述待存储消息的消息实体数据。
所述消息实体数据生成子单元可以包括:消息实体键生成子单元,消息实体值生成子单元和消息实体删除标志生成子单元。
所述消息实体键生成子单元,用于生成包括所述待存储消息所属的消息组的标识,所述消息标识和消息实体标识的所述待存储消息的消息实体键。
所述消息实体值生成子单元,用于生成包括所述待存储消息的内容的所述待存储消息的消息实体值。
所述消息实体删除标志生成子单元,用于生成值为假的所述待存储消息的消息实体删除标志。
所述存储单元U303,用于将所述待存储消息的元信息数据以及相应的待存储消息的消息实体数据原子地存储到存储介质。
本申请第四实施例提供一种读取消息的装置,其结构示意图如图5所示。该装置包括以下单元:获取单元U401,相应元信息数据生成单元U402,存储单元U403和输出单元U404。
所述获取单元U401,用于获取请求者读取指定消息组的消息的请求。
所述相应元信息数据生成单元U402,用于根据缓存中所述请求所对应的消息组的第一个消息的元信息数据,生成相应的删除消息的元信息数据和隐藏消息的元信息数据。
所述相应元信息数据生成单元可以包括:删除元信息数据生成子单元和隐藏元信息数据生成子单元。
所述删除元信息数据生成子单元,用于根据所述第一个消息的元信息数据生成删除消息的元信息数据。
具体地,用于将所述第一个消息的的元信息键作为删除消息的元信息键,设置所述删除消息的元信息删除标志为真,生成删除消息的元信息数据。
所述隐藏元信息数据生成子单元,用于根据所述第一个消息和其所对应的超时时长生成隐藏消息的元信息数据。
具体地,用于将所述第一个消息的元信息键的生成元信息数据的时间加上所述消息所对应的超时时长后得到的元信息键作为隐藏消息的元信息键,设置隐藏消息的元信息删除标志为假,生成隐藏消息的元信息数据。
所述存储单元U403,用于将所述删除消息的元信息数据和所述隐藏消息的元信息数据原子地存储到存储介质。
所述输出单元U404,用于将所述请求所对应的消息组的第一个消息的相关数据输出。
所述输出单元可以包括:读入缓存子单元和输出子单元。
所述读入缓存子单元,用于根据所述第一个消息的元信息数据,将相应的第一个消息的内容读入缓存。
所述输出子单元,用于将缓存中所述消息的内容及所述消息的属性数据输出。
除了上述各个单元,该装置还可以包括以下单元:获取删除请求单元,删除隐藏消息元信息数据单元和存储删除隐藏消息单元。
所述获取删除请求单元,用于获取删除所读取的所述消息的请求。
所述删除隐藏消息元信息数据单元,用于当所述请求所对应的消息的元信息键的生成元信息数据与当前时间的差值小于所述消息的超时时长时,将所述隐藏消息的元信息键作为删除隐藏消息的元信息键,设置所述删除隐藏消息的元信息删除标志为真,生成删除隐藏消息的元信息数据。
所述存储删除隐藏消息单元,用于存储所述删除隐藏消息的元信息数据。
该装置还可以包括:起始消息元信息键确定单元,截止消息元信息键确定单元和元信息数据读入缓存单元。
所述起始消息元信息键确定单元,用于根据所述请求所对应的消息组的标识确定所述消息组的起始消息的元信息键。
所述起始消息元信息键确定单元包括:初始化子单元,元信息数据读取子单元和起始消息的元信息键确定子单元。
所述初始化子单元,用于根据是否存在被保存的所述消息组的起始消息的元信息键的情况,确定所述消息组的初始化消息的元信息键。
所述初始化子单元可以具体用于:当存在以前保存的所述消息组的起始消息的元信息键时,将所述以前保存的所述消息组的起始消息的元信息键作为所述消息组的初始化消息的元信息键。
所述初始化子单元还可以具体用于:当不存在以前保存的所述消息组的起始消息的元信息键时,将0作为所述消息组的初始化消息的元信息键的生成元信息数据的时间,将0作为所述消息组的初始化消息的元信息键的消息标识,将所述消息组的标识作为所述消息组的起始消息的元信息键的消息组的标识,按照构造元信息键的规则生成所述消息组的初始化消息的元信息键。
所述元信息数据读取子单元,用于从所述消息组的初始化消息的元信息键开始,读取所述消息组的预先指定数量的消息的元信息数据;
所述起始消息的元信息键确定子单元,当所述消息组的初始化消息的元信息键的生成元信息数据的时间加上所述消息组的消息过期时长的和小于当前时间时,将当前时间与过期时长的差值作为所述消息组的起始消息的元信息键的生成元信息数据的时间,将0作为所述消息组的起始消息的元信息键的消息标识,将所述消息组的标识作为所述消息组的起始消息的元信息键的消息组的标识,按照构造元信息键的规则生成所述消息组的起始消息的元信息键。
所述起始消息元信息键确定单元可以具体用于:将当前时间与过期时长的差值作为所述消息组的起始消息的元信息键的生成元信息数据的时间,将0作为所述消息组的起始消息的元信息键的消息标识,将所述消息组的标识作为所述消息组的起始消息的元信息键的消息组的标识,按照构造元信息键的规则生成所述消息组的起始消息的元信息键。
所述截止消息元信息键确定单元,用于根据当前时间确定所述消息组的截止消息的元信息键。
所述截止消息元信息键确定单元可以具体用于:将当前时间之前最新生成的所述消息组的消息的元信息键中的消息标识作为所述消息组的截止消息的元信息键的消息标识,将当前时间作为所述消息组的截止消息的元信息键的生成元信息数据的时间,将所述消息组的标识作为所述消息组的截止消息的元信息键的消息组的标识,按照构造元信息键的规则生成所述消息组的截止消息的元信息键。
所述元信息数据读入缓存单元,用于将所述消息组的起始消息的元信息键和所述消息组的截止消息的元信息键范围内的预先指定数量的消息的元信息数据读取到缓存中。
该装置还可以包括以下单元:更新单元和存储更新单元。
所述更新单元,用于将所述消息的元数据中最后一个消息的元数据的消息标识加一后的得到的元信息键作为所述消息组的起始消息的元信息键;
所述存储更新单元,用于存储所述起始消息的元信息键。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
Claims (20)
1.一种存储消息的方法,其特征在于,包括:
获取存储指定的待存储消息的请求;
根据所述请求所对应的待存储消息的相关信息,生成所述待存储消息的含有第一删除标志的元信息数据和含有第二删除标志的消息实体数据;
将所述待存储消息的元信息数据以及相应的待存储消息的消息实体数据原子地存储到存储介质。
2.根据权利要求1所述的存储消息的方法,其特征在于,根据所述请求所对应的待存储消息的相关信息,生成所述待存储消息的含有第一删除标志的元信息数据和含有第二删除标志消息实体数据包括:
为所述待存储消息生成消息标识;
根据所述请求所对应的待存储消息的相关信息,生成包括元信息键和元信息删除标志的所述待存储消息的元信息数据;
根据所述请求所对应的待存储消息的相关信息,生成包括消息实体键,消息实体值和消息实体删除标志的所述待存储消息的消息实体数据;
其中,所述元信息删除标志为所述第一删除标志,所述消息实体删除标志为所述消息实体删除标志。
3.根据权利要求2所述的存储消息的方法,其特征在于,所述根据所述请求所对应的待存储消息的相关信息,生成包括元信息键和元信息删除标志的所述待存储消息的元信息数据包括:
将当前时间作为生成元信息数据的时间,生成包括所述待存储消息所属的消息组的标识,生成元信息数据的时间,所述消息标识和元信息标识的所述待存储消息的元信息键;
生成值为假的所述待存储消息的元信息删除标志。
4.根据权利要求2所述的存储消息的方法,其特征在于,所述根据所述请求所对应的待存储消息的相关信息,生成包括消息实体键,消息实体值和消息实体删除标志的所述待存储消息的消息实体数据包括:
生成包括所述待存储消息所属的消息组的标识,所述消息标识和消息实体标识的所述待存储消息的消息实体键;
生成包括所述待存储消息的内容的所述待存储消息的消息实体值;
生成值为假的所述待存储消息的消息实体删除标志。
5.根据权利要求2所述的存储消息的方法,其特征在于,所述消息标识为递增编号的数字。
6.一种读取消息的方法,其特征在于,包括以下步骤:
获取请求者读取指定消息组的消息的请求;
根据缓存中所述请求所对应的消息组的第一个消息的元信息数据,生成相应的删除消息的元信息数据和隐藏消息的元信息数据;
将所述删除消息的元信息数据和所述隐藏消息的元信息数据原子地存储到存储介质;
将所述请求所对应的消息组的第一个消息的相关数据输出;
其中,所述第一个消息包括生成元信息数据的时间最早的消息。
7.根据权利要求6所述的读取消息的方法,其特征在于,所述根据所述请求所对应的消息组的第一个消息的元信息数据,生成相应的删除消息的元信息数据和隐藏消息的元信息数据包括:
根据所述第一个消息的元信息数据生成删除消息的元信息数据;
根据所述第一个消息和其所对应的超时时长生成隐藏消息的元信息数据。
8.根据权利要求7所述的读取消息的方法,其特征在于,所述根据所述第一个消息的元信息数据生成删除消息的元信息数据包括:
将所述第一个消息的元信息键作为删除消息的元信息键,设置所述删除消息的元信息删除标志为真,生成删除消息的元信息数据。
9.根据权利要求7所述的读取消息的方法,其特征在于,所述根据所述第一个消息和其所对应的超时时长生成隐藏消息的元信息数据包括:
将所述第一个消息的元信息键的生成元信息数据的时间加上所述消息所对应的超时时长后得到的元信息键作为隐藏消息的元信息键,设置隐藏消息的元信息删除标志为假,生成隐藏消息的元信息数据。
10.根据权利要求6所述的读取消息的方法,其特征在于,所述将所述请求所对应的消息组的第一个消息的相关数据输出包括:
根据所述第一个消息的元信息数据,将相应的第一个消息的内容读入缓存;
将缓存中所述消息的内容及所述消息的属性数据输出。
11.根据权利要求6所述的读取消息的方法,其特征在于,所述将所述请求所对应的消息组的第一个消息的相关数据输出的步骤后还包括:
获取删除所读取的所述消息的请求;
当所述请求所对应的消息的元信息键的生成元信息数据与当前时间的差值小于所述消息的超时时长时,将所述隐藏消息的元信息键作为删除隐藏消息的元信息键,设置所述删除隐藏消息的元信息删除标志为真,生成删除隐藏消息的元信息数据;
存储所述删除隐藏消息的元信息数据。
12.根据权利要求6所述的读取消息的方法,其特征在于,所述根据缓存中所述请求所对应的消息组的第一个消息的元信息数据,生成相应的删除消息的元信息数据和隐藏消息的元信息数据的步骤前,还包括:
根据所述请求所对应的消息组的标识确定所述消息组的起始消息的元信息键;
根据当前时间确定所述消息组的截止消息的元信息键;
将所述消息组的起始消息的元信息键和所述消息组的截止消息的元信息键范围内的预先指定数量的消息的元信息数据读取到缓存中。
13.根据权利要求12所述的读取消息的方法,其特征在于,所述根据所述消息组的标识确定所述消息组的起始消息的元信息键包括:
根据是否存在被保存的所述消息组的起始消息的元信息键的情况,确定所述消息组的初始化消息的元信息键;
从所述消息组的初始化消息的元信息键开始,读取所述消息组的预先指定数量的消息的元信息数据;
当所述消息组的初始化消息的元信息键的生成元信息数据的时间加上所述消息组的消息过期时长的和小于当前时间时,将当前时间与过期时长的差值作为所述消息组的起始消息的元信息键的生成元信息数据的时间,将0作为所述消息组的起始消息的元信息键的消息标识,将所述消息组的标识作为所述消息组的起始消息的元信息键的消息组的标识,按照构造元信息键的规则生成所述消息组的起始消息的元信息键。
14.根据权利要求13所述的读取消息的方法,其特征在于,所述根据是否存在被保存的所述消息组的起始消息的元信息键的情况,确定所述消息组的初始化消息的元信息键包括:
当存在以前保存的所述消息组的起始消息的元信息键时,将所述以前保存的所述消息组的起始消息的元信息键作为所述消息组的初始化消息的元信息键。
15.根据权利要求13所述的读取消息的方法,其特征在于,所述根据是否存在被保存的所述消息组的起始消息的元信息键的情况,确定所述消息组的初始化消息的元信息键包括:
当不存在以前保存的所述消息组的起始消息的元信息键时,将0作为所述消息组的初始化消息的元信息键的生成元信息数据的时间,将0作为所述消息组的初始化消息的元信息键的消息标识,将所述消息组的标识作为所述消息组的起始消息的元信息键的消息组的标识,按照构造元信息键的规则生成所述消息组的初始化消息的元信息键。
16.根据权利要求12所述的读取消息的方法,其特征在于,所述根据所述消息组的标识确定所述消息组的起始消息的元信息键包括:
将当前时间与过期时长的差值作为所述消息组的起始消息的元信息键的生成元信息数据的时间,将0作为所述消息组的起始消息的元信息键的消息标识,将所述消息组的标识作为所述消息组的起始消息的元信息键的消息组的标识,按照构造元信息键的规则生成所述消息组的起始消息的元信息键。
17.根据权利要求12所述的读取消息的方法,其特征在于,所述根据当前时间确定所述消息组的截止消息的元信息键包括:
将当前时间之前最新生成的所述消息组的消息的元信息键中的消息标识作为所述消息组的截止消息的元信息键的消息标识,将当前时间作为所述消息组的截止消息的元信息键的生成元信息数据的时间,将所述消息组的标识作为所述消息组的截止消息的元信息键的消息组的标识,按照构造元信息键的规则生成所述消息组的截止消息的元信息键。
18.根据权利要求12所述的读取消息的方法,其特征在于,所述将所述消息组的起始消息的元信息键和所述消息组的截止消息的元信息键范围内的预先指定数量的消息的元信息数据读取到缓存中的步骤后,还包括:
将所述消息的元数据中最后一个消息的元信息键的消息标识加一后的得到的元信息键作为所述消息组的起始消息的元信息键;
存储所述起始消息的元信息键。
19.一种存储消息的装置,其特征在于,包括:
获取单元,用于获取存储指定的待存储消息的请求;
生成单元,用于根据所述请求所对应的待存储消息的相关信息生成所述待存储消息的含有删除标志的元信息数据和消息实体数据;
存储单元,用于将所述待存储消息的元信息数据以及相应的待存储消息的消息实体数据原子地存储到存储介质。
20.一种读取消息的装置,其特征在于,包括:
获取单元,用于获取请求者读取指定消息组的消息的请求;
相应元信息数据生成单元,用于根据缓存中所述请求所对应的消息组的第一个消息的元信息数据,生成相应的删除消息的元信息数据和隐藏消息的元信息数据;
存储单元,用于将所述删除消息的元信息数据和所述隐藏消息的元信息数据原子地存储到存储介质;
输出单元,用于将所述请求所对应的消息组的第一个消息的相关数据输出。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710889500.9A CN109558069B (zh) | 2017-09-27 | 2017-09-27 | 一种存储消息的方法和装置与一种读取消息的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710889500.9A CN109558069B (zh) | 2017-09-27 | 2017-09-27 | 一种存储消息的方法和装置与一种读取消息的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109558069A CN109558069A (zh) | 2019-04-02 |
CN109558069B true CN109558069B (zh) | 2022-06-10 |
Family
ID=65863916
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710889500.9A Active CN109558069B (zh) | 2017-09-27 | 2017-09-27 | 一种存储消息的方法和装置与一种读取消息的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109558069B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20030039034A (ko) * | 2001-11-09 | 2003-05-17 | 엘지전자 주식회사 | 이동통신 단말기의 메시지 관리 방법 |
KR20050033879A (ko) * | 2003-10-07 | 2005-04-14 | 삼성전자주식회사 | 이동통신단말기에서 수신 메시지 관리 방법 |
CN101299829A (zh) * | 2007-04-30 | 2008-11-05 | 华为技术有限公司 | 一种实现统一存储中管理媒体内容的方法和消息系统 |
US8782135B2 (en) * | 2007-05-18 | 2014-07-15 | Radioflag, Inc. | Focused listening and advertising guide system and method |
CN105144088A (zh) * | 2012-12-13 | 2015-12-09 | 微软技术许可有限责任公司 | 元数据与源代码的关联以及基于其的应用和服务 |
CN105610926A (zh) * | 2015-12-22 | 2016-05-25 | 广州唯品会信息科技有限公司 | 消息传递方法、系统和消息中间件系统 |
CN107040454A (zh) * | 2017-03-20 | 2017-08-11 | 微梦创科网络科技(中国)有限公司 | 一种大数据量快速更新场景下的未读消息提醒方法及装置 |
-
2017
- 2017-09-27 CN CN201710889500.9A patent/CN109558069B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20030039034A (ko) * | 2001-11-09 | 2003-05-17 | 엘지전자 주식회사 | 이동통신 단말기의 메시지 관리 방법 |
KR20050033879A (ko) * | 2003-10-07 | 2005-04-14 | 삼성전자주식회사 | 이동통신단말기에서 수신 메시지 관리 방법 |
CN101299829A (zh) * | 2007-04-30 | 2008-11-05 | 华为技术有限公司 | 一种实现统一存储中管理媒体内容的方法和消息系统 |
US8782135B2 (en) * | 2007-05-18 | 2014-07-15 | Radioflag, Inc. | Focused listening and advertising guide system and method |
CN105144088A (zh) * | 2012-12-13 | 2015-12-09 | 微软技术许可有限责任公司 | 元数据与源代码的关联以及基于其的应用和服务 |
CN105610926A (zh) * | 2015-12-22 | 2016-05-25 | 广州唯品会信息科技有限公司 | 消息传递方法、系统和消息中间件系统 |
CN107040454A (zh) * | 2017-03-20 | 2017-08-11 | 微梦创科网络科技(中国)有限公司 | 一种大数据量快速更新场景下的未读消息提醒方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN109558069A (zh) | 2019-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8924365B2 (en) | System and method for range search over distributive storage systems | |
CN107515874B (zh) | 一种分布式非关系型数据库中同步增量数据的方法与设备 | |
CN110162570B (zh) | 区块链数据的分次获取方法和装置 | |
JPH0628231A (ja) | コンピュータシステム内にエントリするデータベースを記憶し且つ維持する方法及びデータベース管理システム | |
CN111414424B (zh) | 一种配置数据自动同步redis的方法、系统、介质及设备 | |
CN105373541A (zh) | 数据库的数据操作请求的处理方法和系统 | |
CN107291768B (zh) | 一种索引建立的方法及装置 | |
EP3438845A1 (en) | Data updating method and device for a distributed database system | |
JP2021518021A (ja) | データ処理方法、装置及びコンピュータ読み取り可能な記憶媒体 | |
US20180121531A1 (en) | Data Updating Method, Device, and Related System | |
CN115599807A (zh) | 一种数据存取方法、装置、应用服务器及存储介质 | |
CN112463880B (zh) | 一种区块链数据存储方法及相关装置 | |
CN113094442A (zh) | 全量数据同步方法、装置、设备和介质 | |
CN109558069B (zh) | 一种存储消息的方法和装置与一种读取消息的方法和装置 | |
KR20120082176A (ko) | 데이터베이스 관리 시스템의 데이터 처리 방법 및 시스템 | |
CN111580972A (zh) | 一种虚拟资源处理方法及装置 | |
CN112187889A (zh) | 一种数据同步方法、装置及存储介质 | |
WO2023083237A1 (zh) | 图数据的管理 | |
CN116303789A (zh) | 多分片多副本数据库并行同步方法、装置及可读介质 | |
CN116049306A (zh) | 数据同步方法、装置、电子设备以及可读存储介质 | |
CN112948389B (zh) | 基于md5的数据库表数据比对方法及设备 | |
CN113032408B (zh) | 数据处理方法、系统及设备 | |
CN111435342B (zh) | 海报的更新方法、更新系统以及管理系统 | |
CN114153857A (zh) | 数据同步方法、数据同步装置和计算机可读存储介质 | |
CN112949797A (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 |