掌桥专利:专业的专利平台
掌桥专利
首页

一种热点数据的处理方法、装置、计算机设备及存储介质

文献发布时间:2023-06-19 18:46:07


一种热点数据的处理方法、装置、计算机设备及存储介质

技术领域

本申请涉及数据处理技术领域,尤其涉及一种热点数据的处理方法、装置、计算机设备及存储介质。

背景技术

随着互联网的快速发展及互联网使用人数的增加,用户的访问量级及数据量非常大,尤其是热点数据的查询访问。服务方通常采用数据库对数据进行存储,存储的数据写入磁盘中,因此,数据库的查询数据过程涉及连接、验证、解析、执行等过程,查询数据是通过读取磁盘IO实现的。热点数据是指被大请求量访问的数据,访问当下热点请求的情况越来越多见,例如秒杀活动等。当请求量大的时候,直接从磁盘读取数据,会造成磁盘访问压力过大,导致磁盘崩溃,数据库压力大。此外,从磁盘中读取数据,响应速度较慢。

通常采取的做法是将数据库中的数据写入缓存中,当接收到数据查询请求时从缓存中查找数据。但是,传统的缓存和数据库数据会存在不一致的情况,热点数据不能够及时同步更新、灵活性比较差,引发脏数据问题,此外,如果缓存为空,热点请求还是会瞬间进入数据库,导致数据库资源瓶颈。

发明内容

本申请实施例的目的在于提出一种热点数据的处理方法、装置、计算机设备及存储介质,以解决相关技术中热点数据访问造成数据库压力大,以及热点数据不能够及时同步更新、灵活性比较差,引发脏数据的技术问题。

为了解决上述技术问题,本申请实施例提供一种热点数据的处理方法,采用了如下所述的技术方案:

配置不同优先级的多级缓存,分别为一级缓存、二级缓存和三级缓存;

接收请求方对热点数据的查询请求,从所述查询请求中获取数据标识;

根据所述数据标识,按照优先级依次查询所述一级缓存、所述二级缓存和所述三级缓存,直到查询到所述数据标识对应的热点数据,并将所述热点数据返回至所述请求方;

定时从消息队列中获取更新缓存延时消息,根据所述更新缓存延时消息解析出更新数据标识;

基于所述更新数据标识从所述三级缓存中获得对应的更新数据,将所述更新数据更新至所述一级缓存和所述二级缓存中。

进一步的,所述根据所述数据标识,按照优先级依次查询所述一级缓存、所述二级缓存和所述三级缓存,直到查询到所述数据标识对应的热点数据,并将所述热点数据返回至所述请求方的步骤包括:

根据所述数据标识在所述一级缓存中进行查询;

若查询到与所述数据标识对应的热点数据,则将所述热点数据返回至所述请求方;

若没有查询到与所述数据标识对应的热点数据,则根据所述数据标识在所述二级缓存中进行查询;

若在所述二级缓存中查询到与所述数据标识对应的热点数据,则将所述热点数据返回至所述请求方;

若无法查询到与所述数据标识对应的热点数据,则根据所述数据标识在所述三级缓存中进行查询;

若查询到所述三级缓存中存在与所述数据标识对应的热点数据,则将所述热点数据返回至所述请求方;

若在所述三级缓存中无法查询到与所述数据标识对应的热点数据,则结束查询流程。

进一步的,所述查询到与所述数据标识对应的热点数据,则将所述热点数据返回至所述请求方的步骤包括:

计算所述数据标识的标识哈希值;

根据所述标识哈希值确定所述热点数据在一级缓存中的缓存位置;

从所述缓存位置中取出所述热点数据发送给所述请求方。

进一步的,所述根据所述数据标识在所述三级缓存中进行查询的步骤包括:

基于分布式锁机制对所述数据标识进行加锁;

当加锁成功时,根据所述数据标识在所述三级缓存中进行查询;

当加锁未成功时,则等待锁释放。

进一步的,在所述若在所述二级缓存中查询到与所述数据标识对应的热点数据,则将所述热点数据返回至所述请求方的步骤之后还包括:

