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

一种数据的缓存方法、装置、存储介质及电子设备

文献发布时间:2023-06-19 10:46:31


一种数据的缓存方法、装置、存储介质及电子设备

技术领域

本发明涉及互联网技术领域,尤其涉及一种数据的缓存方法、装置、存储介质及电子设备。

背景技术

随着互联网的快速发展,人们上网的方式也变得十分便捷,网络访问的需求也日益增加,对网站服务器造成了很大的压力,而这些网络访问通常要求对数据能够进行实时处理,还要求能够进行后续的处理分析。面对多种设备,多个用户的高并发访问,如何降低服务器的负载,快速响应客户端的请求,对数据进行实时处理并保存,成为一个难题。因此,如何提高前端服务器的性能,降低数据库的使用成本,是本领域技术人员亟待解决的技术难题。

发明内容

有鉴于现有技术的上述缺陷,本发明所要解决的技术问题是,现有技术中并发访问数量增大对于前端服务器带来的压力,并且对于redis和mysql的使用成本较高的问题。本方案通过设置三级缓存,第一级采用cdn缓存,第二级采用redis缓存,第三级采用mysql数据库缓存,来提高前端服务器的性能,同时降低了redis和mysql的使用成本。

为实现上述目的,本发明提供了一种数据的缓存方法、装置、存储介质及电子设备。

在本发明的较佳实施方式中,本申请实施例提供了一种数据的缓存方法,所述方法由前端服务器执行,所述方法包括:

接收客户端发出的访问请求,并获取所述访问请求的请求地址;

访问cdn缓存,若所述访问请求命中,则返回请求结果;

若未命中,则获取所述访问请求的版本号,并将所述版本号和所述请求地址作为请求标识对redis缓存进行访问,若命中则返回请求结果;

若仍未命中,则以所述请求标识对所述访问请求进行加锁处理,并以所述请求标识作为锁标识;

以所述锁标识访问mysql数据库缓存,若命中则刷新redis缓存,并返回请求结果。

进一步的,在所述以所述锁标识访问mysql数据库缓存之后,所述方法还包括:

若未命中,则将所述访问请求发送至后端服务器,供所述后端服务器通过网络获取请求结果,并返回请求结果。

进一步的,在将所述访问请求发送至后端服务器,供所述后端服务器通过网络获取请求结果,并返回请求结果之后,所述方法还包括:

根据所返回的请求结果更新所述mysql数据库缓存;并根据所返回的请求结果更新redis缓存。

进一步的,在所述以所述请求标识对所述访问请求进行加锁处理,并以所述请求标识作为锁标识之后,所述方法还包括:

确定锁的有效期;

若在所述锁的有效期内没有返回数据,则返回错误信息,并释放此锁资源。

进一步的,所述方法还包括:

若检测到新数据的添加事件,确定所述新数据的类型为及时数据类型或者为非及时数据类型;

若为及时数据类型,则将所述新数据同步添加至cdn缓存、redis缓存以及mysql数据库缓存中;

若为非及时数据类型,则将所述新数据添加至处理队列中,以对所述新数据进行异步添加。

进一步的,所述cdn缓存的缓存时间为预设固定时长;

若待缓存数据为新数据,则所述redis缓存的缓存时间为第一时长;若待缓存数据为从mysql数据库缓存更新至redis缓存中的数据,则所述redis缓存的缓存时间为第二时长。

进一步的,所述方法还包括:

获取接口的启用状态是否更改为过期;

若为未过期,则所述接口在mysql数据库缓存的缓存时间为永久;

若更改为过期,则所述接口在mysql数据库缓存的缓存时间为预设缓存时长。

在本发明的另一较佳实施方式中,本申请实施例提供了一种数据的缓存装置,所述装置配置于前端服务器,所述装置包括:

访问请求接收模块,用于接收客户端发出的访问请求,并获取所述访问请求的请求地址;

cdn缓存访问模块,用于访问cdn缓存,若所述访问请求命中,则返回请求结果;

