一种实现缓存数据访问与加载并发进行的方法及***
技术领域
本发明涉及数据缓存,尤其涉及一种实现缓存数据访问与加载并发进行的方法及***。
背景技术
在互联网数据访问中,客户端在对访问服务端进行查询、***和更新数据的请求服务中,比如说搜索请求服务,会频繁搜索读取的一些相关内容,一般的情况是将这些读取的内容数据存储在磁盘上,由于读取磁盘的速度很慢,从而会影响访问数据的速度。
改进的方式是将需要频繁读取的数据在访问之前提前存储在内存中,这是因为计算机访问内存的速度远远高于访问磁盘的速度,这样会极大提高访问数据的速度。但是现有技术中没有解决在数据加载在内存中和访问数据同时进行的问题,而数据加载是一种耗时操作,如果在数据还没有完全加载完时处理客户端的访问请求,将不能保证客户端得到准确的数据,并且在数据加载的过程中会影响数据的访问速度。
发明内容
为了解决上述问题,本发明的目的是使访问与加载缓存数据能够同时进行,提高访问数据的速度,并保证访问存取数据的正确性。
为实现上述目的,本发明的技术方案是,一种实现缓存数据访问与加载并发进行的方法,所述方法包括以下步骤:
使用两个数据缓存区来存储数据,所述两个数据缓存区中的一个处于访问状态,另外一个处于等待状态;
使用数据加载指针和数据访问指针来进行两个数据缓存区的指向;
在对缓存数据进行加载时,使用数据加载指针指向处在等待状态的数据缓存区,进行缓存数据的加载;
同时如果需要对缓存数据进行访问,则使用数据访问指针指向处在访问状态的数据缓存区,进行缓存数据的访问;或者
在对缓存数据进行访问时,使用数据访问指针指向处在访问状态的数据缓存区,进行缓存数据的访问;
同时如果需要对缓存数据进行加载,使用数据加载指针指向处在等待状态的数据缓存区,进行缓存数据的加载;
其中所述处于访问状态的数据缓存区在访问结束之后变为等待状态,所述处于等待状态的数据缓存区在加载完数据之后变为访问状态。
所述处于访问状态的数据缓存区存储有数据,所述处于等待状态的数据缓存区无存储数据。
所述数据缓存区采用哈希表的数据结构来存储数据。
一种实现访问与加载缓存数据并发进行的***,所述***包括:
数据存取模块,与数据存取模块相连接的第一指针管理模块,与第一和第二指针管理模块相连接的数据缓存模块,与第二指针管理模块相连接的数据管理模块;
其中所述数据存取模块,用来获取并分析客户端的请求数据包,并把访问数据的请求指令发给第一指针管理模块;
所述第一指针管理模块,用来管理数据访问指针指向数据缓存模块中处于访问状态的数据缓存区,以使对所述数据缓存模块进行访问数据的存取;
所述数据缓存模块,用来存储需要频繁读取的数据,包括处于访问状态的数据缓存区和处于等待状态的数据缓存区;
所述第二指针管理模块,用来管理数据加载指针指向数据缓存模块中处于等待状态的数据缓存区,以使对所述数据缓存模块进行缓存数据的加载。
所述数据管理模块,用来配置不同的需要加载的数据源,并把数据加载的指令发送给第二指针管理模块。
所述访问数据的请求指令包括查询、***、删除以及更新数据的指令。
所述数据缓存区采用哈希表的数据结构来缓存数据。
所述处于访问状态的数据缓存区存储有数据,所述处于等待状态的数据缓存区无存储数据。
所述处于访问状态的数据缓存区在访问结束之后变为等待状态,所述处于等待状态的数据缓存区在加载完数据之后变为访问状态。
所述哈希表采用关键字为索引值,来查找存储值。
由上述技术方案可知,本发明采用在两个数据缓存区来分别进行数据的访问和数据加载的操作,从而不必在数据重新加载之前先释放当前使用的内存空间,重新申请内存空间进行数据加载,因此能够在加载数据的同时访问数据,而不影响访问数据的正确性,并且还提高了访问数据的速度。
通过以下参照附图对优选实施例的说明,本发明的上述以及其它目的、特征和优点将更加明显。
附图说明
图1为本发明的一种访问与加载缓存数据并发进行的***的结构示意图;
图2是本发明的一种访问与加载缓存数据并发进行的流程示意图。
具体实施方式
下面将详细描述本发明的具体实施例。应当注意,这里描述的实施例只用于举例说明,并不用于限制本发明。
本发明的主要构思在于使用两个数据缓存区来存储数据,来解决加载数据与访问数据同时并行处理的问题。
下面根据本发明的一种访问与加载缓存数据并发进行的***来详细介绍本发明的上述构思。
图1是本发明一种实施例的访问与加载缓存数据并发进行的***的结构示意图,如图1所示,所述***包括与数据存取模块,数据存取模块相连接的第一指针管理模块,与第一和第二指针管理模块相连接的数据缓存模块,与第二指针管理模块相连接的数据管理模块。
所述数据缓存模块,包括数据缓存区A和数据缓存区B,如图2所示,用于缓存需要频繁读取的数据,其中两个数据缓存区一个处于等待状态,另一个处于活跃状态,所述等待状态是数据缓存区没有数据,所述活跃状态是数据缓存区存储有数据,可以进行访问,其中一个数据存储区为等待状态,则另一个即为等待。这里所述的数据缓存区采用HASH表的数据结构,其中以HASH表为数据结构在内存中动态的申请连续的存储空间,存储的数据必须满足key->value模式,即通过key进行索引,找到存储value的内存地址。
所述数据存取模块,用于前端数据的存取,获取并分析客户端的请求数据包,并把访问数据的请求指令发给第一指针管理模块。该数据存取模块,是缓存服务器对客户端开放的接口,监听Socket,等待网络连接,获取并分析客户端的请求数据包,作出相应的处理,客户端可以发送、查询、***、删除、更新数据的请求,对处于活跃状态的hash(哈希)表进行操作。请求数据包格式为command、key、value、command是对hash表进行操作的命令字,包括add、update、delete、query;其中key为存于hash表中的数据索引值,Value为存于hash表中的数据。
所述数据管理模块,用来配置不同的需要加载的数据源,并把数据加载的指令发送给第二指针管理模块。该数据管理模块根据配置可对不同形式的数据源进行加载,并通过判断配置的数据超时时间,对数据进行重新加载,这里数据源可以为数据库、文件、***管道等。
所述第一指针管理模块,用来管理指针指向数据缓存模块中处于访问状态的数据缓存区,以使对所述数据缓存模块进行访问数据的存取;所述第二指针管理模块,用来管理指针指向数据缓存模块中处于等待状态的数据缓存区,以使对所述数据缓存模块进行缓存数据的加载。这里第一和第二指针模块所管理的指针不是指向数据缓存区A就是数据缓存区B,如图2所示,比如说当前状态数据缓存区A为活跃状态,数据缓存区B为等待状态,当通过数据存取模块对缓存数据进行操作时,第一指针管理模块会将指针指向当前处于活跃状态的数据缓存区A,完成数据存取,并且在访问结束之后将数据缓存区S的活跃状态表为等待状态,并释放A占用的内存空间;当数据管理模块进行数据重加载时,第二指针管理模块会将指针指向当前处于等待状态的数据缓存区B,并且在数据加载完毕之后将数据缓存区B的等待状态变为活跃状态;这时,数据缓存区A为等待状态,数据缓存区B为活跃状态。
根据所述***的构成可知,本发明采用两个数据缓存区来存储数据,其中一个数据缓存区处于访问状态,另外一个数据缓存区处于等待状态,在对缓存数据进行加载时,使用第二指针管理模块管理数据加载指针指向处在等待状态的数据缓存区,进行缓存数据的加载;这时如果需要对缓存数据进行访问,则使用第一指针管理模块管理数据访问指针指向处在访问状态的数据缓存区,进行缓存数据的访问;反之,如果在对缓存数据进行访问时,需要对缓存数据进行加载也可用同样的方式,即使用数据访问指针指向处在访问状态的数据缓存区,进行缓存数据的访问,同时使用数据加载指针指向处在等待状态的数据缓存区,进行缓存数据的加载;并且在所述处于访问状态的数据缓存区在访问结束之后变为等待状态,所述处于等待状态的数据缓存区在加载完数据之后变为访问状态。从而使数据访问和加载同时进行。
虽然已参照几个典型实施例描述了本发明,但应当理解,所用的术语是说明和示例性、而非限制性的术语。由于本发明能够以多种形式具体实施而不脱离发明的精神或实质,所以应当理解,上述实施例不限于任何前述的细节,而应在随附权利要求所限定的精神和范围内广泛地解释,因此落入权利要求或其等效范围内的全部变化和改型都应为随附权利要求所涵盖。