将所述数据标识以及所述热点数据更新至所述一级缓存;及

在所述查询到所述三级缓存中存在与所述数据标识对应的热点数据,则将所述热点数据返回至所述请求方的步骤之后还包括:

将所述数据标识以及所述热点数据更新至所述一级缓存和所述二级缓存。

进一步的,在所述定时从消息队列中获取更新缓存延时消息的步骤之前还包括:

检测到所述三级缓存中存在更新数据,将所述更新数据封装成更新缓存延时消息;

按照预设延时机制对所述更新缓存延时消息进行延时处理后,将延时后的所述更新缓存延时消息存储至预设消息中间件的消息队列中。

进一步的,所述将所述更新数据更新至所述一级缓存和所述二级缓存中的步骤包括:

对所述更新数据标识进行哈希计算,得到更新标识哈希值;

对所述更新标识哈希值进行取模运算,得到位置信息;

根据所述位置信息将更新数据分别存储至一级缓存和二级缓存的相应位置。

为了解决上述技术问题,本申请实施例还提供一种热点数据的处理装置,采用了如下所述的技术方案:

配置模块,用于配置不同优先级的多级缓存,分别为一级缓存、二级缓存和三级缓存;

获取模块,用于接收请求方对热点数据的查询请求,从所述查询请求中获取数据标识;

查询模块,用于根据所述数据标识,按照优先级依次查询所述一级缓存、所述二级缓存和所述三级缓存,直到查询到所述数据标识对应的热点数据,并将所述热点数据返回至所述请求方;

定时获取模块,用于定时从消息队列中获取更新缓存延时消息,根据所述更新缓存延时消息解析出更新数据标识;

更新模块,用于基于所述更新数据标识从所述三级缓存中获得对应的更新数据,将所述更新数据更新至所述一级缓存和所述二级缓存中。

为了解决上述技术问题,本申请实施例还提供一种计算机设备,采用了如下所述的技术方案:

该计算机设备包括存储器和处理器,所述存储器中存储有计算机可读指令,所述处理器执行所述计算机可读指令时实现如上所述的热点数据的处理方法的步骤。

为了解决上述技术问题,本申请实施例还提供一种计算机可读存储介质,采用了如下所述的技术方案:

所述计算机可读存储介质上存储有计算机可读指令,所述计算机可读指令被处理器执行时实现如上所述的热点数据的处理方法的步骤。

与现有技术相比,本申请实施例主要有以下有益效果:

本申请通过配置不同优先级的多级缓存,分别为一级缓存、二级缓存和三级缓存;接收请求方对热点数据的查询请求,从查询请求中获取数据标识;根据数据标识,按照优先级依次查询一级缓存、二级缓存和三级缓存,直到查询到数据标识对应的热点数据,并将热点数据返回至请求方;定时从消息队列中获取更新缓存延时消息,根据更新缓存延时消息解析出更新数据标识;基于更新数据标识从三级缓存中获得对应的更新数据,将更新数据更新至一级缓存和二级缓存中;本申请通过配置不同优先级的多级缓存,按照优先级依次查询,查询到热点数据即将热点数据返回给请求方,可以极大缓解数据库压力,同时,利用消息队列按照预设时间间隔更新不同级别缓存中的数据,实现多级缓存中数据的一致性,提高数据的灵活性,从而降低磁盘开销,提高数据响应速率。

附图说明

为了更清楚地说明本申请中的方案,下面将对本申请实施例描述中所需要使用的附图作一个简单介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请可以应用于其中的示例性系统架构图;

图2是根据本申请的热点数据的处理方法的一个实施例的流程图;

图3是根据本申请的热点数据的处理装置的一个实施例的结构示意图;

图4是根据本申请的计算机设备的一个实施例的结构示意图。

具体实施方式

除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同;本文中在申请的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本申请;本申请的说明书和权利要求书及上述附图说明中的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。本申请的说明书和权利要求书或上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。

在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。