redis缓存访问模块,用于若未命中,则获取所述访问请求的版本号,并将所述版本号和所述请求地址作为请求标识对redis缓存进行访问,若命中则返回请求结果;

加锁处理模块,用于若仍未命中,则以所述请求标识对所述访问请求进行加锁处理,并以所述请求标识作为锁标识;

mysql数据库缓存访问模块,用于以所述锁标识访问mysql数据库缓存,若命中则刷新redis缓存,并返回请求结果。

可选的,所述装置还用于:

在所述以所述锁标识访问mysql数据库缓存之后,所述方法还包括:

若未命中,则将所述访问请求发送至后端服务器,供所述后端服务器通过网络获取请求结果,并返回请求结果。

进一步的,在将所述访问请求发送至后端服务器,供所述后端服务器通过网络获取请求结果,并返回请求结果之后,所述装置还用于:

根据所返回的请求结果更新所述mysql数据库缓存;并根据所返回的请求结果更新redis缓存。

进一步的,在所述以所述请求标识对所述访问请求进行加锁处理,并以所述请求标识作为锁标识之后,所述装置还用于:

确定锁的有效期;

若在所述锁的有效期内没有返回数据,则返回错误信息,并释放此锁资源。

进一步的,所述装置还用于:

若检测到新数据的添加事件,确定所述新数据的类型为及时数据类型或者为非及时数据类型;

若为及时数据类型,则将所述新数据同步添加至cdn缓存、redis缓存以及mysql数据库缓存中;

若为非及时数据类型,则将所述新数据添加至处理队列中,以对所述新数据进行异步添加。

进一步的,所述cdn缓存的缓存时间为预设固定时长;

若待缓存数据为新数据,则所述redis缓存的缓存时间为第一时长;若待缓存数据为从mysql数据库缓存更新至redis缓存中的数据,则所述redis缓存的缓存时间为第二时长。

进一步的,所述装置还用于:

获取接口的启用状态是否更改为过期;

若为未过期,则所述接口在mysql数据库缓存的缓存时间为永久;

若更改为过期,则所述接口在mysql数据库缓存的缓存时间为预设缓存时长。

在本发明的另一较佳实施方式中,本申请实施例提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如本申请实施例所述的数据的缓存方法。

在本发明的另一较佳实施方式中,本申请实施例提供了一种电子设备,包括存储器,处理器及存储在所述存储器上并可在所述处理器运行的计算机程序,所述处理器执行所述计算机程序时实现如本申请实施例所述的服务器侧数据的缓存方法。

本发明提供的技术方案具有以下技术效果:

本发明通过设置三级缓存,第一级采用cdn缓存,第二级采用redis缓存,第三级采用mysql数据库缓存,来提高前端服务器的性能,同时降低了redis和mysql的使用成本。

以下将结合附图对本发明的构思、具体结构及产生的技术效果作进一步说明,以充分地了解本发明的目的、特征和效果。

附图说明

图1是本申请实施例提供的数据的缓存方法的示意图;

图2是本申请实施例提供的数据的缓存装置的示意图;

图3是本申请实施例提供的一种电子设备的结构示意图。

具体实施方式

以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。

需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图示中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。

为了阐释的目的而描述了本发明的一些示例性实施例,需要理解的是,本发明可通过附图中没有具体示出的其他方式来实现。

图1是本申请实施例提供的数据的缓存方法的示意图,本实施例可适用于前端服务器返回数据的情况。如图1所示,所述方法由前端服务器执行,所述数据的缓存方法包括:

S110、接收客户端发出的访问请求,并获取所述访问请求的请求地址。

其中,客户端可以是与前端服务器通信连接的,客户端可以是根据用户的操作指令发出的访问请求,该方法请求可以是针对页面、数据等,以接口方式进行访问的请求。其中,请求地址可以是用户发出请求所输入的地址,例如url地址等。

S120、访问cdn缓存,若所述访问请求命中,则返回请求结果。

