一种通用缓存的方法技术

技术编号:2833312 阅读:326 留言:0更新日期:2012-04-11 18:40
本发明专利技术提出了一种通用缓存的方法,用于获取缓存中存储的数据,其中,包括:步骤一,在缓存中设置与外部数据源连接的用于获取外部数据的接口;步骤二,将缓存分配成多个缓存段,将一个数据只存放在一个缓存段里,设置每个缓存段的名称和数据的主健值;步骤三,当缓存系统收到数据访问请求时,根据请求访问的缓存段名称和数据的主健值,访问对应的缓存段,并判断缓存段中是否已存储所请求的数据,若已存储,则输出所请求的数据,若未存储,则通过接口从外部数据源获取所请求的数据,保存所请求的数据至缓存段中并输出。

【技术实现步骤摘要】

本专利技术涉及一种数据处理方法,特别涉及一种数据的缓存方法。技术背景目前在业务软件系统应用中,对于系统处理性能要求越来越高,所以应该 避免频繁的进行数据库操作和文件读写。为解决数据读取低效的问题必然会考 虑到使用缓存技术。缓存就是将一定的数据存放在内存中,当系统需要访问此 数据时,将可以直接从内存中读取,而减免了数据库操作和文件读写的耗时。 在现实环境下,对于大数据量,系统不可能将所有数据缓存到内存中,所以需 要使用一定的策略进行缓存项的淘汰,并且缓存需要在它的缓存项发生变化的 时候对其进行更新处理。目前现有的缓存系统大多采用LRU(最近最少使用)算法,LRU算法是一 种比较简单的淘汰选择算法,它不能真实的反映缓存中内容的使用情况。目前现有的一些缓存系统为了实现简单,而没有提供缓存同步功能,这将 导致缓存的数据和真实数据的偏差。有一些缓存系统虽然提供了缓存同步功 能,但是因为需要消耗大量的系统资源,导致缓存同步代价过大。
技术实现思路
本专利技术所要解决的技术问题在于提出,在系统对外部 数据源需要进行频繁访问时,能够有效地提高读取数据的性能。为实现上述目的,本专利技术提出了,用于获取缓存中存 储的数据,其中,包括步骤--,在缓存中设置与外部数据源连接的用于获取外部数据的接口;步骤二,将缓存分配成多个缓存段,将一个数据只存放在一个缓存段里, 设置每个缓存段的名称和数据的主健值;步骤三,当缓存系统收到数据访问请求时,根据请求访问的缓存段名称和数据的主健值,访问对应的缓存段,并判断所述缓存段中是否已存储所请求的 数据,若已存储,则输出所请求的数据,若未存储,则通过所述接口从外部数 据源获取所请求的数据,保存所请求的数据至所述缓存段中并输出。 上述的通用缓存的方法,其特征在于,还包括当访问或者修改所述缓存段时,设置段级锁,锁定所述缓存段的步骤;和 当从所述外部数据源读取所述请求的数据时,为所述缓存段中对应的数据 设置行级锁,锁定所请求的数据的步骤。上述的通用缓存的方法,其中,所述步骤三还包括步骤31,当所述缓存段中已存储所请求的数据时,判断所述已存储的数据对应的外部数据源中的数据是否已经被更新;步骤32,若未被更新,则直接输出所述已存储的数据,若已被更新,则调用所述接口从外部数据源获取对应的数据并更新所述缓存项中存储的数据。上述的通用缓存的方法,其中,所述步骤三具体包括步骤41,根据缓存段的名称和所请求的数据的主键值,访问所述缓存项 并査找所请求的数据;步骤42,为所述缓存段添加段级锁,判断所请求的数据是否存储在所述 缓存项中,若已存储,则进入步骤43,若未存储,则进入步骤44;步骤43,判断所请求的数据对应的外部数据源中的数据是否被更新,若 未被更新,则进入步骤47,若已被更新,则进入歩骤46;步骤44,判断所请求的数据是否已被添加了行级锁,若没有被添加,则 进入步骤46,若所请求的数据已被添加了行级锁,则进入步骤45;步骤45,释放段级锁,在所述行级锁被释放后,进入步骤47;步骤46,释放所述段级锁,在所请求的数据上添加行级锁,通过所述接 口,从外部数据源获取所请求的数据,保存至所述缓存段中,然后进入步骤 47;步骤47,输出所述缓存段中存放的所请求的数据。上述的通用缓存的方法,其中,当通过所述接口从外部数据源获取所请求 的数据之后,还包括以下步骤-步骤51,对所述缓存段添加段级锁;歩骤52,判断所述缓存段是否存在足够的剩余空间存储所述通过接口获取的数据,若存在足够的剩余空间,则进入步骤53,若不存在足够的空间,则在所述缓存段中释放出足够的空间,然后进入步骤53;步骤53,将从所述接口获取的所请求的数据更新所述缓存段,释放所述段级锁和行级锁,输出更新后所请求的数据。上述的通用缓存的方法,其中,所述步骤52中,当所述缓存段没有足够 的存储空间时,采用接触计数器法在所述缓存段中释放足够的存储空间,具体包括以下步骤步骤61,査找出所述缓存段中被访问次数最少的数据;步骤62,若被访问次数最少的数据只有一个,则从所述缓存段中删除所述数据,若被访问次数最少的数据有多个,则将所述多个数据中占用空间最大的数据删除;步骤63,判断所述缓存段中的剩余空间是否能存储所请求的数据,若能 够存储,则进入所述步骤53,若不能够存储,则返回所述步骤61。 上述的通用缓存的方法,其中,还包括根据所述缓存段中的各个数据的访问次数和大小,使用单向链表或双向链 表对所述各个数据进行排序的步骤。上述的通用缓存的方法,其中,每个数据为所述链表中的一个链表节点,所述排序的步骤具体包括以下步骤步骤81,根据所述请求的数据的主键值,査找所述链表中是否存在对应 的链表节点,若存在所述链表节点,则将所述链表节点的访问次数增加l;步骤82,判断所请求的数据的大小是否改变,若没有改变,则进入步骤 84,若所请求的数据被更新,所述数据大小的改变,则修改对应的所述链表节点大小属性,然后进入步骤84;步骤83,若所述链表中不存在所述链表节点,则根据所请求的数据的主 键值、大小和访问次数,在所述链表中创建新的链表节点,然后进入步骤84;步骤84,根据所述缓存段中各个数据的访问次数和大小,将多对应的链 表节点进行排序,将被访问次数较少的链表节电排在被访问次数较多的链表节 点的前面,在被访问次数相同的链表节点中,将数据较大的链表节点排在数据 较小的链表节点的前面。上述的通用缓存的方法,其中,将所述缓存段中的各个数据进行排序时,还包括添加热点链表和冷点链表的步骤。 上述的通用缓存的方法,其中,还包括为所述缓存段中各个数据设置包括正常状态、更新状态或删除状态的状态 标识的步骤。上述的通用缓存的方法,其中,当所述缓存段中的数据的状态标识为更新 状态时,还包括当所述数据被访问时,通过所述接口从外部数据源获取与所述数据对应的 新数据,并更新所述缓存段的步骤;当所述缓存段中的数据的状态标识为删除状态时,还包括将通过所述接口从外部数据源获取的数据,覆盖所述处于删除状态的数据 并存储的步骤。上述的通用缓存的方法,其中,所述步骤二还包括步骤121,设置所述缓存段的最大存储空间参数和从外部数据源读取数据 的接口的实现类参数;步骤122,在缓存系统启动时,初始化缓存中各个缓存段的名称和上述设置参数。本专利技术基于统一 User Interface (用户调用接口 )接口的基于Touch Count (接触计数器)算法的通用缓存实现方法,具有以下有益效果1. 简单,统一的UI接口。2. 缓存分段管理,管理清晰(每段只存放各自数据,与其他段没有关系), 读取性能高(査找只会在本段,而不需要到不相关的段査找费时),灵活性高(每 个段都可以有自己特殊的获取外部数据接口实现,也可以使用同一个)3. 通用性,通过获取外部数据接口屏蔽了不同系统之间的不~-致性。4. 使用Touch Count (接触计数器)算法,而不是一般缓存使用的LRU (最近最少使用)算法。5. 对缓存项的更新,不是立即产生而是在实际产生访问请求的时候进行 更新。附图说明图1是本专利技术的缓存模块处理流程图;图2是本专利技术中touch count (接触计数器)算法操作流程图。具体实施方式本专利技术的实施方法如下(a)在缓存系统中设置一个获本文档来自技高网...

