一种缓存数据刷新方法及装置与流程

文档序号:14990588发布日期:2018-07-20 22:08阅读:226来源:国知局

本发明实施例涉及通信技术领域,具体涉及一种缓存数据刷新方法及装置。



背景技术:

缓存是一种常驻于内存的内存数据库,内存的读取速度远远快于程序在磁盘读取数据的速度。在设计程序的时候常常会考虑使用缓存,将经常访问的数据放到内存上面这样可以提高访问数据的速度,同时可以降低磁盘或数据库的压力。

目前,通常采用memcached的缓存策略,memcached是一个高性能的分布式内存对象缓存系统,用于动态web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。memcached为了提高数据的存储速度,在安装启动memcached服务的时候,它会自动将分配给memcached的内存分隔为大小不一致的很多块。每当任意一个大小的需要缓存的数据提交过来的时候memcached将会自动找到符合这个数据大小最适合的内存块,然后把数据放到这个块里面。

在实现本发明实施例的过程中,发明人发现在使用memcached的缓存策略时,默认情况下会采用名为slaballocator的机制分配、管理内存,该机制给memcached带来了内存使用效率问题:由于分配的是特定长度的内存,因此无法有效利用分配的内存。而且,memcached仅仅支持简单的key/value类型的数据,在memcached里,需要将数据拿到客户端来进行类似的修改再set回去,这大大增加了网络io的次数和数据体积,而且该策略不具备数据持久化和数据同步的功能。



技术实现要素:

本发明实施例的一个目的是解决现有技术由于使用memcached导致内存使用效率较低、不具备数据持久化和数据同步的问题。

本发明实施例提出了一种缓存数据刷新方法,包括:

获取oracle数据库的缓存任务;

将与所述缓存任务对应的待缓存数据刷新至应用数据库redis,并生成与所述待缓存数据对应的数据刷新信号key;

在将所述待缓存数据刷新至业务处理程序的内部缓存时,向所述key的value中写入所述业务处理程序的id。

可选的,所述获取oracle数据库的缓存任务包括:

按照预设查询条件查询oracle数据库的缓存刷新任务表,获取缓存任务;

其中,所述缓存刷新任务表用于存储与待缓存数据关联的缓存任务。

可选的,所述将与所述缓存任务对应的待缓存数据刷新至应用数据库redis包括:

判断所述缓存任务是否满足预设缓存条件;

根据判断结果将与所述缓存任务对应的待缓存数据刷新至应用数据库redis。

可选的,所述根据判断结果将与所述缓存任务对应的待缓存数据刷新至应用数据库redis包括:

若判断获知所述缓存任务的数量大于0,则将所述待缓存数据刷新至应用数据库redis;

或者,

若判断所述缓存任务对应的待缓存数据的大小大于等于预设阈值,则将所述待缓存数据刷新至应用数据库redis。

可选的,若判断获知所述缓存任务的数量等于0或者所述缓存任务对应的待缓存数据的大小小于所述预设阈值,则在预设周期达到时,再次判断所述缓存任务是否满足预设缓存条件。

本发明实施例提出了一种缓存数据刷新装置,包括:

获取模块,用于获取oracle数据库的缓存任务;

处理模块,用于将与所述缓存任务对应的待缓存数据刷新至应用数据库redis,并生成与所述待缓存数据对应的数据刷新信号key;

注册模块,用于在将所述待缓存数据刷新至业务处理程序的内部缓存时,向所述key的value中写入所述业务处理程序的id。

可选的,所述获取模块,用于按照预设查询条件查询oracle数据库的缓存刷新任务表,获取缓存任务;

其中,所述缓存刷新任务表用于存储与待缓存数据关联的缓存任务。

可选的,所述处理模块,用于判断所述缓存任务是否满足预设缓存条件;根据判断结果将与所述缓存任务对应的待缓存数据刷新至应用数据库redis。