本方案中,cdn缓存为第一级缓存,客户端请求访问cdn缓存,如果命中cdn缓存则直接返回。http缓存是浏览器端缓存,cdn是服务器端缓存。举个例子来说明cdn的作用:cdn就是代理。厂家给商家发货,你从商家买货,商家就是cdn,很方便。和Http类似,客户端请求数据时,先从本地缓存查找,如果被请求数据没有过期,拿过来用,如果过期,就向CDN边缘节点发起请求。CDN便会检测被请求的数据是否过期,如果没有过期,就返回数据给客户端,如果过期,CDN再向源站发送请求获取新数据。CDN边缘节点缓存机制,一般都遵守http标准协议,通过http响应头中的Cache-Control和max-age的字段来设置CDN边缘节点的数据缓存时间。

S130、若未命中,则获取所述访问请求的版本号,并将所述版本号和所述请求地址作为请求标识对redis缓存进行访问,若命中则返回请求结果。

本方案中,如果没有获取数据则回源请求数据,对于原站返回的数据,cdn自动进行缓存。

本方案中具体的,对于回源的请求采用nginx+lua进行处理。其中,Nginx(enginex)是一个高性能的HTTP和反向代理web服务器。Lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

利用nginx获取所述访问请求的版本号version,采用lua-resty-redis模块对redis的连接池进行维护管理,以url+version为标识请求redis缓存数据,如果命中缓存则直接返回数据。

S140、若仍未命中,则以所述请求标识对所述访问请求进行加锁处理,并以所述请求标识作为锁标识。

本方案中,可选的,在所述以所述请求标识对所述访问请求进行加锁处理,并以所述请求标识作为锁标识之后,所述方法还包括:

确定锁的有效期;

若在所述锁的有效期内没有返回数据,则返回错误信息,并释放此锁资源。

具体的,对未命中redis缓存的请求进行mysql请求处理,处理步骤如下:

a.采用lua-resty-mysql模块对mysql的连接池进行管理。

b.采用lua-resty-lock进行请求的加锁处理,url+version为锁的标识,并设置锁的超时时间,如果在锁超时时间内没有返回数据,则返回错误信息,并释放此锁资源。

c.第一次获取锁的请求连接mysql数据库,以url+version为标识获取缓存内容,如果命中则刷新redis缓存,并释放该锁资源之后返回数据;后续以该url+version的请求就可以再次直接获取redis缓存了。

d.对未命中mysql缓存的请求则请求应用程序,然后对应用程序返回的结果进行c步骤操作。

本方案中,可选的,在所述以所述锁标识访问mysql数据库缓存之后,所述方法还包括:

若未命中,则将所述访问请求发送至后端服务器,供所述后端服务器通过网络获取请求结果,并返回请求结果。

如上述步骤d。

本方案中,可选的,在将所述访问请求发送至后端服务器,供所述后端服务器通过网络获取请求结果,并返回请求结果之后,所述方法还包括:

根据所返回的请求结果更新所述mysql数据库缓存;并根据所返回的请求结果更新redis缓存。

如上述步骤c。

本方案中,可选的,在所述以所述请求标识对所述访问请求进行加锁处理,并以所述请求标识作为锁标识之后,所述方法还包括:

确定锁的有效期;

若在所述锁的有效期内没有返回数据,则返回错误信息,并释放此锁资源。

如上述步骤b。

mysql的cache功能的key的生成原理是:把select语句按照一定的hash规则生成唯一的key,select的结果生成value,即key=>value。所以对于cache而言,select语句是区分大小写的,也区分空格的。两个select语句必须完完全全一致,才能够获取到同一个cache。

生成cache之后,只要该select中涉及到的table有任何的数据变动(insert,update,delete操作等),相关的所有cache都会被删除。因此只有数据很少变动的table,引入mysql的cache才较有意义。

所以,mysql的cache功能只适用于下列场合:数据变动较少,select较多的table。

S150、以所述锁标识访问mysql数据库缓存,若命中则刷新redis缓存,并返回请求结果。

