具体实施方式
在现有技术中,为了避免给数据库造成很大的数据读取压力,服务设备往往还会将数据库存储的数据也写入缓存中。缓存中的数据与数据库的数据需要保持一致。一般而言,当数据库更新后,服务设备也会即时对缓存进行同步更新。
服务设备对缓存进行更新的过程为:服务设备首先将缓存中待更新数据删除,然后将数据库中对应于所述待更新数据的已更新数据写入缓存。然而,由于对缓存的更新过程需要时间,因此,当已将缓存中的待更新数据删除,却又未将已更新数据写入时,倘若有用户访问服务设备请求获取该数据,那么,服务设备在发现缓存中没有数据后,就不得不直接对数据库进行数据读取,给数据库增加了一定的压力。
尤其是在访问请求高并发的场景(即同一时间大量用户访问服务设备以请求服务设备读取并返回数据)下,倘若服务设备此时正在对缓存进行更新(导致很多待更新的数据在缓存中是缺失的),那么,服务设备就不得不在同一时间集中对数据库进行数据读取操作,这给数据库造成很大的压力。
针对以上问题,在本发明中,尽可能将用户访问的时机与更新缓存的时机错开,使得用户访问时,服务设备可以尽可能从缓存中读取数据返回给用户,有效缓解数据库的压力。
需要说明的是,在本说明书实施例中,所述目标用户可以是服务设备所服务的任一用户,也可以是服务设备所服务的某个特定用户。为了描述的方便,后文以目标用户为例,对本方案进行说明。
还需要说明的是,考虑到不同的用户的预测访问频率并不是一致的,如果根据用户的个性化的预测访问频率对共用缓存进行更新,则无法实现本发明的目的。
举例来说,假设用户A早上8点进行当天的第一次访问,预测用户A在8点4分至6分进行第二次访问,在8点9分至11分进行第三次访问。用户B早上8点1分进行当天的第一次访问,预测用户A在8点5分至7分进行第二次访问,在8点10分至12分进行第三次访问。如此,倘若用户A和用户B共用缓存,那么根据用户A的预测访问频率,可以在8点至8点4分以及8点6分至8点8更新缓存,而根据用户B的预测访问频率,可以在8点1分至5分以及8点7分至10分更新缓存。显然,由于用户A的预测访问频率与用户B的预测访问频率不一致,因此,用户A的可更新缓存的时段与用户B的可更新缓存的时段是冲突的。
因此,在本发明中,为单个用户(目标用户)创建专用缓存。不同用户的专用缓存的更新策略不同,是根据不同用户的预测访问频率进行独立更新的。
为了使本领域技术人员更好地理解本说明书实施例中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于保护的范围。
以下结合附图,详细说明本说明书各实施例提供的技术方案。
图1是本说明书实施例提供的一种缓存更新方法的流程示意图,包括以下步骤:
S100:当需要基于数据库对所述专用缓存进行更新时,判断当前时间点是否位于所述目标用户对应的任一预测访问时段内,若否,则执行步骤S102,若是,则执行步骤S104。
本方法的执行主体可以是向用户提供数据返回服务的服务设备。
在本说明书实施例中,用户向服务设备发送的访问请求用于请求服务设备返回相应的数据。举例来说,在浏览器/服务器架构下,所述服务设备具体可以是服务器,用户可以通过浏览器发送的页面访问请求时,服务器会根据页面访问请求,将相应的页面的渲染数据返回给浏览器进行页面渲染。
需要说明的是,页面的渲染数据一般包括图片、文字等内容,其所占的存储空间较小,因此,服务设备可以将数据库中存储的所有页面的渲染数据也写入到缓存中,所付出的存储成本较小,也可以缓解数据库的压力,提升数据读取速度。
在本说明书实施例中,可以总是采用本发明给出的更新策略更新目标用户的专用缓存。也可以确定一个指定时段,仅在所述指定时段内采用本发明给出的更新策略更新目标用户的专用缓存;在所述指定时段外,采用现有的更新策略(数据库一经更新,则即时更新缓存)更新目标用户的专用缓存,或者,在所述指定时段外,不使用目标用户的专用缓存,采用现有的更新策略更新共用缓存。
其中,所述指定时段可以是用户访问高峰时段。举例来说,假设所述服务设备是电商平台的服务器,那么,由于可以预测在今年的双11购物节当天,服务器接收到的页面访问请求数量巨大(大于设定值),显然,今年的11月11日当天0点至24点即是用户访问高峰时段。
在本说明书实施例中,专用缓存可以是预先为目标用户创建好的。此外,如果仅在上述的指定时段内采用本发明的更新策略,则既可以在指定时段之前为目标用户预先创建专用缓存,也可以在接收到所述目标用户在所述指定时段内首次发送的访问请求时,为目标用户即时创建专用缓存。
在本说明书实施例中,确定目标用户对应的至少一个预测访问时段,目标用户有较大概率在预测访问时段内的任一时间点访问服务设备。进一步地,所述目标用户对应的至少一个预测访问时段可以是周期性出现的多个预测访问时段,如图2所示。
在本说明书实施例中,可以采用多种方式确定所述目标用户的预测访问时段。例如,可以由技术人员根据经验指定所述目标用户对应的至少一个预测访问时段,也可以根据设置好的预测规则或预测模型,确定所述目标用户对应的至少一个预测访问时段。
在本说明书实施例中,基于数据库对所述专用缓存进行更新的时机可以根据实际需要指定。例如,当数据库发生更新时,需要基于数据库对所述专用缓存进行更新。又如,当技术人员发出更新指令时,需要基于数据库对所述专用缓存进行更新。
当需要对所述专用缓存进行更新时,可以首先判断当前是否适合进行更新,即判断当前时间点是否位于所述目标用户对应的任一预测访问时段内。如果当前时间点在所述目标用户对应的任一预测访问间隔内,则说明目标用户此时访问的概率较大,不适合进行缓存更新;如果当前时间点不在所述目标用户对应的任一预测访问间隔内,则说明目标用户此时访问的概率较小,适合进行缓存更新。
S102:对所述专用缓存进行即时更新。
S104:对所述专用缓存进行延时更新,以使得延时更新的过程位于所述目标用户对应的所有预测访问时段之外。
在本文中,即时更新是指,当发现数据库有更新时,立刻对开始对所述专用缓存进行更新。延时更新是指,当发现数据库有更新时,不立刻对开始对所述专用缓存进行更新,而是在所述目标用户对应的所有预测访问时段之外对所述专用缓存进行更新。
进一步地,如果当前时间点在所述目标用户对应的任一预测访问间隔内,可以在所述当前时间点所位于的预测访问时段之后、下一个预测访问时段之前,对所述专用缓存进行更新。这种情况下,所述当前时间点所位于的预测访问时段通常并不是所述目标用户的最后一个预测访问时间段。
如此,可以尽可能在所述目标用户的下一次访问之前,完成数据库与所述专用缓存的数据同步,尽可能使得从专用缓存中读取并返回给目标用户的数据的版权最新,提升用户体验。可见,通过本发明,可以兼顾数据库性能与用户体验。
进一步地,如果当前时间点在所述目标用户对应的任一预测访问间隔内,也可以放弃本次更新。如此,唯有需要更新时所在的时间点不位于任一预测访问间隔内的情况下,才会进行缓存更新。这种情况下,上述延时更新具体是指,放弃本次更新,后续在所有预测访问时段之外如果再次需要更新,则对所述专用缓存进行更新。
此外,在本说明书实施例中,如果仅在指定时段内执行图1所示的缓存更新方法,则可以在所述指定时段内第一次接收到所述目标用户发送的访问请求之后,以接收到所述访问请求的时间点为起始时间点,结合所述目标用户的预测访问频率,确定所述目标用户的至少一个预测访问时段。
本文提供了一种用于确定目标用户对应的至少一个预测访问时段的方式,如下:
可以在所述指定时段内接收到所述目标用户发送的访问请求之后,通过如下方式确定所述目标用户对应的第n个预测访问时段Cn:
Cn为T+n*S-D1至T+n*S+D2;
其中,n∈(1,N),N为所述目标用户对应的预测访问时段的数量,T为在所述指定时段内第一次接收到所述目标用户发送的访问请求的时间点,S为根据所述目标用户的历史访问行为确定的所述目标用户进行两次相邻访问的间隔时长的期望值,D1与D2为大于0的常量。
上述S实际上表征了目标用户的预测访问频率。D1与D2是可以根据实际需要指定的时长,D1(或D2)越大,预测访问时段囊括的时间点就越多,目标用户访问的实际时间点落入预测访问时段的概率就越大。
在本说明书实施例中,可以采用如下方式确定所述S:
针对历史上所述目标用户发送过的任意两个相邻的访问请求,将接收到该两个相邻的访问请求所间隔的时长的实际值,作为所述目标用户对应的一个历史间隔时长;
获取所述目标用户对应的多个历史间隔时长,并根据所述目标用户对应的多个历史间隔时长,确定所述目标用户进行两次相邻访问的间隔时长的期望值。
进一步地,根据所述目标用户对应的多个历史间隔时长,确定所述目标用户进行两次相邻访问的间隔时长的期望值的方式可以有以下两种:
方式1:对所述目标用户对应的多个历史间隔时长计算平均值,作为所述目标用户进行两次相邻访问的间隔时长的期望值。
方式2:指定除所述目标用户外的多个其他用户;针对每个其他用户,获取该其他用户对应的多个历史间隔时长,并对该其他用户对应的多个历史间隔时长计算平均值,作为该其他用户对应的平均值;并且,对所述目标用户对应的多个历史间隔时长计算平均值,作为所述目标用户对应的平均值;对所述目标用户对应平均值与所述多个其他用户分别对应的平均值计算平均值,作为所述目标用户进行两次相邻访问的间隔时长的期望值。
对于方式2,可以首先计算平均值集合中的各平均值的离散程度表征值,其中,所述离散程度表征值与各平均值的离散程度正相关,所述平均值集合包含所述目标用户对应平均值与所述多个其他用户分别对应的平均值。然后,若所述离散程度表征值小于预设阈值,则对所述目标用户对应平均值与所述多个其他用户分别对应的平均值计算平均值。各平均值的离散程度较小,对各平均值求平均所得到的所述S才能够较为准确的预测用户的访问时机。
在本说明书实施例中,如果仅在所述指定时段采用本发明提供的缓存更新策略,则无需在指定时段外确定所述目标用户的预测访问时段。也就是说,N需要满足:CN位于所述指定时段内,即所述目标用户对应的最后一个预测访问时段也在所述指定时段内。
图3是本说明书实施例提供的目标用户对应的预测访问时段的示意图。如图3所示,N=3,可以使得所述目标用户的所有预测访问时段都在指定时段内。
此外,考虑到在实践中,更新缓存需要一定的时间(通常是几秒),因此,可以设置D1大于D2,并且,D1与D2的差为经过一个缓存更新过程所需的时长的预测值,参见图4。如此,在目标用户相邻两次访问的间隔期内,如果进行缓存更新,则更新过程大概率会在进入下一个预测访问时段之前结束。
举例来说,假设用户张三进行两次相邻访问的间隔时长的期望值是5分钟,指定时段为2019年11月11日0点至24点,用户张三在2019年11月11日8点进行了第一次访问,即T为8点。此外,预设D1为3秒,D2为2秒,因此,可以确定用户张三下一次访问的时间点大概率位于8点4分57秒至8点5分2秒之间,可以确定用户张三下下次访问的时间点大概率落入8点9分57秒至8点10分2秒之间。
另外,为了达到仅在所述指定时段采用本发明提供的缓存更新策略的目的,除了仅在所述指定时段内确定预测访问时段之外,也可以在所述指定时段结束后,删除所述专用缓存。
图5是本说明书实施例提供的一种数据返回方法的流程示意图,包括如下步骤:
S500:接收目标用户发送的访问请求。
S502:若存在所述目标用户的专用缓存,则判断所述专用缓存中是否存储有满足所述访问请求的数据。
S504:若所述专用缓存中存储有满足所述访问请求的数据,则从所述专用缓存中读取满足所述访问请求的数据并返回。
本方法的执行主体是所述服务设备。实际应用中,目标用户进行访问时,服务设备不一定已经为所述目标用户创建了专用缓存。例如,如果仅需要在指定时段内采用图1所示的缓存更新策略,则可以在指定时段开始时在即时为目标用户创建专用缓存。如果目标用户在指定时段之前进行访问,则不存在专用缓存。
此外,在实际应用中,目标用户的实际访问频率并一定与预测访问频率一致。也就是说,目标用户实际上访问的时间点不一定在任一预测访问时段内。因此,有时虽然存在目标用户的专用缓存,但是由于目标用户实际访问的时间点在预测访问时段之外,因此,专用缓存可能正在更新,无法为目标用户提供数据。
图6是本说明书实施例提供的另一种数据返回方法的流程示意图,包括如下步骤:
S600:在指定时段内,接收目标用户发送的访问请求。
S602:判断是否创建有所述目标用户对应的专用缓存,若是,则执行步骤S604,若否,则执行步骤S606。
S604:判断所述专用缓存中是否存储有满足所述访问请求的数据,若是,则执行步骤S608,若否,则执行步骤S610。
S606:判断共用缓存中是否存储有满足所述访问请求的数据,若是,则执行步骤S612,若否,则执行步骤S610。
S608:从所述专用缓存中读取满足所述访问请求的数据并返回。
S610:从数据库中读取满足所述访问请求的数据并返回。
S612:从所述共用缓存中读取满足所述访问请求的数据并返回。
图7是本说明书实施例提供的一种缓存更新装置的结构示意图,包括:
预处理模块701,为目标用户创建专用缓存,所述专用缓存基于数据库进行更新,以及,确定所述目标用户对应的至少一个预测访问时段;
更新模块702,当需要基于数据库对所述专用缓存进行更新时,判断当前时间点是否位于所述目标用户对应的任一预测访问时段内;若否,则对所述专用缓存进行即时更新;若是,则对所述专用缓存进行延时更新,以使得延时更新的过程位于所述目标用户对应的所有预测访问时段之外。
所述预处理模块701,在指定时段内接收到所述目标用户发送的访问请求之后,通过如下方式确定所述目标用户对应的第n个预测访问时段Cn:Cn为T+n*S-D1至T+n*S+D2;其中,n∈(1,N),N为所述目标用户对应的预测访问时段的数量,T为接收到所述访问请求的时间点,S为根据所述目标用户的历史访问行为确定的所述目标用户进行两次相邻访问的间隔时长的期望值,D1与D2为大于0的常量。
所述装置还包括:
删除模块703,在所述指定时段结束后,删除所述专用缓存。
图8是本说明书实施例提供的一种数据返回装置的结构示意图,包括:
接收模块801,接收目标用户发送的访问请求;
处理模块802,若存在所述目标用户的专用缓存,则判断所述专用缓存中是否存储有满足所述访问请求的数据;所述专用缓存是通过权利要求1~9任一项所述的方法进行更新的;若所述专用缓存中存储有满足所述访问请求的数据,则从所述专用缓存中读取满足所述访问请求的数据并返回。
本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现图1或图5或图6所示的方法。
图9示出了本说明书实施例所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现图1或图5或图6所示的方法。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务设备,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
上述实施例阐明的系统、方法、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的方法实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。