技术领域
[0001] 本
发明涉及存储技术领域,具体涉及一种应用系统的二级缓存方法。
背景技术
[0002] 随着应用程序对应用系统的高性能需求的增加,传统的单纯依靠
数据库存取数据的模式已经无法满足大型互联网类应用的需求,许多
软件厂商也纷纷选择缓存技术作为其架构上的补充,以减轻数据库的
访问压
力。
[0003] 目前,根据缓存的存储
位置可将缓存分为二大类:本地缓存、
服务器缓存。目前应用系统可以根据系统自身的需要以及两类缓存各自特性来选择使用哪一种缓存,由于应用系统根据项目需要,只能选择一种缓存技术应用到项目中,从而无法充分发挥缓存的优势,造成资源浪费,数据存储效率降低,甚至降低系统性能。
发明内容
[0004] 本发明的目的在于提供一种应用系统的二级缓存方法,用于提高数据存储效率,提高应用系统的性能。
[0005] 为了达到上述目的,本发明采用这样的如下技术方案:
[0006] 本发明提供一种应用系统的二级缓存方法,包括:
[0007] 应用系统接收用户下发的数据库
接口查询指令;
[0008] 所述应用系统根据所述数据库接口查询指令读取数据库接口上注入的缓存功能代码;
[0009] 所述应用系统根据所述缓存功能代码读取所述应用系统的本地缓存;
[0010] 若所述应用系统从所述本地缓存中读取到数据对象,将读取到的数据对象返回给所述用户;
[0011] 若所述应用系统没有从所述本地缓存中读取到数据对象,所述应用系统向服务器缓存发送查询
请求;
[0012] 若所述应用系统从所述服务器缓存接收到数据对象,将接收到的数据对象返回给所述用户,并将接收到的数据对象缓存到所述本地缓存中。
[0013] 采用上述技术方案后,本发明提供的技术方案将有如下优点:
[0014] 应用系统接收用户下发的数据库接口查询指令;应用系统根据数据库接口查询指令读取数据库接口上注入的缓存功能代码;应用系统根据缓存功能代码读取应用系统的本地缓存;若应用系统从本地缓存中读取到数据对象,将读取到的数据对象返回给用户;若应用系统没有从本地缓存中读取到数据对象,应用系统向服务器缓存发送查询请求;若应用系统从服务器缓存接收到数据对象,将接收到的数据对象返回给用户,并将接收到的数据对象缓存到本地缓存中。本发明
实施例中基于注释实现的方式将二级缓存功能集成到缓存功能方法中,通过注解配置方式,灵活配置实现本地缓存和服务器缓存两者的有效结合,从而发挥各自缓存优势,达到通过缓存方式实现应用系统高并发的目的。提高数据存储效率,提高应用系统的性能。
附图说明
[0015] 图1为本发明实施例提供一种应用系统的二级缓存方法的流程方框示意图;
[0016] 图2为本发明实施例提供的基于注释实现的二级缓存方案的实现原理示意图。
具体实施方式
[0017] 本发明实施例提供了一种应用系统的二级缓存方法,用于提高数据存储效率,提高应用系统的性能。
[0018] 接下来将结合本发明附图,对本发明实施例中的技术方案进行清楚、完整地描述,下面所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域的技术人员所获得的所有其他实施例,都属于本发明保护的范围。
[0019] 本
申请实施例提供的应用系统的二级缓存方法可应用于应用系统中,该应用系统具有二级缓存,即同时存在本地缓存和服务器缓存,且该应用系统还可以通过数据库接口与数据库进行通信,本申请实施例中应用系统尽量减少与数据库的通信,从而减少获取数据时读取数据库的I/O开销。
[0020] 本发明的目的在于提供了一种注释实现的二级缓存方法,实现了本地缓存和服务器缓存二大类缓存技术的有效整合,使用本发明技术的二级缓存技术,充分发挥本地缓存和服务器缓存的各自优势,通过在方法类上注释的方式,利用切面编程技术注入缓存功能代码,实现两类缓存的有效结合,提供便利配置的同时也降低原有系统的改造成本。
[0021] 如图1所示,本发明实施例提供的一种应用系统的二级缓存方法,包括如下步骤:
[0022] 10、应用系统接收用户下发的数据库接口查询指令。
[0023] 其中,用户可以通过应用系统获取数据对象,用户首先向应用系统发送数据库接口查询指令,数据库接口用于应用系统查询数据库。其中,数据库中存储有用户所需要的各种数据对象,但是应用系统与数据库之间的查询开销较大。
[0024] 20、应用系统根据数据库接口查询指令读取数据库接口上注入的缓存功能代码。
[0025] 其中,应用系统预先在数据库接口上注入缓存功能代码,该缓存功能代码用于在数据库接口读取之前,先查询缓存,该缓存功能代码可以指示二级缓存的查询方法,例如先查询应用系统的本地缓存,若没有查询到结果,则可以查询服务器缓存,本申请实施例中对于缓存功能代码所包括的代码内容不做限定。
[0026] 在本申请的一些实施例中,缓存功能代码通过代码切面编程注入到数据库接口中。
[0027] 其中,通过在方法类上注释的方式,可以利用切面编程技术注入缓存功能代码,从而在数据库接口方法执行之前,先跳转到查询本地缓存。
[0028] 在本申请的一些实施例中,缓存功能代码,包括:缓存名称配置信息、超时时间配置信息和缓存类型配置信息。
[0029] 其中,缓存名称配置信息可以指示应用系统配置的二级缓存:本地缓存和服务器缓存,超时时间配置信息是指每种缓存类型的查询最大时间,缓存类型配置信息是指二级缓存中每一种缓存的具体配置,对于缓存功能代码所包括的具体内容,此处不做限定。
[0030] 30、应用系统根据缓存功能代码读取应用系统的本地缓存。
[0031] 若应用系统从本地缓存中读取到数据对象,执行步骤40,若应用系统没有从本地缓存中读取到数据对象,执行步骤50。
[0032] 在本申请实施例中,在应用系统中,为了提高系统的响应速度,可以把常用的数据对象提前读入到本地缓存中,这样可以减少许多文件系统的输入输出(Input/Output,I/O)操作。
[0033] 40、若应用系统从本地缓存中读取到数据对象,将读取到的数据对象返回给用户。
[0034] 其中,本地缓存中可以预先存储数据对象,若本地缓存中可以查询到的数据对象,则直接将读取到的数据对象返回给用户,提高用户查询数据的效率。
[0035] 50、若应用系统没有从本地缓存中读取到数据对象,应用系统向服务器缓存发送查询请求。
[0036] 步骤50执行之后,执行步骤60。
[0037] 其中,本地缓存可能存在无法读取到数据对象的情况,此时应用系统可以按照缓存代码功能的要求从服务器缓存中读取数据对象,例如应用系统向服务器缓存发送查询请求,以实现从服务器缓存中读取数据对象,实现应用系统的二级缓存查询,保证用户能够从应用系统查询到所需要的数据对象。
[0038] 60、若应用系统从服务器缓存接收到数据对象,将接收到的数据对象返回给用户,并将接收到的数据对象缓存到本地缓存中。
[0039] 其中,服务器缓存中可以预先存储数据对象,若服务器缓存中可以查询到的数据对象,则应用系统可以从服务器缓存中读取到数据对象,然后将读取到的数据对象返回给用户,提高用户查询数据的效率。另外,应用系统还可以将接收到的数据对象缓存到本地缓存,以便于下次直接从本地缓存中查询到数据对象,提高本地缓存命中的概率。
[0040] 本申请的一些实施例中,应用系统还可以执行如下的方法步骤:
[0041] 若应用系统没有从服务器缓存中读取到数据对象,应用系统通过数据库接口向数据库发送查询请求;
[0042] 应用系统从数据库接收到数据对象,将接收到的数据对象返回给用户,并将接收到的数据对象缓存到本地缓存和服务器缓存中。
[0043] 其中,应用系统与数据库进行交互,从而可以从数据库接收到数据对象,将读取到的数据对象返回给用户,以保证用户可以成功查询数据。应用系统还可以将接收到的数据对象缓存到本地缓存和服务器缓存,以便于下次直接从本地缓存或者服务器中查询到数据对象,减少应用系统和数据库之间的交互次数,从而减少I/O开销。
[0044] 进一步的,本申请的一些实施例中,应用系统还可以执行如下的方法步骤:
[0045] 应用系统从数据库接收到数据对象之后,应用系统对接收到的数据对象进行数据对象序列化处理。
[0046] 其中,应用系统可以通过实现序列化接口方式以实现数据序列化,数据序列化处理之后可以存储到本地缓存和服务器缓存中,以方便应用系统查询本地缓存和服务器缓存。
[0047] 本申请的一些实施例中,前述的数据对象,包括:层叠样式表css数据、JavaScript数据和图片数据。
[0048] 其中,数据对象可以包括层叠样式表(Cascading Style Sheets,css)数据,JavaScript数据和其他各种图片数据,对于数据对象的具体类型,此处不做限定。
[0049] 在本申请的一些实施例中,应用系统还可以执行如下的方法步骤:
[0050] 应用系统判断是否满足缓存周期性更新条件;
[0051] 若满足周期性更新条件,应用系统通过数据库接口向数据库发送周期性更新请求;
[0052] 应用系统从数据库接收到周期性更新数据,将接收到的周期性更新数据缓存到本地缓存和服务器缓存中。
[0053] 其中,使用二级缓存需要考虑本地缓存和服务器缓存的数据一致性,为了防止因各种原因导致本地缓存没有及时更新,可加入定时或定次更新策略,当缓存被访问过特定次数或超时时,强制执行一次数据库接口方法,以达到同步更新本地缓存和服务器缓存的目的,保证缓存的一致性。
[0054] 通过前述实施例对本发明的举例说明可知,应用系统接收用户下发的数据库接口查询指令;应用系统根据数据库接口查询指令读取数据库接口上注入的缓存功能代码;应用系统根据缓存功能代码读取应用系统的本地缓存;若应用系统从本地缓存中读取到数据对象,将读取到的数据对象返回给用户;若应用系统没有从本地缓存中读取到数据对象,应用系统向服务器缓存发送查询请求;若应用系统从服务器缓存接收到数据对象,将接收到的数据对象返回给用户,并将接收到的数据对象缓存到本地缓存中。本发明实施例中基于注释实现的方式将二级缓存功能集成到缓存功能方法中,通过注解配置方式,灵活配置实现本地缓存和服务器缓存两者的有效结合,从而发挥各自缓存优势,达到通过缓存方式实现应用系统高并发的目的。提高数据存储效率,提高应用系统的性能。
[0055] 为便于更好的理解和实施本发明实施例的上述方案,下面举例相应的应用场景来进行具体说明。
[0056] 如图2所示,本发明实施例在于提供通过注释实现的二级缓存方法,实现了本地缓存和服务器缓存二大类缓存技术的有效整合,使用本发明技术的二级缓存技术,充分发挥本地缓存和服务器缓存的各自优势,通过在方法类上注释的方式,利用切面编程技术注入缓存功能代码,实现两类缓存的有效结合,提供便利配置的同时也降低原有系统的改造成本。
[0057] 缓存就是将程序或系统经常要调用的对象存于内存中,以便在使用时可以快速调用,不必再去创建新的重复的实例。这样做可以减少系统开销,提高系统效率。根据缓存的存储位置,可将缓存分为本地缓存和服务器缓存。
[0058] 其中,本地缓存是指数据缓存在本地环境上,例如应用系统的本地内存中,服务器缓存就是将数据缓存在
应用服务器上,应用系统可以和应用服务器进行通信,如果是分布式系统,可以使用本发明实施例中的统一部署的分布式缓存技术。在应用系统中,为了提高系统的响应速度,可以把常用的各种数据对象(包括css数据,JavaScript数据和其他各种图片数据)提前读入到本地缓存中,这样可以减少许多文件系统的I/O操作。但是,当实际的数据发生改变的时候,缓存不能得到及时的刷新,造成了一定的滞后现象。而且本地缓存无法满足缓存共享、分布式部署、大字段缓存的需求,因本地缓存的局限性。
[0059] 本申请实施例中,应用系统还可以同时使用服务器缓存,即统一部署服务器缓存应用,将数据同步到服务器缓存上,服务器缓存在动态扩展性、高可用性、易用性、分布式代码执行等方面都存在极大优势,但是服务器缓存的配置繁杂,容错机制差,性能不如本地缓存等。本发明实施例基于本地缓存和服务器缓存提出一种二级缓存的方法,将本地缓存与服务器缓存有效结合,利用注释实现方式,非常容易的将缓存功能注入到应用系统中,充分发挥两类缓存各自优势,
[0060] 举例说明如下,在应用系统的数据库接口方法上,通过注解方式注入缓存功能代码,注解是一种通过接口方法前加代码注解的实现方式,利用切面编程技术(即利用代码切面编程技术,在执行接口方法时,解析注解语法),使应用系统在调用数据库接口方法之前,先跳转到自定义的缓存方法上,从而能够判断有无缓存并返回数据对象,注释实现方法可以灵活的将缓存名称、超时时间、缓存类型等配置信息传入缓存方法中,从而达到与原业务代码解耦,方便管理和维护。
[0061] 在本发明实施例提供的二级缓存方法中,通过注解语句中的缓存名称,先在本地缓存中查询是否存在数据,若本地缓存中存在该数据则返回数据,否则查询服务器缓存是否存在数据,若服务器缓存中存在该数据则返回数据,同时将数据缓存到本地缓存中,如果服务器缓存也不存在需要查询的数据,则跳转到数据库接口方法,查询数据库,根据接口返回值,将数据对象序列化(通过实现序列化接口方式以实现数据序列化)后再分别缓存到服务器缓存和本地缓存。从而减少应用服务器和服务器缓存之间的网络开销,达到二级缓存的目的,以提高系统性能,减轻数据库压力。
[0062] 本地缓存的存放更新
频率低,但可以存储请求量很高的数据,对于更新频率很高的数据可以由服务器缓存来承担。通过注解方式标明数据存储是否使用缓存、缓存的超时时间、是否开启本地缓存等。当更新缓存时,依次更新服务器缓存和本地缓存,从而减少获取数据的I/O开销。
[0063] 采用本发明的技术方案后,应用系统只需通过注释方式,即可实现二级缓存方法,将原本需要访问数据库的对像存储在本地缓存和服务器缓存中,能够极大减轻网络开销,满足系统高并发需求。
[0064] 综上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照上述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对上述各实施例所记载的技术方案进行
修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。