本方案中,在访问mysql数据库缓存命中之后,可以根据命中的内容来对redis缓存,以便于后续访问时直接从redis缓存中返回请求结果。从而提高redis缓存和mysql数据库缓存的使用性能。

本申请提供的技术方案,第一级采用cdn缓存,第二级采用redis缓存,第三级采用mysql数据库缓存,来提高前端服务器的性能,同时降低了redis和mysql的使用成本。

在上述各技术方案的基础上,可选的,所述方法还包括:

若检测到新数据的添加事件,确定所述新数据的类型为及时数据类型或者为非及时数据类型;

若为及时数据类型,则将所述新数据同步添加至cdn缓存、redis缓存以及mysql数据库缓存中;

若为非及时数据类型,则将所述新数据添加至处理队列中,以对所述新数据进行异步添加。

具体的,缓存预热采用事件触发和批量两种方法进行处理。

事件触发方法多用于新数据的添加或变更,此数据分为两种类型,即及时数据和非技术数据,对于及时数据采用同步的方式进行预热,非及时的数据发送的消息队列进行异步预热。如新添加一篇新闻,在对新闻进行发布时间,新闻内容进行同步预热,该新闻的频道页则发送到队列进行异步预热。

批量预热多用于新接口的发布和接口逻辑的修改,可以根据时间范围、自增ID范围、页码范围、指定参数等参数进行批量预热。

在上述各技术方案的基础上,可选的,所述cdn缓存的缓存时间为预设固定时长;

若待缓存数据为新数据,则所述redis缓存的缓存时间为第一时长;若待缓存数据为从mysql数据库缓存更新至redis缓存中的数据,则所述redis缓存的缓存时间为第二时长。

对于cdn缓存,可以根据不同的接口设置固定的缓存时间。

对于redis缓存,可以在预热的过程中对redis缓存时间设置为7天,即为第一时长,在二级刷新redis数据时设置缓存时间为5分钟,即为第二时长。

在上述各技术方案的基础上,可选的,所述方法还包括:

获取接口的启用状态是否更改为过期;

若为未过期,则所述接口在mysql数据库缓存的缓存时间为永久;

若更改为过期,则所述接口在mysql数据库缓存的缓存时间为预设缓存时长。

在上述各技术方案的基础上,可选的,所述方法还包括:

获取接口的启用状态是否更改为过期;

若为未过期,则所述接口在mysql数据库缓存的缓存时间为永久;

若更改为过期,则所述接口在mysql数据库缓存的缓存时间为预设缓存时长。

对于mysql数据缓存,可以对启用状态的接口则没有过期时间,对已过期的接口设置为5分钟的过期时间,即预设缓存时长,5分钟后后台进程会定时清除过期的缓存,启用、过期的状态可以是通过接口管理系统控制的。

图2是本申请实施例提供的数据的缓存装置的示意图,如图2所示,所所述装置配置于前端服务器,所述装置包括:

访问请求接收模块210,用于接收客户端发出的访问请求,并获取所述访问请求的请求地址;

cdn缓存访问模块220,用于访问cdn缓存,若所述访问请求命中,则返回请求结果;

redis缓存访问模块230,用于若未命中,则获取所述访问请求的版本号,并将所述版本号和所述请求地址作为请求标识对redis缓存进行访问,若命中则返回请求结果;

加锁处理模块240,用于若仍未命中,则以所述请求标识对所述访问请求进行加锁处理,并以所述请求标识作为锁标识;

mysql数据库缓存访问模块250,用于以所述锁标识访问mysql数据库缓存,若命中则刷新redis缓存,并返回请求结果。

上述产品可执行本申请实施例所提供的方法,具备执行方法相应的功能模块和有益效果。

本申请实施例还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种基于太阳能板提供电源的方法,该方法包括:

接收客户端发出的访问请求,并获取所述访问请求的请求地址;

访问cdn缓存,若所述访问请求命中,则返回请求结果;

若未命中,则获取所述访问请求的版本号,并将所述版本号和所述请求地址作为请求标识对redis缓存进行访问,若命中则返回请求结果;

