一种数据处理方法、装置、电子设备及存储介质
技术领域
本公开涉及数据存取技术领域,具体而言,涉及一种数据处理方法、装置、电子设备及存储介质。
背景技术
很多业务场景下,均会涉及到针对客户端发送的关于业务数据的访问请求进行处理的过程,比如针对业务数据的读取请求,或者业务数据写入请求进行处理的过程,一般情况下,为了快速处理客户端的访问请求,会提前将业务数据进行缓存。
但是当缓存失效或过期后,且新的缓存尚未生成之前,对于一个高并发的业务系统而言,会接收到几百甚至上千个请求,针对这些请求进行处理时,由于这些请求的处理线程都无法获知缓存生成请求的存在,所以这些处理线程均会分别单独请求访问数据库以生成新的缓存,对数据库造成巨大的性能压力,严重情况下甚至会造成系统宕机。
发明内容
有鉴于此,本公开至少提供一种数据处理方案,在同时处理多个访问请求时,一方面降低了缓存压力,另一方面能够避免对数据库造成巨大的性能压力。
第一方面,本公开实施例提供了一种数据处理方法,应用于服务器,所述数据处理方法包括:
接收客户端发送的访问请求;所述访问请求为读请求或写请求;
处理所述访问请求,并生成与所述访问请求对应的缓存任务;所述缓存任务用于将所述访问请求所对应的数据库中的业务数据写入缓存;
将所述缓存任务写入缓存任务处理队列中,以便按照所述缓存任务处理队列中各个缓存任务的处理顺序处理各个缓存任务。
在一种可能的实施方式中,若所述访问请求为读请求,所述处理所述访问请求,包括:
从所述数据库中读取与所述访问请求对应的业务数据,并发送给所述客户端;
若所述访问请求为写请求,所述处理所述访问请求,包括:
向所述数据库中写入与所述访问请求对应的业务数据。
在一种可能的实施方式中,当所述访问请求为读请求时,所述生成与所述访问请求对应的缓存任务之前,所述数据处理方法还包括:
判断缓存中是否存在与所述访问请求对应的业务数据;
所述生成与所述访问请求对应的缓存任务,包括:
在确定所述缓存中不存在与所述访问请求对应的业务数据后,生成与所述访问请求对应的缓存任务。
在一种可能的实施方式中,所述处理所述访问请求,包括:
若确定所述缓存中存在与所述访问请求对应的业务数据,则从所述缓存中读取与所述访问请求对应的业务数据,并发送给所述客户端;
若确定所述缓存中不存在与所述访问请求对应的业务数据,则根据所述访问请求对应的业务数据类型,向所述客户端返回所述业务数据。
在一种可能的实施方式中,根据所述访问请求对应的业务数据类型,向所述客户端返回所述业务数据,包括:
根据所述访问请求对应的业务数据类型,确定向所述客户端返回业务数据的方式,根据确定的返回业务数据的方式处理所述访问请求;
所述返回业务数据的方式包括以下两种:
所述从所述数据库中读取该业务数据,并发送给所述客户端;
所述向所述客户端返回预设的业务数据。
在一种可能的实施方式中,所述数据处理方法还包括:
从所述缓存任务处理队列中依次提取每个缓存任务;
判断所述缓存中是否存在与该缓存任务对应的业务数据;
若不存在,则从所述数据库中读取所述业务数据,并将所述业务数据写入所述缓存中。
第二方面,本公开实施例提供了一种数据处理装置,包括:
接收模块,用于接收客户端发送的访问请求;所述访问请求为读请求或写请求;
处理模块,用于处理所述访问请求,并生成与所述访问请求对应的缓存任务;所述缓存任务用于将所述访问请求所对应的数据库中的业务数据写入缓存;
缓存模块,用于将所述缓存任务写入缓存任务处理队列中,以便按照所述缓存任务处理队列中各个缓存任务的处理顺序处理各个缓存任务。
在一种可能的实施方式中,若所述访问请求为读请求,所述处理模块在用于处理所述访问请求时,包括:
从所述数据库中读取与所述访问请求对应的业务数据,并发送给所述客户端;
若所述访问请求为写请求,所述处理模块在用于处理所述访问请求时,包括:
向所述数据库中写入与所述访问请求对应的业务数据。
在一种可能的实施方式中,当所述访问请求为读请求时,在生成与所述访问请求对应的缓存任务之前,所述处理模块还用于:
判断缓存中是否存在与所述访问请求对应的业务数据;
所述处理模块在用于生成与所述访问请求对应的缓存任务时,包括:
在确定所述缓存中不存在与所述访问请求对应的业务数据后,生成与所述访问请求对应的缓存任务。
在一种可能的实施方式中,所述处理模块在用于处理所述访问请求,包括:
若确定所述缓存中存在与所述访问请求对应的业务数据,则从所述缓存中读取与所述访问请求对应的业务数据,并发送给所述客户端;
若确定所述缓存中不存在与所述访问请求对应的业务数据,则根据所述访问请求对应的业务数据类型,向所述客户端返回所述业务数据。
在一种可能的实施方式中,所述处理模块在用于根据所述访问请求对应的业务数据类型,向所述客户端返回所述业务数据时,包括:
根据所述访问请求对应的业务数据类型,确定向所述客户端返回业务数据的方式,根据确定的返回业务数据的方式处理所述访问请求;
所述返回业务数据的方式包括以下两种:
所述从所述数据库中读取该业务数据,并发送给所述客户端;
所述向所述客户端返回预设的业务数据。
在一种可能的实施方式中,所述缓存模块还用于:
从所述缓存任务处理队列中依次提取每个缓存任务;
判断所述缓存中是否存在与该缓存任务对应的业务数据;
若不存在,则从所述数据库中读取所述业务数据,并将所述业务数据写入所述缓存中。
第三方面,本公开实施例提供了一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行如第一方面所述的数据处理方法的步骤。
第四方面,本公开实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如权第一方面所述的数据处理方法的步骤。
本公开实施例提供了一种数据处理方法,该数据处理方法由服务器进行统一处理,在接收到客户端发送的访问请求时,可以在处理访问请求的同时,生成与访问请求对应的缓存任务,并将生成的缓存任务写入缓存任务处理队列中,按照缓存队列中各个缓存任务的处理顺序依次处理各个缓存任务,由于本公开实施例提出的数据缓存方式是由服务器统一进行处理,在统一进行处理时,能够对各个缓存任务进行排序,然后依次进行处理,这样当在同一时间接收到多个缓存任务时,可以依序进行处理,从而可以缓解缓存压力;另外,因为该数据处理方法是由服务器进行统一处理,这样在接收到针对访问同一业务数据的多个访问请求时,若先基于其中一个访问请求生成缓存,则在处理顺序序列靠后且针对该同一业务数据的访问请求时,即可以确定缓存中存在与该数据读请求对应的业务数据,此时可以直接在缓存中读取该业务数据,并返回客户端,这样,无需针对每个访问请求均访问数据库以生成缓存,这样在提高数据处理速度的同时,能够避免在同一时间对数据库造成巨大的性能压力。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本公开实施例所提供的一种数据处理方法的流程示意图;
图2示出了本公开实施例所提供的一种数据处理流程示意图;
图3示出了本公开实施例所提供的一种数据处理装置的结构示意图;
图4示出了本公开实施例所提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本公开中附图,对本公开中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
很多业务场景下,比如在线教育、线上购物场景等,均会涉及到针对客户端发送的访问请求的业务数据处理过程,比如针对业务数据的写入以及读取过程,在处理不同的客户端,或者相同的客户端发送的访问请求时,一般情况下会先从缓存中获取对应的业务数据,但是当缓存过期被清除后,即缓存中不存在对应的业务数据时,各个访问请求会直接访问数据库,当同时存在大量针对同一业务数据的访问请求时,容易对数据库造成巨大的性能压力。
基于上述研究,本公开实施例提供了一种数据处理方法,该数据处理方法由服务器进行统一处理,在接收到客户端发送的访问请求时,可以在处理访问请求的同时,生成与访问请求对应的缓存任务,并将生成的缓存任务写入缓存任务处理队列中,按照缓存队列中各个缓存任务的处理顺序依次处理各个缓存任务,由于本公开实施例提出的数据缓存方式是由服务器统一进行处理,在统一进行处理时,能够对各个缓存任务进行排序,然后依次进行处理,这样当在同一时间接收到多个缓存任务时,可以依序进行处理,从而可以缓解缓存压力;另外,因为该数据处理方法是由服务器进行统一处理,这样在接收到针对访问同一业务数据的多个访问请求时,若先基于其中一个访问请求生成缓存,则在处理顺序序列靠后且针对该同一业务数据的访问请求时,即可以确定缓存中存在与该数据读请求对应的业务数据,此时可以直接在缓存中读取该业务数据,并返回客户端,这样,无需针对每个访问请求均访问数据库以生成缓存,这样在提高数据处理速度的同时,能够避免在同一时间对数据库造成巨大的性能压力。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种数据处理方法进行详细介绍,本公开实施例所提供的数据处理方法的执行主体为服务器,在一些可能的实现方式中,该数据处理方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
下面以执行主体为服务器为例对本公开实施例提供的数据处理方法加以说明。
参见图1所示,为本公开实施例提供的一种数据处理方法的流程图,该数据处理方法应用于服务器,具体包括以下步骤S101~S103:
S101,接收客户端发送的访问请求;访问请求为读请求或写请求。
这里的客户端(Client)或称为用户端,是指与服务器相对应,为客户提供本地服务的程序,一般安装在普通的客户机上,需要与服务端互相配合运行,比如某些应用程序App。
这里的读请求即请求读取业务数据,写请求即请求写入业务数据,该访问请求中可以包含索引信息,通过该索引信息即可以在缓存中查找与该访问请求对应的业务数据,从而进一步基于该访问请求的类型对查找到的业务数据进行处理。
S102,处理访问请求,并生成与访问请求对应的缓存任务;缓存任务用于将访问请求所对应的数据库中的业务数据写入缓存。
这里处理该访问请求是指针对客户端发送的访问请求进行处理,比如若访问请求为读请求,即可以在数据库或者缓存中找到与该访问请求对应的业务数据,并将该业务数据发送至客户端,若该访问请求为写请求,即可以将访问请求对应的业务数据写入数据库。
这里生成与访问请求对应的缓存任务是指当缓存中不存在与该访问请求对应的业务数据时,用于在缓存中生成与该访问请求对应的业务数据的任务。
S103,将缓存任务写入缓存任务处理队列中,以便按照缓存任务处理队列中各个缓存任务的处理顺序处理各个缓存任务。
这里的缓存任务处理队列可以是kafka队列,当同时存在大量的缓存任务时,可以将这些缓存任务先进行排队,然后依次进行处理,这样可以避免同时处理大量的缓存任务引发的缓存雪崩,从而缓解缓存压力。
这里将缓存任务写入缓存任务处理队列,这样可以按照队列顺序依次处理各个缓存任务,从而缓解缓存压力,另外,当处理完其中一个缓存任务时,该缓存任务对应的业务数据即被存入缓存,这样当服务器再次接收到客户端发送的对该业务数据的数据读请求时,即能够确定缓存中存在与该数据读请求对应的业务数据,此时可以直接在缓存中读取该业务数据,并返回客户端,即无需再访问数据库,从而降低了对数据库的访问次数。
以上提出的S101~S103,提供了一种数据处理方法,由服务器进行统一处理,在接收到客户端发送的访问请求时,可以在处理访问请求的同时,生成与访问请求对应的缓存任务,并将生成的缓存任务写入缓存任务处理队列中,按照缓存队列中各个缓存任务的处理顺序依次处理各个缓存任务,由于本公开实施例提出的数据缓存方式是由服务器统一进行处理,在统一进行处理时,能够对各个缓存任务进行排序,然后依次进行处理,这样当在同一时间接收到多个缓存任务时,可以依序进行处理,从而可以缓解缓存压力;另外,因为该数据处理方法是由服务器进行统一处理,这样在接收到针对访问同一业务数据的多个访问请求时,若先基于其中一个访问请求生成缓存,则在处理顺序序列靠后且针对该同一业务数据的访问请求时,即可以确定缓存中存在与该数据读请求对应的业务数据,此时可以直接在缓存中读取该业务数据,并返回客户端,这样,无需针对每个访问请求均访问数据库以生成缓存,这样在提高数据处理速度的同时,能够避免在同一时间对数据库造成巨大的性能压力。
下面以图2所示的示意图为例,结合具体实施例,分别对上述S101~S103进行详细解释说明。
在一种实施方式中,若访问请求为读请求,如图2所示,即客户端请求读取相应的业务数据时,这种情况下处理访问请求,可以包括:
从数据库中读取与访问请求对应的业务数据,并发送给客户端。
这里的访问请求中可以携带有索引信息,然后服务器在接收到该索引信息时,即可以在数据库中查找与该索引信息对应的业务数据,具体地,数据库中存储的数据结构可以为key-value键值对类型的数据,该索引信息可以为表示key的信息,对应的业务数据即可以通过value值表示,然后根据该索引信息查找到对应的value值,然后将查找到的value值发送至客户端。
若访问请求为写请求,如图2所示,即客户端可以请求写入新的业务数据,这种情况下,处理访问请求,包括:
向数据库中写入与访问请求对应的业务数据。
同样,这里的访问请求中也可以携带有索引信息,且还可以包含待写入的新业务数据,然后服务器在接收到该索引信息时,可以在数据库中查找与该索引信息对应的旧业务数据,然后用新业务数据替换旧业务数据。
上述情况下,可以直接满足客户端读取业务数据或者写入业务数据的请求,当然为了提高针对访问请求的处理速度,以及减少对数据库的访问压力,本公开实施例还提出了当访问请求为读请求时,生成与访问请求对应的缓存任务之前,数据处理方法还包括:
判断缓存中是否存在与访问请求对应的业务数据。
即在接收到客户端发送的访问请求时,服务器先在缓存中读取是否存在与该访问请求对应的业务数据,因为若该缓存中存在与该访问请求对应的业务数据,且该访问请求为读请求时,则可以直接从缓存中读取与该访问请求对应的业务数据,这样即无需访问数据库,即不会对数据库造成压力。
进一步地,生成与访问请求对应的缓存任务,包括:
在确定缓存中不存在与访问请求对应的业务数据后,生成与访问请求对应的缓存任务。
这种情况下,针对该访问请求生成缓存任务,从而在缓存中生成与该访问请求对应的业务数据,从而当再次接收到针对该业务数据的读请求时,即可以直接从缓存中获取到该业务数据,从而降低对数据库的访问次数,以避免对数据库造成性能压力。
为了降低对数据库的访问次数,当访问请求为读请求时,本公开实施例提出的处理访问请求,包括:
(1)若确定缓存中存在与访问请求对应的业务数据,则从缓存中读取与访问请求对应的业务数据,并发送给客户端;
(2)若确定缓存中不存在与访问请求对应的业务数据,则根据访问请求对应的业务数据类型,向客户端返回业务数据。
这种情况针对每个访问请求,会先从缓存中查找该访问请求对应的业务数据,若查找到该访问请求对应的业务数据,即可以将该业务数据发送至客户端,若确定缓存中不存在该访问请求对应的业务数据,则说明此时该访问请求对应的业务数据还未生成缓存,此时,针对客户端的访问请求,可以做如下处理:
判断访问请求对应的业务数据类型,然后根据该业务数据类型,向客户端返回的业务数据,此时返回的业务数据可以为从数据库中查找到的与访问请求对应的真实的业务数据,也可以为预设的默认值,具体向客户端返回真实的业务数据还是返回预设的默认值,与业务数据类型相关,哪些业务数据类型需要向客户端返回真实的业务数据,哪些业务数据类型不需要向客户端返回真实的业务数据可以是预先配置好的,比如,针对客户端发送的关于请求重要程度高的业务数据或者无法按照默认值表示的业务数据,则需要从数据库中查找真实的业务数据,针对重要程度低的业务数据或者可以按照默认值表示的业务数据,则可以直接返回默认值。
具体地,在根据访问请求对应的业务数据类型,向客户端返回业务数据时,可以包括:
根据访问请求对应的业务数据类型,确定向客户端返回业务数据的方式,根据确定的返回业务数据的方式处理访问请求。
其中,返回业务数据的方式包括以下两种:
(1)从数据库中读取该业务数据,并发送给客户端;
(2)向客户端返回预设的业务数据。
比如,访问请求中可以携带用于表征业务数据类型的信息,然后根据预先存储的业务数据类型与返回业务数据的方式的对应关系,确定向客户端返回业务数据的方式,这里向客户端返回业务数据的方式即包括从数据库中提取真实的业务数据,并将该真实的业务数据发送给客户端,以及向客户端返回默认值。
通过这种方式处理访问请求,比如可以仅仅设置较少的业务数据类型对应返回业务数据的方式为从数据库中读取真实的业务数据,并发送给客户端,其它情况的业务数据类型对应的返回业务数据的方式均可以为向客户端返回预设的业务数据,这样可以针对同一时间存在高并发的访问请求的情况下,缓解对数据库造成的巨大性能压力。
本公开实施例提供的数据处理方法,针对每个客户端发送的访问请求,或者同一客户端发送的访问请求,在需要进行数据缓存时,可以由后台服务器进行统一处理,针对基于缓存任务生成的缓存任务处理队列,本公开实施例提供的数据处理方法还包括:
(1)从缓存任务处理队列中依次提取每个缓存任务;
(2)判断缓存中是否存在与该缓存任务对应的业务数据;
(3)若不存在,则从数据库中读取业务数据,并将业务数据写入缓存中。
这里针对访问请求的处理和缓存任务的处理可以是由后台服务器中的不同线程进行处理的,比如针对不同访问请求的处理,可以通过并行的多个线程进行处理,而针对缓存任务的处理,本公开实施例将通过统一的线程进行处理,当针对数据库中的某个业务数据的缓存还未生成之前,处理关于该业务数据的读请求,则可以按照上文介绍的方式进行处理,即或者访问数据库,或者返回默认值,当缓存生成后,即可以直接从缓存中读取该业务数据并发送至客户端。
因为针对每个访问请求,当目前缓存中不存在与该访问请求对应的业务数据时,即可以生成与访问请求对应的缓存任务,且该缓存任务会被写入缓存队列,如图2所示的缓存任务处理队列更新过程,比如,在某个时刻,接收到多个针对同一业务数据的读请求,当缓存任务中不存在该业务数据时,则会针对这些读请求生成缓存任务,并将这些缓存任务放置于缓存任务处理队列中,因此,缓存任务队列中可能存在针对相同业务数据的缓存任务,这样,在依次对缓存任务处理队列中的缓存任务进行处理时,为了避免重复缓存降低处理效率,这里针对缓存任务处理队列中的每个缓存任务,在处理之前会判断缓存中是否存在与该缓存任务对应的业务数据,在确定缓存任务中不存在与该缓存任务对应的业务数据后,才会进行更新缓存处理。
另外,这里通过统一的线程处理缓存任务,每个缓存任务被依次放置于缓存任务处理队列中,这样针对相同业务数据的缓存,服务器能够判断缓存中是否存在与该缓存任务对应的业务数据,若确定缓存中已经存在该业务数据,则不会再去访问数据库以重复对该业务数据进行更新缓存,从而避免多次访问数据库,对数据库造成性能压力。
本公开实施例给出的缓存任务的生成是基于客户端发送访问请求后生成的,除此之外,本公开实施例的缓存任务还可以适用于业务上线阶段时进行缓存预热时完成,即客户端业务系统上线后,提前将相关的业务数据直接加载到缓存中,这样在客户端请求业务数据的时候,即可以直接基于缓存进行处理,同样节省了对数据库的访问压力。
下面结合具体应用场景,比如针对在线教育多个客户端同时进行读请求以及写请求的情况,对本公开实施例提供的数据处理方法进行说明,如下:
在线教育的服务器接收到客户端发送的业务读取请求时,比如针对多个听课侧的客户端发送的用于读取教师A的教师信息的读取请求,先读取缓存查看是否存在与教师A对应的教师信息,若缓存中存在与教师A对应的教师信息,则直接将读取到的教师A的教师信息返回至客户端,若缓存中不存在教师A的教师信息,则根据该读取请求要读取的教师信息的业务数据类型,确定返回结果,这里业务数据类型对应的返回结果可以是预先设置好的,比如,针对读取一些重要性的教师信息,当缓存中不存在要读取的教师信息时,则需要读取数据库获取并向客户端返回真实的教师信息,针对读取一些非重要性的教师信息,若缓存中不存在要读取的教师信息,则可以直接返回默认值,即针对读取一些非重要性的教师信息时,不需要访问数据库,从而避免多次访问给数据库带来压力,具体地,这里重要性的教师信息和非重要性的教师信息可以是预先设置好的,比如教师的授课时间、教师的授课科目可以为重要的教师信息,而教师的性别、教师的真实姓名可以为非重要性的教师信息;另外,当缓存中不存在客户端要读取的教师信息时,针对该客户端发送的业务读取请求会同时生成缓存任务,将该缓存任务加入缓存任务处理队列。
针对在线教育服务器接收到客户端发送的业务写入请求,比如针对多个授课侧的客户端发送的针对写入教师信息的业务写入请求,则根据业务写入请求对应的教师信息更新数据库DB,然后将缓存中之前存储的过时数据进行删除后,生成新的缓存任务,比如针对教师A对应的客户端发送的写入教师A的教师信息,这里则将教师A的教师信息更新至数据库DB,然后将缓存中之前存储的该教师A的教师信息删除后,生成缓存该教师A的教师信息的缓存任务,并将该缓存任务加入缓存任务处理队列。
上述缓存任务处理队列由在线教育服务器进行统一处理,因为针对客户端发送的读请求,若存在多个客户端在同一时间段内发送的针对同一教师的教师信息的读请求,若缓存中不存在该教师的教师信息的情况下,均会生成缓存该教师的教师信息的缓存任务,此时造成缓存任务处理队列中包含多个相同的缓存任务,故在处理时从缓存任务处理队列中依次提取的每个缓存任务时,首先判断缓存中是否存在与该缓存任务对应的业务数据,若不存在,则从数据库中读取业务数据,并将业务数据写入缓存中,若存在,则直接忽略该缓存任务即可。
本公开实施例提供的数据处理方法,该数据处理方法由服务器进行统一处理,在接收到客户端发送的访问请求时,可以在处理访问请求的同时,生成与访问请求对应的缓存任务,并将生成的缓存任务写入缓存任务处理队列中,按照缓存队列中各个缓存任务的处理顺序依次处理各个缓存任务,由于本公开实施例提出的数据缓存方式是由服务器统一进行处理,在统一进行处理时,能够对各个缓存任务进行排序,然后依次进行处理,这样当在同一时间接收到多个缓存任务时,可以依序进行处理,从而可以缓解缓存压力;另外,因为该数据处理方法是由服务器进行统一处理,这样在接收到针对访问同一业务数据的多个访问请求时,若先基于其中一个访问请求生成缓存,则在处理顺序序列靠后且针对该同一业务数据的访问请求时,即可以确定缓存中存在与该数据读请求对应的业务数据,此时可以直接在缓存中读取该业务数据,并返回客户端,这样,无需针对每个访问请求均访问数据库以生成缓存,这样在提高数据处理速度的同时,能够避免在同一时间对数据库造成巨大的性能压力。
基于同一技术构思,本公开实施例中还提供了与数据处理方法对应的数据处理装置,由于本公开实施例中的数据处理装置解决问题的原理与本公开实施例上述数据处理方法相似,因此装置的实施可以参见数据处理方法的实施,重复之处不再赘述。
参见图3所示,为本公开实施例提供的数据处理装置300的结构示意图,包括接收模块301、处理模块302和缓存模块303。
其中,接收模块301,用于接收客户端发送的访问请求;访问请求为读请求或写请求;
处理模块302,用于处理访问请求,并生成与访问请求对应的缓存任务;缓存任务用于将访问请求所对应的数据库中的业务数据写入缓存;
缓存模块303,用于将缓存任务写入缓存任务处理队列中,以便按照缓存任务处理队列中各个缓存任务的处理顺序处理各个缓存任务。
在一种可能的实施方式中,若访问请求为读请求,处理模块302在用于处理访问请求时,包括:
从数据库中读取与访问请求对应的业务数据,并发送给客户端;
若访问请求为写请求,处理模块在用于处理访问请求时,包括:
向数据库中写入与访问请求对应的业务数据。
在一种可能的实施方式中,当访问请求为读请求时,在生成与访问请求对应的缓存任务之前,处理模块302还用于:
判断缓存中是否存在与访问请求对应的业务数据;
处理模块302在用于生成与访问请求对应的缓存任务时,包括:
在确定缓存中不存在与访问请求对应的业务数据后,生成与访问请求对应的缓存任务。
在一种可能的实施方式中,处理模块302在用于处理访问请求,包括:
若确定缓存中存在与访问请求对应的业务数据,则从缓存中读取与访问请求对应的业务数据,并发送给客户端;
若确定缓存中不存在与访问请求对应的业务数据,则根据访问请求对应的业务数据类型,向客户端返回业务数据。
在一种可能的实施方式中,处理模块302在用于根据访问请求对应的业务数据类型,向客户端返回业务数据时,包括:
根据访问请求对应的业务数据类型,确定向客户端返回业务数据的方式,根据确定的返回业务数据的方式处理访问请求;
返回业务数据的方式包括以下两种:
从数据库中读取该业务数据,并发送给客户端;
向客户端返回预设的业务数据。
在一种可能的实施方式中,缓存模块303还用于:
从缓存任务处理队列中依次提取每个缓存任务;
判断缓存中是否存在与该缓存任务对应的业务数据;
若不存在,则从数据库中读取业务数据,并将业务数据写入缓存中。
本公开实施例提供数据处理装置应用于服务器,在接收到客户端发送的访问请求时,可以在处理访问请求的同时,生成与访问请求对应的缓存任务,并将生成的缓存任务写入缓存任务处理队列中,按照缓存队列中各个缓存任务的处理顺序依次处理各个缓存任务,由于本公开实施例提出的数据缓存方式是由服务器统一进行处理,在统一进行处理时,能够对各个缓存任务进行排序,然后依次进行处理,这样当在同一时间接收到多个缓存任务时,可以依序进行处理,从而可以缓解缓存压力;另外,因为该数据处理方法是由服务器进行统一处理,这样在接收到针对访问同一业务数据的多个访问请求时,若先基于其中一个访问请求生成缓存,则在处理顺序序列靠后且针对该同一业务数据的访问请求时,即可以确定缓存中存在与该数据读请求对应的业务数据,此时可以直接在缓存中读取该业务数据,并返回客户端,这样,无需针对每个访问请求均访问数据库以生成缓存,这样在提高数据处理速度的同时,能够避免在同一时间对数据库造成巨大的性能压力。
关于数据处理装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
本公开实施例还提供了一种电子设备,如图4所示,为本公开实施例提供的电子设备400的结构示意图,包括:处理器401、存储介质402、和总线403。存储介质402存储有处理器401可执行的机器可读指令,当电子设备400运行时,处理器401与存储介质402之间通过总线403通信,机器可读指令被处理器401执行时执行如下处理:
接收客户端发送的访问请求;访问请求为读请求或写请求;
处理访问请求,并生成与访问请求对应的缓存任务;缓存任务用于将访问请求所对应的数据库中的业务数据写入缓存;
将缓存任务写入缓存任务处理队列中,以便按照缓存任务处理队列中各个缓存任务的处理顺序处理各个缓存任务。
在一种可能的实施方式中,若访问请求为读请求,处理器401执行的指令中,包括:
从数据库中读取与访问请求对应的业务数据,并发送给客户端;
在一种可能的实施方式中,若访问请求为写请求,处理器401执行的指令中,包括:
向数据库中写入与访问请求对应的业务数据。
在一种可能的实施方式中,当访问请求为读请求时,生成与访问请求对应的缓存任务之前,处理器401执行的指令中,还包括:
判断缓存中是否存在与访问请求对应的业务数据;
在确定缓存中不存在与访问请求对应的业务数据后,生成与访问请求对应的缓存任务。
在一种可能的实施方式中,处理器401执行的指令中,包括:
若确定缓存中存在与访问请求对应的业务数据,则从缓存中读取与访问请求对应的业务数据,并发送给客户端;
若确定缓存中不存在与访问请求对应的业务数据,则根据访问请求对应的业务数据类型,向客户端返回业务数据。
在一种可能的实施方式中,处理器401执行的指令中,包括:
根据访问请求对应的业务数据类型,确定向客户端返回业务数据的方式,根据确定的返回业务数据的方式处理访问请求;
返回业务数据的方式包括以下两种:
从数据库中读取该业务数据,并发送给客户端;
向客户端返回预设的业务数据。
在一种可能的实施方式中,处理器401执行的指令中,还包括:
从缓存任务处理队列中依次提取每个缓存任务;
判断缓存中是否存在与该缓存任务对应的业务数据;
若不存在,则从数据库中读取业务数据,并将业务数据写入缓存中。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中的数据处理方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例所提供的数据处理方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,程序代码包括的指令可用于执行上述方法实施例中的数据处理方法的步骤,具体可参见上述方法实施例,在此不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考方法实施例中的对应过程,本公开中不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以权利要求的保护范围为准。