可选的,所述处理模块,用于若判断获知所述缓存任务的数量大于0,则将所述待缓存数据刷新至应用数据库redis;或者,若判断所述缓存任务对应的待缓存数据的大小大于等于预设阈值,则将所述待缓存数据刷新至应用数据库redis。

可选的,所述处理模块,用于若判断获知所述缓存任务的数量等于0或者所述缓存任务对应的待缓存数据的大小小于所述预设阈值,则在预设周期达到时,再次判断所述缓存任务是否满足预设缓存条件。

由上述技术方案可知,本发明实施例提出的缓存数据刷新方法及装置通过在soa架构基础上,搭建基于oracle数据库和应用数据库redis+高级计算平台ibmstreams,以在缓存数据刷新至redis时,自动生成刷新信号key,进而在刷新业务处理程序的内部缓存时向key的value中写入id,实现缓存数据的持久化和同步,避免重复刷新程序缓存,减少资源的浪费。

附图说明

通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理解为对本发明进行任何限制,在附图中:

图1示出了本发明一实施例提供的缓存数据刷新方法的流程示意图;

图2示出了本发明另一实施例提供的缓存数据刷新方法的流程示意图;

图3示出了本发明一实施例提供的缓存数据刷新装置的结构示意图;

图4示出了本发明一实施例提供的一种电子设备的结构框图.

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1示出了本发明一实施例提供的缓存数据刷新方法的流程示意图,参见图1,该方法可由基于redis的流处理平台实现,具体包括如下步骤:

110、获取oracle数据库的缓存任务;

需要说明的是,在web程序数据(待缓存数据)存入oracle数据库时,首先,在oracle数据库的缓存刷新列表中建立与web程序数据关联的缓存任务,一条web程序数据对应一个缓冲任务;然后,处理器按照预设查询条件查询oracle数据库的缓存刷新任务表获取缓存任务。

120、将与所述缓存任务对应的待缓存数据刷新至应用数据库redis,并生成与所述待缓存数据对应的数据刷新信号key;

需要说明的是,存入oracle数据库的web程序数据为原始信息,例如:业务、策略、规则等等,在将原始信息刷新至redis后,redis将对原始信息进行处理,例如:格式转换、转换形式等等,将原始信息转换为可被业务处理程序识别、处理的信息。

另外,在待缓存数据刷新至应用redis时,将生成对应的key,不难理解的是,每条待缓存数据对应一个key。

130、在将所述待缓存数据刷新至业务处理程序的内部缓存时,向所述key的value中写入所述业务处理程序的id。

不难理解的是,对于任意一条待缓存数据,每个业务处理程序在将该条待缓存数据刷新至自身的内部缓存(缓存区)时,处理器将把该业务处理器的id注册进key的value中;

由此,在业务处理程序刷新待缓存数据之前,检测该待缓存数据对应的key的value中是否存在该业务处理程序对应的id,若是,则说明该业务处理程序已经刷新过该待缓存数据,无需再次刷新缓存;若否,则说明该业务处理程序还没有刷新过该待缓存数据,运行执行刷新缓存。

可见,本实施例通过在soa架构基础上,搭建基于oracle数据库和应用数据库redis+高级计算平台ibmstreams,以在缓存数据刷新至redis时,自动生成刷新信号key,进而在刷新业务处理程序的内部缓存时向key的value中写入id,实现缓存数据的持久化和同步,避免重复刷新程序缓存,减少资源的浪费。

图2示出了本发明另一实施例提供的缓存数据刷新方法的流程示意图,参见图2,该方法可由基于redis的流处理平台实现,具体包括如下步骤:

210、基于redis的流处理平台获取web程序数据;

不难理解的是,平台通过端口与外部数据输入装置连接,以接收外部数据输入装置输入的web程序说明;

220、将web程序数据存入oracle数据库,进而oracle数据库的刷新任务表中生成对应的缓存任务;

230、判断缓存任务是否满足预设缓存条件,若是,则执行步骤240;若否,则延时后再次执行步骤230;

需要说明的是,预设缓存条件可由多种,以下面两种为例:

第一种:以缓存任务的数量为预设缓存条件,延时长度为预设周期;