若仍未命中,则以所述请求标识对所述访问请求进行加锁处理,并以所述请求标识作为锁标识;

以所述锁标识访问mysql数据库缓存,若命中则刷新redis缓存,并返回请求结果。

存储介质——任何的各种类型的存储器设备或存储设备。术语“存储介质”旨在包括:安装介质,例如CD-ROM、软盘或磁带装置;计算机系统存储器或随机存取存储器,诸如DRAM、DDR RAM、SRAM、EDO RAM,兰巴斯(Rambus)RAM等;非易失性存储器,诸如闪存、磁介质(例如硬盘或光存储);寄存器或其它相似类型的存储器元件等。存储介质可以还包括其它类型的存储器或其组合。另外,存储介质可以位于程序在其中被执行的计算机系统中,或者可以位于不同的第二计算机系统中,第二计算机系统通过网络(诸如因特网)连接到计算机系统。第二计算机系统可以提供程序指令给计算机用于执行。术语“存储介质”可以包括可以驻留在不同位置中(例如在通过网络连接的不同计算机系统中)的两个或更多存储介质。存储介质可以存储可由一个或多个处理器执行的程序指令(例如具体实现为计算机程序)。

当然,本申请实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的数据的缓存方法的操作,还可以执行本申请任意实施例所提供的数据的缓存方法中的相关操作。

图3是本申请实施例提供的一种电子设备的结构示意图。该电子设备可以是服务器,还可以是终端。

下面参考图3,其示出了适于用来实现本申请实施例的电子设备300的结构示意图。本申请实施例中的电子设备可以是用来提供信息显示功能的电子设备。图3示出的电子设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。

如图3所示,电子设备300可以包括处理装置(例如中央处理器、图形处理器等)301,其可以根据存储在只读存储器(ROM)302中的程序或者从存储装置308加载到随机访问存储器(RAM)303中的程序而执行各种适当的动作和处理。在RAM 303中,还存储有电子设备300操作所需的各种程序和数据。处理装置301、ROM 302以及RAM 303通过总线304彼此相连。输入/输出(I/O)接口305也连接至总线304。

通常,以下装置可以连接至I/O接口305:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置306;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置307;包括例如磁带、硬盘等的存储装置308;以及通信装置309。通信装置309可以允许电子设备300与其他电子设备进行无线或有线通信以交换数据。虽然图3示出了具有各种装置的电子设备300,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。

特别地,根据本申请的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置309从网络上被下载和安装,或者从存储装置308被安装,或者从ROM 302被安装。在该计算机程序被处理装置301执行时,执行本申请实施例的方法中限定的上述功能。

需要说明的是,本申请上述的计算机可读介质可以是计算机可读信号介质或者计算机可读介质或者是上述两者的任意组合。计算机可读介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。

上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。

上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备执行:

接收客户端发出的访问请求,并获取所述访问请求的请求地址;

访问cdn缓存,若所述访问请求命中,则返回请求结果;

若未命中,则获取所述访问请求的版本号,并将所述版本号和所述请求地址作为请求标识对redis缓存进行访问,若命中则返回请求结果;

若仍未命中,则以所述请求标识对所述访问请求进行加锁处理,并以所述请求标识作为锁标识;

以所述锁标识访问mysql数据库缓存,若命中则刷新redis缓存,并返回请求结果。

可以以一种或多种程序设计语言或其组合来编写用于执行本申请的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在乘客计算机上执行、部分地在乘客计算机上执行、作为一个独立的软件包执行、部分在乘客计算机上部分在远程计算机上执行、或者完全在远程计算机或电子设备上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到乘客计算机,或者,可以连接到外部计算机。

附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,模块、单元的名称在某种情况下并不构成对该模块、单元本身的限定。

以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。

相关技术
  • 一种数据缓存方法、装置、电子设备和存储介质
  • 一种数据缓存方法、装置、电子设备及存储介质
技术分类

06120112669762