【技术保护点】
一种通用缓存的方法,用于获取缓存中存储的数据,其特征在于,包括:步骤一,在缓存中设置与外部数据源连接的用于获取外部数据的接口;步骤二,将缓存分配成多个缓存段,将一个数据只存放在一个缓存段里,设置每个缓存段的名称和数据的主健值 ;步骤三,当缓存系统收到数据访问请求时,根据请求访问的缓存段名称和数据的主健值,访问对应的缓存段,并判断所述缓存段中是否已存储所请求的数据,若已存储,则输出所请求的数据,若未存储,则通过所述接口从外部数据源获取所请求的数据,保存所请 求的数据至所述缓存段中并输出。

【技术特征摘要】
1.一种通用缓存的方法,用于获取缓存中存储的数据,其特征在于,包括步骤一,在缓存中设置与外部数据源连接的用于获取外部数据的接口;步骤二,将缓存分配成多个缓存段,将一个数据只存放在一个缓存段里,设置每个缓存段的名称和数据的主健值;步骤三,当缓存系统收到数据访问请求时,根据请求访问的缓存段名称和数据的主健值,访问对应的缓存段,并判断所述缓存段中是否已存储所请求的数据,若已存储,则输出所请求的数据,若未存储,则通过所述接口从外部数据源获取所请求的数据,保存所请求的数据至所述缓存段中并输出。2. 根据权利要求1所述的通用缓存的方法,其特征在于,还包括 当访问或者修改所述缓存段时,设置段级锁,锁定所述缓存段的步骤;和 当从所述外部数据源读取所述请求的数据时,为所述缓存段中对应的数据设置行级锁,锁定所请求的数据的步骤。3. 根据权利要求1所述的通用缓存的方法,其特征在于,所述步骤三还 包括步骤31,当所述缓存段中已存储所请求的数据时,判断所述已存储的数 据对应的外部数据源中的数据是否已经被更新;步骤32,若未被更新,则直接输出所述已存储的数据,若已被更新,则 调用所述接口从外部数据源获取对应的数据并更新所述缓存项中存储的数据。4. 根据权利要求2或3所述的通用缓存的方法,其特征在于,所述步骤 三具体包括步骤41,根据缓存段的名称和所请求的数据的主键值,访问所述缓存项 并查找所请求的数据;步骤42,为所述缓存段添加段级锁,判断所请求的数据是否存储在所述 缓存项中,若已存储,则进入步骤43,若未存储,则进入歩骤44;步骤43,判断所请求的数据对应的外部数据源中的数据是否被更新,若 未被更新,则进入步骤47,若已被更新,则进入步骤46;步骤44,判断所请求的数据是否已被添加了行级锁,若没有被添加,则进入步骤46,若所请求的数据已被添加了行级锁,则进入步骤45;步骤45,释放段级锁,在所述行级锁被释放后,进入步骤47;步骤46,释放所述段级锁,在所请求的数据上添加行级锁,通过所述接 口,从外部数据源获取所请求的数据,保存至所述缓存段中,然后进入步骤47;步骤47,输出所述缓存段中存放的所请求的数据。5. 根据权利要求4所述的通用缓存的方法,其特征在于,当通过所述接口从外部数据源获取所请求的数据之后,还包括以下步骤步骤51,对所述缓存段添加段级锁;步骤52,判断所述缓存段是否存在足够的剩余空间存储所述通过接口获 取的数据,若存在足够的剩余空间,则进入步骤53,若不存在足够的空间, 则在所述缓存段中释放出足够的空间,然后进入步骤53;步骤53,将从所述接口获取的所请求的数据更新所述缓存段,释放所述 段级锁和行级锁,输出更新后所请求的数据。6. 根据权利...

【专利技术属性】
技术研发人员:唐鲲鹏吕吉单良
申请(专利权)人:中兴通讯股份有限公司
类型:发明
国别省市:94[]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1