每3min查询一次刷新任务表的缓存任务,若查询到缓存任务的数量大于0,则执行步骤240;若否,则延时3min后,再次查询并判断;

第二种:以待缓存数量的大小为预设缓存条件,延时长度为预设周期;

每1min查询刷新任务表的缓存任务,并判断每条缓存任务中携带的待缓存数据的缓存大小之和是否大于预设阈值;若是,则执行步骤240;若否,则延时1min后,再次查询并判断。

需要说明的是,在系统缓存的使用过程中,首先用户可以将经常读取的数据放入到缓存之中;其次用户高频写入的数据也可以通过缓存优化其写入速度;最后网站的一些静态文件内容也可以放入。目前所使用的系统中,由于用户量大,实时性高,数据读写频次高,对于数据的更新效率有很高的要求,在用户高频写入数据库的数据放入缓存时,如果用户每一次写入数据库都需要与数据库建立连接,并将数据写入到数据库势必降低整个运行效率,该刷新机制降低了应用程序与数据库建立连接并写入磁盘的次数,当缓存到的数据达到某一个数量级时就一次性的将数据写入到数据库,或者定时将缓存中的数据取出然后一并写入数据库,这样结合起来使用大大降低了程序与数据库建立连接写入磁盘所开销的资源。在进行读取数据库时也采用同样的方式。

240、将所述待缓存数据刷新至应用数据库redis;

250、每存入一条待缓存数据,在redis中生成一条与待缓存数据关联的业务数据刷新信号key;

260、扫描redis,获取redis中的key;

270、判断key中是否存在id,若是,则执行步骤280;若否,则执行步骤290;

280、在key的value中写入id;

290、将待缓存数据刷新至业务处理程序的内部缓存(缓存区),结束。

可见,本实施例通过引入了刷新信号key这个方法,当有多个业务处理程序同时进行缓存刷新时,由于刷新信号key中的value中会注册业务处理程序id,故,不会发生有缓存重复刷新的情况,保证了各个程序间缓存刷新的相互独立,互不干扰,减少了系统资源的消耗,大大提高了缓存刷新的效率。

下面对图1和图2对应实施例的工作原理进行详细说明:

本发明搭建的平台对应的缓存刷新机制分为两部分:缓存刷新程序和业务处理程序,其中:

缓存刷新程序负责刷新redis中的缓存数据,业务处理程序负责在缓存刷新程序刷新redis中的缓存数据以后,刷新程序自身缓存。

缓存刷新程序每3min会根据既定的查询条件定时查询oracle数据库中的缓存刷新任务表,如果满足该查询条件的结果数大于0,则刷新最新的业务数据到redis中,并同时产生缓存刷新信号key,流程如图1所示。用户可以自定义redis中的缓存生存时间,在不定义时默认永久保存。

业务处理程序(job)会每3min定时查询redis中是否产生了缓存刷新信号key,并检查刷新信号key中是否注册有自身id。若存在自身id则无需刷新;若自身id未注册则往redis中的刷新信号key的value中注册自身id。完成以上步骤后,程序将会从redis中刷新最新的业务数据到自身内部缓存,流程如图2所示。到此完整的完成一轮缓存刷新。

可见,本刷新机制采用的redis内存数据库,不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储,这大大扩展了存储的缓存数据类型。并且充分利用了其支持数据持久化的特性,可以将内存中的数据保持在磁盘中,即使服务器重启仍然可以再次加载进行使用。另外该机制确保了缓存刷新的唯一性,避免多次对同一程序缓存进行刷新,大大节约了系统资源。

对于方法实施方式,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施方式并不受所描述的动作顺序的限制,因为依据本发明实施方式,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施方式均属于优选实施方式,所涉及的动作并不一定是本发明实施方式所必须的。

图3示出了本发明一实施例提供的缓存数据刷新装置的结构示意图,参见图3,该装置包括:获取模块310、处理模块320和注册模块330,其中:

获取模块310,用于获取oracle数据库的缓存任务;