为了使本技术领域的人员更好地理解本申请方案,下面将结合附图,对本申请实施例中的技术方案进行清楚、完整地描述。

本申请提供了一种热点数据的处理方法,可以应用于如图1所示的系统架构100中,系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。

用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如网页浏览器应用、购物类应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。

终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、电子书阅读器、MP3播放器(Moving Picture ExpertsGroup Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving PictureExperts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、膝上型便携计算机和台式计算机等等。

服务器105可以是提供各种服务的服务器,例如对终端设备101、102、103上显示的页面提供支持的后台服务器。

需要说明的是,本申请实施例所提供的热点数据的处理方法一般由服务器/终端设备执行,相应地,热点数据的处理装置一般设置于服务器/终端设备中。

应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。

继续参考图2,示出了根据本申请的热点数据的处理方法的一个实施例的流程图,包括以下步骤:

步骤S201,配置不同优先级的多级缓存,分别为一级缓存、二级缓存和三级缓存。

通常,数据是存储在数据库里的,但数据库的查询数据过程涉及连接、验证、解析、执行等过程,查询数据是通过读取磁盘IO(Input和Output的缩写)实现的,当请求量大的时候,磁盘IO会出现瓶颈,因此不能仅靠数据库承载流量。

在本实施例中,通过配置多级缓存来缓解数据库的压力。具体的,配置不同优先级的多级缓存,多级缓存划分为一级缓存、二级缓存和三级缓存。

其中,一级缓存为本地内存,本质上是一个HashMap,数据以Key-Value结构进行存储,内存数据是以JVM(Java Virtual Machine,Java虚拟机)承载,放在JVM的堆内存中。

二级缓存通常采用Redis(Remote Dictionary Server,远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。Redis的epoll线程模型和纯内存结构使它的性能很优秀,但应用连接Redis有网络IO开销,因此Redis比本地内存性能要稍差一些,但Redis比数据库性能好很多,因此可以用作二级缓存。

三级缓存为数据库,数据库可以存储大量数据,同时保持数据的一致性和完整性,但是有网络IO和磁盘IO开销,性能比较慢,故用作三级缓存。

在本实施例中,多级缓存的优先级为:一级缓存>二级缓存>三级缓存。也就是说,热点数据查询时,最先查内存,内存没有查Redis,Redis没有再查数据库。

在本实施例中,热点数据以数组形式存储在缓存中,以一级缓存为例,将热点数据缓存在一级缓存中的步骤如下:

获取热点数据对应的数据标识,对数据标识进行哈希计算,得到标识哈希值;对标识哈希值进行取模运算,得到计算结果;根据计算结果确定热点数据的存储位置,将热点数据存储至存储位置。

其中,哈希计算采用哈希算法(Hash Algorithms),哈希算法也称为散列算法、杂凑算法或数字指纹,是可以将任意长度的输入压缩为一个固定长度的输出的算法,常用的哈希算法包括MD系列算法和SHA系列算法。

哈希算法的数学表达式如下:

h=Hash(m)

式中,h为固定长度的输出值;m为任意长度的输入值。任意输入值(Message)的二进制编码经过哈希算法计算后,可以得出n比特的一个0、1字符串的哈希值,在不同哈希算法中n的取值可能不同,例如128、160、192、256、384或512等。

在本实施例中,对标识哈希值进行取模运算得到的计算结果即为热点数据在一级缓存中的数组对应的下标,由数组下标确定热点数据在数组中的存储位置。

步骤S202,接收请求方对热点数据的查询请求,从查询请求中获取数据标识。

在本实施例中,查询请求中包含有热点数据的数据标识,热点数据和数据标识一一对应,每个数据标识能够唯一标识一个热点数据。

在缓存中,数据标识作为Key,热点数据作为Value,以Key-Value键值对形式存储在缓存中,从查询请求中获取到数据标识,根据数据标识即可查询到对应的热点数据。

步骤S203,根据数据标识,按照优先级依次查询一级缓存、二级缓存和三级缓存,直到查询到数据标识对应的热点数据,并将热点数据返回至请求方。

在本实施例中,按照优先级顺序依次使用数据标识在一级缓存、二级缓存和三级缓存中进行查询。

其中,多级缓存的优先级为:一级缓存>二级缓存>三级缓存,根据数据标识先到一级缓存中进行查询,一级缓存中没有查到,再到二级缓存中查询,二级缓存中没有查到,最后到三级缓存中进行查询,如果任意一个缓存有值,即查询到对应的热点数据,则直接将热点数据返回请求方,不再进行后续缓存的查询。

需要强调的是,为进一步保证热点数据的私密和安全性,上述热点数据还可以存储于一区块链的节点中。

本申请所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。

在本实施例中,上述根据数据标识,按照优先级依次查询一级缓存、二级缓存和三级缓存,直到查询到数据标识对应的热点数据,并将热点数据返回至请求方的步骤包括:

根据数据标识在一级缓存中进行查询;

若查询到与数据标识对应的热点数据,则将热点数据返回至请求方;

若没有查询到与数据标识对应的热点数据,则根据数据标识在二级缓存中进行查询;

若在二级缓存中查询到与数据标识对应的热点数据,则将热点数据返回至请求方;

若无法查询到与数据标识对应的热点数据,则根据数据标识在三级缓存中进行查询;

若查询到三级缓存中存在与数据标识对应的热点数据,则将热点数据返回至请求方;

若在三级缓存中无法查询到与数据标识对应的热点数据,则结束查询流程。

在本实施例中,在根据数据标识,按照优先级依次查询一级缓存、二级缓存和三级缓存之前还包括:创建缓存工具类CacheUtil类,CacheUtil类包含有公共函数和私有函数,公共函数包括getVal(String key)方法,用于从一级缓存中获取到热点标识对应的热点数据;私有函数包括getRedisVal(String key)方法、getDBVal(String key)方法,getRedisVal(String key)方法用于从二级缓存中获取到热点标识对应的热点数据,getDBVal(String key)方法用于从三级缓存中获取到热点标识对应的热点数据。

具体的,业务请求方发送查询请求查询热点数据时,先调用CacheUtil类的getVal(String key)方法,从内存(即一级缓存)的HashMap中取值,取到的值即为热点数据,若有则返回,如果没有则调用getRedisVal(String key)方法,通过该方法调用Redis(即二级缓存)的redistemplate.get(String key)方法,用于到Redis查询具体值,若有则返回value值,结束流程。若Redis返回为空,则调用getDBVal(String key)方法,该方法通过MyBatis连接数据库(三级缓存)的T_WALLET_DICT表,查询数据库中key对应的value值。当数据库返回值后,结束流程,若数据库返回为空,也结束流程。

其中,公共函数可以被所有类的对象调用,私有函数只能被当前类的对象调用。

本实施例通过多级缓存进行热点数据缓存,在热点数据查询时,可以极大缓解数据库压力,同时提高数据响应速率。

步骤S204,定时从消息队列中获取更新缓存延时消息,根据更新缓存延时消息解析出更新数据标识。

三级缓存即数据库通过数据库更新方式,例如task,将数据库中的数据与源数据进行同步更新,此时,一级缓存和二级缓存中的数据还没有同步更新,造成了数据不一致性的问题,使得缓存数据不准确。

在本实施例中,通过消息队列MQ来更新缓存数据,实现多级缓存数据的一致性。具体的,根据数据更新策略确定是否需要更新一级缓存和二级缓存中的数据,其中,数据更新策略包括检测到三级缓存中存在更新数据时,更新一级缓存和二级缓存中的数据;若需要更新,则生成更新缓存延时消息,将更新更新缓存延时消息存储在消息队列MQ中,定时也就是按照预设时间间隔从消息队列MQ中读取更新缓存延时消息,并解析更新缓存延时消息,得到更新数据标识。

在本实施例的一些可选的实现方式中,在上述定时从消息队列中获取更新缓存延时消息的步骤之前还包括:

检测到三级缓存中存在更新数据,将更新数据封装成更新缓存延时消息;

按照预设延时机制对更新缓存延时消息进行延时处理后,将延时后的所述更新缓存延时消息存储至预设消息中间件的消息队列中。

具体的,按照预设消息封装格式将更新数据封装成更新缓存延时消息,在本实施例中不对预设消息封装格式进行限制,用户可以根据实际情况进行设置。

封装成消息的消息体主要包括以下字段:消息主题(topic)、消息tag和热点数据Key(即热点数据对应的key)等。消息体是Json格式字符串,获取到更新缓存延时消息后,通过JSONObjst解析这个Json格式字符串得到热点数据Key。

预设延时机制表示为更新缓存延时消息设置触发的时间点,在此不做限制,可以根据实际需求进行设置。

在本实施例中,预设消息中间件为RocketMQ,RocketMQ是分布式消息中间件,则通过消息队列MQ来更新缓存数据的方法具体包括:

新建缓存更新生产者:CacheListenerProducer,该生产者用于根据数据库中的更新数据生成更新缓存延时消息,按照预设延时机制处理后,向RocketMQ发送预设时间间隔(例如1秒)的更新缓存延时消息,传递给RocketMQ的更新缓存延时消息中包含有消息topic,消息tag和热点数据key等;

新建缓存更新消费者:CacheListenerConsumer,该消费者用于接收更新缓存延时消息,解析出热点数据key后向数据库查询热点数据的最新值,然后更新到Redis和HashMap中。同时,继续通过CacheListenerProducer发送预设时间间隔的更新缓存延时消息。这样,便构建了一个更新缓存的自循环功能,Redis、HashMap对应的一、二级缓存都可以及时被更新(例如,1秒循环一次)。

在本实施例中,通过消息队列构建自动更新缓存能力,解决了数据不一致的问题,提高缓存数据灵活性和准确性。

步骤S205,基于更新数据标识从三级缓存中获得对应的更新数据,将更新数据更新至一级缓存和二级缓存中。

具体的,对更新数据标识进行哈希计算,得到更新标识哈希值;对更新标识哈希值进行取模运算,得到位置信息;根据位置信息将更新数据分别存储至一级缓存和二级缓存的相应位置。

调用更新数据标识key的hashcode()方法得到更新数据标识的hashcode值,将hashcode值传入getNode()方法计算出该key在数组对应的下标,所得的下标为key存入的具体位置,将更新数据缓存至下标对应的数组元素的位置。

在本实施例中,通过哈希值进行数据缓存,保证数据存储的安全性,相应的,需要通过哈希值进行数据获取,可以避免key值被篡改,提高热点数据的安全性,同时,提高热点数据获取的准确性;将三级缓存中的更新数据同步更新至一级缓存和二级缓存,可以保证缓存数据的一致性和准确性。

本申请通过配置不同优先级的多级缓存,按照优先级依次查询,查询到热点数据即将热点数据返回给请求方,可以极大缓解数据库压力,同时,利用消息队列按照预设时间间隔更新不同级别缓存中的数据,实现多级缓存中数据的一致性,提高数据的灵活性,从而降低磁盘开销,提高数据响应速率。

在本实施例的一些可选的实现方式中,上述查询到与数据标识对应的热点数据,则将热点数据返回至请求方的步骤包括:

计算数据标识的标识哈希值;

根据标识哈希值确定热点数据在一级缓存中的缓存位置;

从缓存位置中取出热点数据发送给请求方。

在本实施例中,热点数据以数组形式存储在一级缓存中,根据数据标识key确定数组的下标,下标对应的数据即为热点数据。对数据标识key依次进行哈希计算和取模运算后,得到的值即为数据标识对应的热点数据的缓存位置,从缓存位置中取出对应的热点数据,并将其发送给请求方。

在本实施例中,通过哈希值进行数据获取,可以避免key值被篡改,提高热点数据的安全性,同时,提高热点数据获取的准确性,此外,从一级缓存中获取热点数据,可以避免网络IO开销和磁盘IO开销,提高数据响应速率。

在一些可选的实现方式中,上述根据数据标识在三级缓存中进行查询的步骤包括:

基于分布式锁机制对数据标识进行加锁;

当加锁成功时,根据数据标识在三级缓存中进行查询;

当加锁未成功时,则等待锁释放。

应当理解,当一级缓存和二级缓存中查询到的数值为空时,在请求量又很大时,这些请求都会同时到达三级缓存,也就是数据库,直到getDBVal(String key)方法将缓存设置到Redis、HashMap中,才会降低数据库的访问量。即使这个时间短会很短,但当热点数据请求量特别大时,一瞬间的流量足以让数据库出现瓶颈。

在本实施例中,通过分布式锁解决上述问题。具体的,新建分布式锁,当二级缓存(Redis缓存)为空时,增加分布式锁后再请求数据库。分布式锁的作用是,只有一个线程能争取到锁资源,也就是说只有一个线程能访问数据库,其它请求线程都在等待;抢到锁的线程请求数据库,并且更新Redis、HashMap等一、二级缓存,其它未抢到锁的线程等待已抢锁的线程释放锁后再请求Redis获得缓存信息。

在本实施例中,分布式锁是用redisson实现的,当数据标识在二级缓存中没有查询到对应的热点数据,则基于分布锁机制对数据标识进行加锁,即二级缓存给当前的数据标识配置一个预设值,表示当前数据标识已经获取该分布式锁,即加锁成功,可以在数据库中进行查询,当其它线程再次使用这个数据标识访问Redis时,则无法抢到分布式锁,只能等待锁的释放。

通过分布式锁机制可以在一级缓存和二级缓存中查询到的数值为空时,缓解数据库的访问压力,避免造成系统崩溃。

在本实施例中,在上述若在二级缓存中查询到与数据标识对应的热点数据,则将热点数据返回至请求方的步骤之后还包括:

将数据标识以及热点数据更新至一级缓存。

计算数据标识的哈希值,并对哈希值进行取模运算后,得到热点数据应当存储的数组下标,数组下标对应的数组槽位即为该数据标识在一级缓存中的存储位置,将该热点数据更新缓存至该存储位置。

具体的,调用getRedisVal(String key)方法,该方法调用Redis缓存的redistemplate.get(String key)方法,用于到Redis查询具体值,若Redis返回了不为空的值,则将key-value(value为Redis返回的值)更新至内存HashMap(一级缓存)中。

在本实施例中,在上述查询到三级缓存中存在与数据标识对应的热点数据,则将热点数据返回至请求方的步骤之后还包括:

将数据标识以及热点数据更新至一级缓存和二级缓存。

更新缓存的方式同上,对数据标识依次进行哈希运算和取模运算,确定出热点数据在一级缓存和二级缓存中的存储位置,将热点数据缓存至对应存储位置即可。

具体的,调用getDBVal(String key)方法,通过MyBatis连接数据库的T_WALLET_DICT表,查询数据库中key对应的value值。当数据库返回值后,则将key-value(value为数据库返回的值)更新到redis、HashMap中。

通过上述方式,可以保持不同级别缓存中数据的一致性,使得缓存数据更为可靠、准确。

本申请可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。

本申请可应用于金融科技领域中,将金融对应的热点数据使用多级缓存进行存储,在金融热点数据查询时,根据金融数据标识按照优先级依次查询一级缓存、二级缓存和三级缓存,直到查询到金融数据标识对应的金融热点数据,并将金融热点数据返回至请求方。这种方式可以提高金融数据获取的响应速率,缓解数据库的访问压力。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机可读指令来指令相关的硬件来完成,该计算机可读指令可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,前述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)等非易失性存储介质,或随机存储记忆体(Random Access Memory,RAM)等。

应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

进一步参考图3,作为对上述图2所示方法的实现,本申请提供了一种热点数据的处理装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。

如图3所示,本实施例所述的热点数据的处理装置300包括:配置模块301、获取模块302、查询模块303、定时获取模块304以及更新模块305。其中:

配置模块301用于配置不同优先级的多级缓存,分别为一级缓存、二级缓存和三级缓存;

获取模块302用于接收请求方对热点数据的查询请求,从所述查询请求中获取数据标识;

查询模块303用于根据所述数据标识,按照优先级依次查询所述一级缓存、所述二级缓存和所述三级缓存,直到查询到所述数据标识对应的热点数据,并将所述热点数据返回至所述请求方;

定时获取模块304用于定时从消息队列中获取更新缓存延时消息,根据所述更新缓存延时消息解析出更新数据标识;

更新模块305用于基于所述更新数据标识从所述三级缓存中获得对应的更新数据,将所述更新数据更新至所述一级缓存和所述二级缓存中。

需要强调的是,为进一步保证热点数据的私密和安全性,上述热点数据还可以存储于一区块链的节点中。

基于上述热点数据的处理装置300,通过配置不同优先级的多级缓存,按照优先级依次查询,查询到热点数据即将热点数据返回给请求方,可以极大缓解数据库压力,同时,利用消息队列按照预设时间间隔更新不同级别缓存中的数据,实现多级缓存中数据的一致性,提高数据的灵活性,从而降低磁盘开销,提高数据响应速率。

在本实施例中,查询模块303包括一级缓存查询子模块、一级缓存返回子模块、二级缓存查询子模块、二级缓存返回子模块、三级缓存查询子模块、三级缓存返回子模块和结束子模块,其中:

一级缓存查询子模块用于根据所述数据标识在所述一级缓存中进行查询;

一级缓存返回子模块用于若查询到与所述数据标识对应的热点数据,则将所述热点数据返回至所述请求方;

二级缓存查询子模块用于若没有查询到与所述数据标识对应的热点数据,则根据所述数据标识在所述二级缓存中进行查询;

二级缓存返回子模块用于若在所述二级缓存中查询到与所述数据标识对应的热点数据,则将所述热点数据返回至所述请求方;

三级缓存查询子模块用于若无法查询到与所述数据标识对应的热点数据,则根据所述数据标识在所述三级缓存中进行查询;

三级缓存返回子模块用于若查询到所述三级缓存中存在与所述数据标识对应的热点数据,则将所述热点数据返回至所述请求方;

结束子模块用于若在所述三级缓存中无法查询到与所述数据标识对应的热点数据,则结束查询流程。

本实施例通过多级缓存进行热点数据缓存,在热点数据查询时,可以极大缓解数据库压力,同时提高数据响应速率。

在本实施例的一些可选的实现方式中,一级缓存返回子模块包括计算单元、位置确定单元和发送单元,其中:

计算单元用于计算所述数据标识的标识哈希值;

位置确定单元用于根据所述标识哈希值确定所述热点数据在一级缓存中的缓存位置;

发送单元用于从所述缓存位置中取出所述热点数据发送给所述请求方。

在本实施例中,通过哈希值进行数据获取,可以避免key值被篡改,提高热点数据的安全性,同时,提高热点数据获取的准确性。

在本实施例中,三级缓存查询子模块进一步用于:

基于分布式锁机制对所述数据标识进行加锁;

当加锁成功时,根据所述数据标识在所述三级缓存中进行查询;

当加锁未成功时,则等待锁释放。

通过分布式锁机制可以在一级缓存和二级缓存中查询到的数值为空时,缓解数据库的访问压力,避免造成系统崩溃。

在一些可选的实现方式中,查询模块303还包括更新子模块,用于将所述数据标识以及所述热点数据更新至所述一级缓存以及将所述数据标识以及所述热点数据更新至所述一级缓存和所述二级缓存。

通过上述方式,可以保持不同级别缓存中数据的一致性,使得缓存数据更为可靠、准确。

在本实施例中,热点数据的处理装置300还包括消息生成模块,用于:

检测到所述三级缓存中存在更新数据,将所述更新数据封装成更新缓存延时消息;

按照预设延时机制对所述更新缓存延时消息进行延时处理后,将延时后的所述更新缓存延时消息存储至预设消息中间件的消息队列中。

在本实施例中,通过消息队列构建自动更新缓存能力,解决了数据不一致的问题,提高缓存数据灵活性和准确性。

在本实施例的一些可选的实现方式中,更新模块305包括哈希计算子模块、取模子模块以及更新子模块,其中:

对所述更新数据标识进行哈希计算,得到更新标识哈希值;

对所述更新标识哈希值进行取模运算,得到位置信息;

根据所述位置信息将更新数据分别存储至一级缓存和二级缓存的相应位置。

在本实施例中,通过哈希值进行数据缓存,保证数据存储的安全性,同时,将三级缓存中的更新数据同步更新至一级缓存和二级缓存,可以保证缓存数据的一致性和准确性。

为解决上述技术问题,本申请实施例还提供计算机设备。具体请参阅图4,图4为本实施例计算机设备基本结构框图。

所述计算机设备4包括通过系统总线相互通信连接存储器41、处理器42、网络接口43。需要指出的是,图中仅示出了具有组件41-43的计算机设备4,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。其中,本技术领域技术人员可以理解,这里的计算机设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,其硬件包括但不限于微处理器、专用集成电路(ApplicationSpecific Integrated Circuit,ASIC)、可编程门阵列(Field-Programmable GateArray,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。

所述计算机设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述计算机设备可以与用户通过键盘、鼠标、遥控器、触摸板或声控设备等方式进行人机交互。

所述存储器41至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器41可以是所述计算机设备4的内部存储单元,例如该计算机设备4的硬盘或内存。在另一些实施例中,所述存储器41也可以是所述计算机设备4的外部存储设备,例如该计算机设备4上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(FlashCard)等。当然,所述存储器41还可以既包括所述计算机设备4的内部存储单元也包括其外部存储设备。本实施例中,所述存储器41通常用于存储安装于所述计算机设备4的操作系统和各类应用软件,例如热点数据的处理方法的计算机可读指令等。此外,所述存储器41还可以用于暂时地存储已经输出或者将要输出的各类数据。

所述处理器42在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器42通常用于控制所述计算机设备4的总体操作。本实施例中,所述处理器42用于运行所述存储器41中存储的计算机可读指令或者处理数据,例如运行所述热点数据的处理方法的计算机可读指令。

所述网络接口43可包括无线网络接口或有线网络接口,该网络接口43通常用于在所述计算机设备4与其他电子设备之间建立通信连接。

本实施例通过处理器执行存储在存储器的计算机可读指令时实现如上述实施例热点数据的处理方法的步骤,通过配置不同优先级的多级缓存,按照优先级依次查询,查询到热点数据即将热点数据返回给请求方,可以极大缓解数据库压力,同时,利用消息队列按照预设时间间隔更新不同级别缓存中的数据,实现多级缓存中数据的一致性,提高数据的灵活性,从而降低磁盘开销,提高数据响应速率。

本申请还提供了另一种实施方式,即提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可读指令,所述计算机可读指令可被至少一个处理器执行,以使所述至少一个处理器执行如上述的热点数据的处理方法的步骤,通过配置不同优先级的多级缓存,按照优先级依次查询,查询到热点数据即将热点数据返回给请求方,可以极大缓解数据库压力,同时,利用消息队列按照预设时间间隔更新不同级别缓存中的数据,实现多级缓存中数据的一致性,提高数据的灵活性,从而降低磁盘开销,提高数据响应速率。

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

显然,以上所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例,附图中给出了本申请的较佳实施例,但并不限制本申请的专利范围。本申请可以以许多不同的形式来实现,相反地,提供这些实施例的目的是使对本申请的公开内容的理解更加透彻全面。尽管参照前述实施例对本申请进行了详细的说明,对于本领域的技术人员来而言,其依然可以对前述各具体实施方式所记载的技术方案进行修改,或者对其中部分技术特征进行等效替换。凡是利用本申请说明书及附图内容所做的等效结构,直接或间接运用在其他相关的技术领域,均同理在本申请专利保护范围之内。

技术分类

06120115687549