处理模块320,用于将与所述缓存任务对应的待缓存数据刷新至应用数据库redis,并生成与所述待缓存数据对应的数据刷新信号key;

注册模块330,用于在将所述待缓存数据刷新至业务处理程序的内部缓存时,向所述key的value中写入所述业务处理程序的id。

需要说明的是,获取模块310按照预设查询条件查询oracle数据库的缓存刷新任务表,获取缓存任务,例如:每3min查询一次oracle数据库的缓存刷新任务表,并将获取的缓存任务发送至处理模块320,由处理模块320将缓存任务对应的待缓存数据刷新至redis,并在redis中生成数据刷新信号key;相应地,注册模块330实时扫描redis以获取redis中的key,并分析key的value中注册的id,以在业务处理程序刷新key对应的待缓存数据时,判断业务处理程序的id是否存在在key的value中,若是,则业务处理程序无需执行刷新操作;若否,则业务处理写程序执行刷新操作,并向key的value中注册自身的id。

本实施例中,处理模块320的工作原理包括:判断所述缓存任务是否满足预设缓存条件;根据判断结果将与所述缓存任务对应的待缓存数据刷新至应用数据库redis。具体如下:

若判断获知所述缓存任务的数量大于0,则将所述待缓存数据刷新至应用数据库redis;或者,若判断所述缓存任务对应的待缓存数据的大小大于等于预设阈值,则将所述待缓存数据刷新至应用数据库redis。

若判断获知所述缓存任务的数量等于0或者所述缓存任务对应的待缓存数据的大小小于所述预设阈值,则在预设周期达到时,再次判断所述缓存任务是否满足预设缓存条件。

可见,本实施例通过在soa架构基础上,搭建基于oracle数据库和应用数据库redis+高级计算平台ibmstreams,以在缓存数据刷新至redis时,自动生成刷新信号key,进而在刷新业务处理程序的内部缓存时向key的value中写入id,实现缓存数据的持久化和同步,避免重复刷新程序缓存,减少资源的浪费。

对于装置实施方式而言,由于其与方法实施方式基本相似,所以描述的比较简单,相关之处参见方法实施方式的部分说明即可。

应当注意的是,在本发明的装置的各个部件中,根据其要实现的功能而对其中的部件进行了逻辑划分,但是,本发明不受限于此,可以根据需要对各个部件进行重新划分或者组合。

图4示出了本发明一实施例提供的一种电子设备的结构框图,参见图4,所述电子设备,包括:处理器(processor)410、存储器(memory)420和总线430;

其中,

所述处理器410、存储器420通过所述总线430完成相互间的通信;

所述处理器410用于调用所述存储器420中的程序指令,以执行上述各方法实施例所提供的方法,例如包括:获取oracle数据库的缓存任务;将与所述缓存任务对应的待缓存数据刷新至应用数据库redis,并生成与所述待缓存数据对应的数据刷新信号key;在将所述待缓存数据刷新至业务处理程序的内部缓存时,向所述key的value中写入所述业务处理程序的id。

本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:获取oracle数据库的缓存任务;将与所述缓存任务对应的待缓存数据刷新至应用数据库redis,并生成与所述待缓存数据对应的数据刷新信号key;在将所述待缓存数据刷新至业务处理程序的内部缓存时,向所述key的value中写入所述业务处理程序的id。

本实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:获取oracle数据库的缓存任务;将与所述缓存任务对应的待缓存数据刷新至应用数据库redis,并生成与所述待缓存数据对应的数据刷新信号key;在将所述待缓存数据刷新至业务处理程序的内部缓存时,向所述key的value中写入所述业务处理程序的id。

本发明的各个部件实施方式可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本装置中,pc通过实现因特网对设备或者装置远程控制,精准的控制设备或者装置每个操作的步骤。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样实现本发明的程序可以存储在计算机可读介质上,并且程序产生的文件或文档具有可统计性,产生数据报告和cpk报告等,能对功放进行批量测试并统计。应该注意的是上述实施方式对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施方式。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1