CN110019366A - 一种缓存数据的方法和装置 - Google Patents
一种缓存数据的方法和装置 Download PDFInfo
- Publication number
- CN110019366A CN110019366A CN201711393072.7A CN201711393072A CN110019366A CN 110019366 A CN110019366 A CN 110019366A CN 201711393072 A CN201711393072 A CN 201711393072A CN 110019366 A CN110019366 A CN 110019366A
- Authority
- CN
- China
- Prior art keywords
- data
- node
- caching
- queue
- database
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种缓存数据的方法和装置,涉及计算机技术领域。该方法的一个具体实施方式包括:确定缓存中是否存在待访问的数据的节点;当所述缓存中不存在所述数据的节点时,则从数据库中获取所述数据,以及在所述缓存的历史队列中建立所述数据的节点,并将所述数据存入所述节点;当所述缓存中存在所述数据的节点时,按照当前时刻更新所述数据的节点的存储位置。该实施方式能够提高数据的访问时效和读取数据的命中率。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种缓存数据的方法、装置、电子设备和计算机可读介质。
背景技术
缓存就是数据交换的缓冲区,当某一硬件要访问数据时,会首先从缓存中查找需要的数据,如果查到则直接执行,未能查到则访问数据库。由于缓存的运行速度比数据库快,故缓存的作用就是提高数据访问的时效,减轻数据库的访问压力。如果数据库中也不存在待访问数据,那么下次该数据被访问时,会绕过缓存,继续访问数据库,造成缓存穿透。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:
系统服务如果重启会情况缓存数据,缓存数据需要恢复重建;
如果数据库中本身也不存在待访问的数据,会造成缓存穿透问题;
缓存被过多占用,造成浪费;
仅根据哈希值进行数据读取与查询会造成误判。
发明内容
有鉴于此,本发明实施例提供一种缓存数据的方法和装置,能够进一步提高数据的访问时效,防止因系统服务重启而重建缓存数据,避免缓存穿透问题并节约系统资源,提高数据查询与访问的准确性。
为实现上述目的,根据本发明实施例的一个方面,提供了一种缓存数据的方法,包括:确定缓存中是否存在待访问的数据的节点;当所述缓存中不存在所述数据的节点时,则从数据库中获取所述数据,以及在所述缓存的历史队列中建立所述数据的节点,并将所述数据存入所述节点;当所述缓存中存在所述数据的节点时,按照当前时刻更新所述数据的节点的存储位置。
可选地,当所述缓存中不存在所述数据的节点时,则从数据库中获取所述数据步骤之前,还包括:确认所述数据库中存在所述数据;当所述数据库中不存在所述数据时,在所述历史队列中建立所述数据的空节点,所述数据的空节点用于指示所述数据不存在于所述数据库。
可选地,当所述缓存中存在所述数据的节点时,按照当前时刻更新所述数据的节点的存储位置包括:获取当前时刻之前预设时段内所述数据的节点的被访问次数;当所述数据的节点被访问的次数达到预设阈值时,将所述历史队列中的所述数据的节点转存到所述缓存中的优选队列。
可选地,所述方法还包括:根据所述历史队列的预设长度和/或预设周期淘汰所述历史队列中最先建立的节点。
可选地,所述方法还包括:根据所述优选队列的预设长度和/或预设周期淘汰所述优选队列中访问频率最低节点。
可选地,所述缓存建立在Linux共享内存中。
可选地,确定缓存中是否存在待访问的数据的节点包括:获取所述数据的哈希值;根据所述数据的哈希值查询所述缓存中是否存在与所述哈希值对应的节点;若存在,则获取所述数据的唯一标识,根据所述数据的唯一标识确定所述缓存中是否存在所述数据。
为实现上述目的,根据本发明实施例的另一个方面,提供了一种缓存数据的装置,包括:查询模块,用于确定缓存中是否存在待访问的数据的节点;存储模块,用于当所述查询模块确定所述缓存中不存在所述数据的节点时,则从数据库中获取所述数据,以及在所述缓存的历史队列中建立所述数据的节点,并将所述数据存入所述节点;更新模块,用于当所述查询模块确定所述缓存中存在所述数据的节点时,按照当前时刻更新所述数据的节点的存储位置。
可选地,当所述查询模块确定所述缓存中不存在所述数据的节点时,所述存储模块从数据库中获取所述数据之前,所述存储模块还用于确认所述数据库中存在所述数据;当所述数据库中不存在所述数据时,在所述历史队列中建立所述数据的空节点,所述数据的空节点用于指示所述数据不存在于所述数据库。
可选地,当所述查询模块确定所述缓存中存在所述数据的节点时,所述更新模块还用于,获取当前时刻之前预设时段内所述数据的节点的被访问次数;当所述数据的节点被访问的次数达到预设阈值时,将所述历史队列中的所述数据的节点转存到所述缓存中的优选队列。
可选地,所述装置还包括:第一淘汰模块,用于根据所述历史队列的预设长度和/或预设周期淘汰所述历史队列中最先建立的节点。
可选地,所述装置还包括:第二淘汰模块,用于根据所述优选队列的预设长度和/或预设周期淘汰所述优选队列中访问频率最低的节点。
可选地,所述缓存建立在Linux共享内存中。
可选地,所述查询模块还用于,获取所述数据的哈希值;根据所述数据的哈希值查询所述缓存中是否存在与所述哈希值对应的节点;若存在,则获取所述数据的唯一标识,根据所述数据的唯一标识确定所述缓存中是否存在所述数据。
为实现上述目的,根据本发明实施例的再一个方面,提供了一种缓存数据的电子设备终端,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现一种缓存数据的方法中任一所述的方法。
为实现上述目的,根据本发明实施例的再一个方面,提供了一种缓存数据的计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现一种缓存数据的方法中任一所述的方法。
上述发明中的一个实施例具有如下优点或有益效果:因为采用在缓存的历史队列中建立数据的节点,并且根据当前访问时刻更新数据的节点的存储位置的技术手段,提高了数据读取的命中率和数据访问时效;缓存建立在Linux系统的共享内存中防止因系统服务重启而重建缓存数据;在缓存中对数据库中不存在的数据建立空节点避免缓存穿透;对缓存中的节点进行淘汰提高缓存的利用率,节约系统资源;根据哈希值和数据的唯一标识在缓存中对数据进行查询在保证数据访问时效的情况下进一步提高准确性。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的一种缓存数据的方法的主要步骤的示意图;
图2是根据本发明实施例的一种缓存中的历史队列和优选队列的示意图;
图3是根据本发明实施例的一种缓存数据的装置的主要部分的示意图;
图4是本发明实施例可以应用于其中的示例性系统架构图;
图5是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本发明实施例的一种缓存数据的方法的主要步骤的示意图,如图1所示:
步骤S101表示确定缓存中是否存在待访问的数据的节点;其中所述数据包含唯一标识。
其中,缓存中的数据被存储在若干节点中,节点可以以数据块的形式存在于缓存磁盘中,逻辑上每个节点都是有序排列的,根据缓存的大小来分配一定数量的节点,每个节点具有一定存储空间,用于存储数据。
确定缓存中是否存在待访问的数据的节点的方法包括:获取所述数据的哈希值;根据所述数据的哈希值查询所述缓存中是否存在与所述哈希值对应的节点;若存在,则获取所述数据的唯一标识,根据所述数据的唯一标识确定所述缓存中是否存在所述数据。使用哈希值对缓存中的数据的节点进行标识,可以降低查询维度,提高数据读取命中率,提高查询效率。
数据的唯一标识可以是GUID(Globally Unique Identifier,全局唯一标识符)或其类似值,也可以是其他多种类型的数据的属性(如创建时间、创建来源IP等)的复合值,用以对数据进行标识和识别,每个数据的唯一标识都要经过哈希映射函数计算,得到哈希值,以哈希值为标识建立节点,因为哈希映射函数的特点,不同数据的唯一标识通过同一哈希映射函数计算所得到的哈希值会有一定几率的相同性,可以将哈希值相同的数据以链表的形式串联在同一个哈希值下,即一个节点中可以保存多个不同的数据。所以根据所述数据的哈希值查询所述缓存中是否存在与所述哈希值对应的节点;若存在,则获取所述数据的唯一标识,根据所述数据的唯一标识确定所述缓存中是否存在所述数据。这样就能在提高效率的同时准确查找到所要访问的数据。
例如进行数据读取时,首先判断对应数据唯一标识的哈希值是否存在,若不存在,证明缓存中无此数据,直接查询数据库;若存在则需要比对哈希值链表中的数据的唯一标识,若链表中无此数据的唯一标识,则说明缓存中不存在此数据,再查询数据库;若存在,则读取缓存数据。
步骤S102表示当所述缓存中不存在所述数据的节点时,则从数据库中获取所述数据,以及在所述缓存的历史队列中建立所述数据的节点,并将所述数据存入所述节点;此步骤的目的是为了提高数据读取与访问的效率和命中率,使得该数据被再次访问时直接读取缓存而不读取数据库,减轻数据库的压力。
在缓存中建立数据的节点的步骤包括:根据数据的唯一标识计算该数据的哈希值,以哈希值为节点的标识建立节点。
当所述缓存中不存在所述数据的节点时,则从数据库中获取所述数据之前还可包括:定所述数据库中存在所述数据;
当所述数据库中不存在所述数据时,在所述历史队列中建立所述数据的空节点,所述数据的空节点用于指示所述数据不存在于所述数据库;此步骤的目的是进一步提高数据读取的效率,减轻因数据不存在而对数据库进行读取的压力,防止缓存穿透。
其中,所述历史队列中的节点是按照建立的先后顺序排列的(如图2所示)。即历史队列中的所有节点根据建立的时间有序排列。步骤S201表示在队首建立节点A。
根据所述历史队列的预设长度和/或预设周期淘汰所述历史队列中最先建立的节点。此步骤的目的是在于清理历史队列,防止缓存被长期占用,节约系统资源。由于缓存的存储空间是有限的,所以历史队列的长度也是有限的,或者对历史队列的长度进行预设。对于历史队列中数据的节点的淘汰方式可以为,当历史队列被全部占用,不能在其中再建立新的节点时,淘汰最先建立的节点;或者设置一个淘汰周期,定期对最先建立的节点淘汰,以及以上两种方式的结合,都可以实现对最先建立的数据节点的淘汰。如图2中,步骤S202表示当历史队列被全部占用,或者达到预设周期时,将历史队列最先建立的队尾的节点B淘汰。
步骤S103表示当所述缓存中存在所述数据的节点时,按照当前时刻更新所述数据的节点的存储位置。此步骤的作用是进一步提高读取缓存数据时的命中率,将访问量大或访问率高的数据留在缓存中,降低数据库的访问压力,提高数据访问时效。
当所述缓存中存在所述数据的节点时,按照当前时刻更新所述数据的节点的存储位置包括:获取当前时刻之前预设时段内所述数据的节点的被访问次数;;当所述数据的节点被访问的次数达到预设阈值时,将所述历史队列中的所述数据的节点转存到所述缓存中的优选队列;其中,所述优选队列中的节点排列顺序是按照节点每次被访问的时间先后顺序更新的。如图2所示,预设阈值为k,步骤S203表示当节点C的被访问次数达到k次时,将节点C转存至优选队列中。步骤S204表示优选队列中的任意节点D被访问后,将节点D转移至优选队列的队首,所以优选队列中的所有节点的排列顺序是根据每次被访问的时间先后顺序更新的。
根据所述优选队列的预设长度和/或预设周期淘汰所述优选队列中访问频率最低的节点。此步骤的目的是在于清理优选队列,防止缓存被长期占用,节约系统资源。由于缓存的存储空间是有限的,所以优选队列的长度也是有限的,或者对优选队列的长度进行预设。对于优选队列中数据的节点的淘汰方式可以为,当优选队列被全部占用,不能在其中再存入新的节点时,淘汰访问频率最低的节点;或者设置一个淘汰周期,定期对访问频率最低的节点淘汰,以及以上两种方式的结合,都可以实现对访问频率最低的数据节点的淘汰。如图2中,步骤S205表示当历史队列被全部占用,或者达到预设周期时,将历史队列中访问频率最低的队尾的节点E淘汰。
本发明实施例中的所述缓存可以建立在Linux共享内存中。Linux是一套免费使用和自由传播的操作系统,以它为基础建立的共享内存不同于现有技术的内存,Linux共享内存不会因系统重启而清空,即可以在系统重启后仍然运行本发明中的缓存数据的方法,防止因为系统重启而使数据库受到大数据量的访问冲击,从而进一步提高数据的访问时效。
本发明的实施方式中,在缓存中所建立的历史队列与优选队列的个数不限于一个,只要历史队列中的节点的排列顺序是按照建立先后顺序排列,并对最先建立的且访问次数没有达到预设阈值的节点进行淘汰;以及优选队列中的节点的排列顺序是按照被访问的先后顺序更新,并对访问频率较低的节点进行淘汰,同样能实现本发明的技术方案。
图3是根据本发明实施例的一种缓存数据的装置300的主要部分的示意图,如图3所示:
查询模块301用于确定缓存中是否存在待访问的数据的节点,其中所述数据包含唯一标识。
其中,缓存中的数据被存储在若干节点中,节点可以以数据块的形式存在于缓存磁盘中,逻辑上每个节点都是有序排列的,根据缓存的大小来分配一定数量的节点,每个节点具有一定存储空间,用于存储数据。
查询模块301还用于根据所述数据的哈希值查询所述缓存中是否存在所述数据的节点;确定缓存中是否存在待访问的数据的节点的方法包括:获取所述数据的哈希值;根据所述数据的哈希值查询所述缓存中是否存在与所述哈希值对应的节点;若存在,则获取所述数据的唯一标识,根据所述数据的唯一标识确定所述缓存中是否存在所述数据。使用哈希值对缓存中的数据的节点进行标识,可以降低查询维度,,提高数据读取命中率,提高查询效率。
数据的唯一标识可以是GUID(Globally Unique Identifier,全局唯一标识符)或其类似值,也可以是其他多种类型的数据的属性(如创建时间、创建来源IP等)的复合值,用以对数据进行标识和识别,每个数据的唯一标识都要经过哈希映射函数计算,得到哈希值,以哈希值为标识建立节点,因为哈希映射函数的特点,不同数据的唯一标识通过同一哈希映射函数计算所得到的哈希值会有一定几率的相同性。哈希值相同的数据可以以链表的形式串联在同一个哈希值下,即一个节点中可以保存多个不同的数据。所以当查询模块301根据所述数据的哈希值查询所述缓存中是否存在与所述哈希值对应的节点时;若存在,则获取所述数据的唯一标识,根据所述数据的唯一标识确定所述缓存中是否存在所述数据。,这样就能在提高效率的同时准确查找到所要访问的数据。
例如进行数据读取时,首先判断对应数据唯一标识的哈希值是否存在,若不存在,证明缓存中无此数据,直接查询数据库;若存在则需要比对哈希值链表中的数据的唯一标识,若链表中无此数据的唯一标识,则说明缓存中不存在此数据,再查询数据库;若存在,则读取缓存数据。
存储模块302用于当所述查询模块确定所述缓存中不存在所述数据的节点时,则从数据库中获取所述数据,以及在所述缓存的历史队列中建立所述数据的节点,并将所述数据存入所述节点;此模块可以提高数据读取与访问的效率和命中率,使得该数据被再次访问时直接读取缓存而不读取数据库,减轻数据库的压力。在缓存中建立数据的节点的步骤包括:根据数据的唯一标识计算该数据的哈希值,以哈希值为节点的标识建立节点。
当查询模块301确定所述缓存中不存在所述数据的节点时,存储模块302从数据库中获取所述数据,以及在所述缓存的历史队列中建立所述数据的节点之前,存储模块302还用于确定所述数据库中存在所述数据;当所述数据库中不存在所述数据时,在所述历史队列中建立所述数据的空节点,所述数据的空节点用于指示所述数据不存在于所述数据库;此模块可以进一步提高数据读取的效率,减轻因数据不存在而对数据库进行读取的压力,防止缓存穿透。
其中,所述历史队列中的节点是按照建立的先后顺序排列的。
更新模块303用于当所述查询模块确定所述缓存中存在所述数据的节点时,按照当前时刻更新所述数据的节点的存储位置。此模块可以进一步提高读取缓存数据时的命中率,将访问量大或访问率高的数据留在缓存中,降低数据库的访问压力,提高数据访问时效。
当查询模块301确定所述缓存中存在所述数据的节点时,更新模块303还用于,获取当前时刻之前预设时段内所述数据的节点的被访问次数;;当所述数据的节点被访问的次数达到预设阈值时,将所述历史队列中的所述数据的节点转存到所述缓存中的优选队列;其中,所述优选队列中的节点排列顺序是按照节点每次被访问的时间先后顺序更新的。
装置300还可包括:
第一淘汰模块,用于根据所述历史队列的预设长度和/或预设周期淘汰所述历史队列中最先建立的节点。目的是在于清理历史队列,防止缓存被长期占用,节约系统资源。
第二淘汰模块,用于根据所述优选队列的预设长度和/或预设周期淘汰所述优选队列中访问频率最低的节点。目的是在于清理优选队列,防止缓存被长期占用,节约系统资源。
本发明实施例中的所述缓存可以建立在Linux共享内存中。Linux是一套免费使用和自由传播的操作系统,以它为基础建立的共享内存不同于现有技术的内存,Linux共享内存不会因系统重启而清空,即可以在系统重启后仍然运行本发明中的缓存数据的方法,防止因为系统重启而使数据库受到大数据量的访问冲击,从而进一步提高数据的访问时效。
图4示出了可以应用本发明实施例的一种缓存数据的方法或装置的示例性系统架构400。
如图4所示,系统架构400可以包括终端设备401、402、403,网络404和服务器405。网络404用以在终端设备401、402、403和服务器405之间提供通信链路的介质。网络404可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备401、402、403通过网络404与服务器405交互,以接收或发送消息等。终端设备401、402、403上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。
终端设备401、402、403可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器405可以是提供各种服务的服务器,例如对用户利用终端设备401、402、403所浏览的购物类网站提供支持的后台管理服务器。后台管理服务器可以对接收到的产品信息查询请求等数据进行分析等处理,并将处理结果(例如目标推送信息、产品信息)反馈给终端设备。
需要说明的是,本发明实施例所提供的一种缓存数据的方法一般由服务器405执行,相应地,一种缓存数据的装置一般设置于服务器405中。
应该理解,图4中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
图5所示为适于用来实现本发明实施例的终端设备的计算机系统500的结构示意图。图5所示的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图5所示,计算机系统500包括中央处理单元(CPU)501,其可以根据存储在只读存储器(ROM)502中的程序或者从存储部分508加载到随机访问存储器(RAM)503中的程序而执行各种适当的动作和处理。在RAM 503中,还存储有系统500操作所需的各种程序和数据。CPU 501、ROM 502以及RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
以下部件连接至I/O接口505:包括键盘、鼠标等的输入部分506;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分507;包括硬盘等的存储部分508;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分509。通信部分509经由诸如因特网的网络执行通信处理。驱动器510也根据需要连接至I/O接口505。可拆卸介质511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器510上,以便于从其上读出的计算机程序根据需要被安装入存储部分508。
特别地,根据本发明公开的实施例,上文主要步骤图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行步骤图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分509从网络上被下载和安装,和/或从可拆卸介质511被安装。在该计算机程序被中央处理单元(CPU)501执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质包括计算机可读信号介质或计算机可读存储介质,或者是上述两者的任意组合。计算机可读存储介质包括但不限于电、磁、光、电磁、红外线、半导体的系统、装置或器件,或者上述内容的任意组合。计算机可读存储介质具体包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述内容的任意组合。在本发明中,计算机可读存储介质包括任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用;计算机可读的信号介质包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码,这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述信号的任意组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF(射频)等,或者上述介质的任意组合。
附图中的步骤图或框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作,步骤图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以并行地执行,有时也可以按相反的顺序执行,其执行顺序依所涉及的功能而定。也要注意的是,框图或步骤图中的每个方框以及其组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括查询模块、存储模块和更新模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,查询模块还可以被描述为“用于确定缓存中是否存在待访问的数据的节点的模块”。
另一方面,本发明实施例还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:确定缓存中是否存在待访问的数据的节点;当所述缓存中不存在所述数据的节点时,则从数据库中获取所述数据,以及在所述缓存的历史队列中建立所述数据的节点,并将所述数据存入所述节点;当所述缓存中存在所述数据的节点时,按照当前时刻更新所述数据的节点的存储位置。
上述发明中的一个实施例具有如下优点或有益效果:因为采用在缓存的历史队列中建立数据的节点,并且根据当前访问时刻更新数据的节点的技术手段,提高了数据读取的命中率和数据访问时效;缓存建立在Linux系统的共享内存中防止因系统服务重启而重建缓存数据;在缓存中对数据库中不存在的数据建立空节点避免缓存穿透;对缓存中的节点进行淘汰提高缓存的利用率,节约系统资源;根据哈希值和数据的唯一标识在缓存中对数据进行查询在保证数据访问时效的情况下进一步提高准确性。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (16)
1.一种缓存数据的方法,其特征在于,包括:
确定缓存中是否存在待访问的数据的节点;当所述缓存中不存在所述数据的节点时,则从数据库中获取所述数据,以及在所述缓存的历史队列中建立所述数据的节点,并将所述数据存入所述节点;
当所述缓存中存在所述数据的节点时,按照当前时刻更新所述数据的节点的存储位置。
2.根据权利要求1所述的方法,其特征在于,当所述缓存中不存在所述数据的节点时,则从数据库中获取所述数据步骤之前,还包括:确认所述数据库中存在所述数据;
当所述数据库中不存在所述数据时,在所述历史队列中建立所述数据的空节点,所述数据的空节点用于指示所述数据不存在于所述数据库。
3.根据权利要求1所述的方法,其特征在于,当所述缓存中存在所述数据的节点时,按照当前时刻更新所述数据的节点的存储位置包括:
获取当前时刻之前预设时段内所述数据的节点的被访问次数;
当所述数据的节点被访问的次数达到预设阈值时,将所述历史队列中的所述数据的节点转存到所述缓存中的优选队列。
4.根据权利要求2所述的方法,其特征在于,所述方法还包括:
根据所述历史队列的预设长度和/或预设周期淘汰所述历史队列中最先建立的节点。
5.根据权利要求3所述的方法,其特征在于,所述方法还包括:
根据所述优选队列的预设长度和/或预设周期淘汰所述优选队列中访问频率最低的节点。
6.根据权利要求1所述的方法,其特征在于,所述缓存建立在Linux共享内存中。
7.根据权利要求1所述的方法,其特征在于,确定缓存中是否存在待访问的数据的节点包括:
获取所述数据的哈希值;
根据所述数据的哈希值查询所述缓存中是否存在与所述哈希值对应的节点;
若存在,则获取所述数据的唯一标识,根据所述数据的唯一标识确定所述缓存中是否存在所述数据。
8.一种缓存数据的装置,其特征在于,包括:
查询模块,用于确定缓存中是否存在待访问的数据的节点;
存储模块,用于当所述查询模块确定所述缓存中不存在所述数据的节点时,则从数据库中获取所述数据,以及在所述缓存的历史队列中建立所述数据的节点,并将所述数据存入所述节点;
更新模块,用于当所述查询模块确定所述缓存中存在所述数据的节点时,按照当前时刻更新所述数据的节点的存储位置。
9.根据权利要求8所述的装置,其特征在于,当所述查询模块确定所述缓存中不存在所述数据的节点时,所述存储模块从数据库中获取所述数据,以及在所述缓存的历史队列中建立所述数据的节点之前,所述存储模块还用于确认所述数据库中存在所述数据;
当所述数据库中不存在所述数据时,在所述历史队列中建立所述数据的空节点,所述数据的空节点用于指示所述数据不存在于所述数据库。
10.根据权利要求8所述的装置,其特征在于,当所述查询模块确定所述缓存中存在所述数据的节点时,所述更新模块还用于,获取当前时刻之前预设时段内所述数据的节点的被访问次数;;
当所述数据的节点被访问的次数达到预设阈值时,将所述历史队列中的所述数据的节点转存到所述缓存中的优选队列。
11.根据权利要求9所述的装置,其特征在于,所述装置还包括:
第一淘汰模块,用于根据所述历史队列的预设长度和/或预设周期淘汰所述历史队列中最先建立的节点。
12.根据权利要求10所述的装置,其特征在于,所述装置还包括:
第二淘汰模块,用于根据所述优选队列的预设长度和/或预设周期淘汰所述优选队列中访问频率最低的节点。
13.根据权利要求8所述的装置,其特征在于,所述缓存建立在Linux共享内存中。
14.根据权利要求8所述的装置,其特征在于,所述查询模块还用于:
获取所述数据的哈希值;
根据所述数据的哈希值查询所述缓存中是否存在与所述哈希值对应的节点;
若存在,则获取所述数据的唯一标识,根据所述数据的唯一标识确定所述缓存中是否存在所述数据。
15.一种缓存数据的电子设备终端,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一所述的方法。
16.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-7中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711393072.7A CN110019366A (zh) | 2017-12-21 | 2017-12-21 | 一种缓存数据的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711393072.7A CN110019366A (zh) | 2017-12-21 | 2017-12-21 | 一种缓存数据的方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110019366A true CN110019366A (zh) | 2019-07-16 |
Family
ID=67187039
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711393072.7A Pending CN110019366A (zh) | 2017-12-21 | 2017-12-21 | 一种缓存数据的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110019366A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111814007A (zh) * | 2020-07-31 | 2020-10-23 | 新华三信息安全技术有限公司 | 双向链表数据处理方法、装置、设备及机器可读存储介质 |
CN112839008A (zh) * | 2019-11-22 | 2021-05-25 | 北京沃东天骏信息技术有限公司 | 一种访问监控方法、装置和系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103455443A (zh) * | 2013-09-04 | 2013-12-18 | 华为技术有限公司 | 一种缓存管理方法和装置 |
CN106569963A (zh) * | 2016-10-25 | 2017-04-19 | 乐视控股(北京)有限公司 | 缓存方法和装置 |
CN107124466A (zh) * | 2017-05-23 | 2017-09-01 | 努比亚技术有限公司 | 一种防止缓存穿透方法及装置、计算机可读存储介质 |
US20170351620A1 (en) * | 2016-06-07 | 2017-12-07 | Qubole Inc | Caching Framework for Big-Data Engines in the Cloud |
-
2017
- 2017-12-21 CN CN201711393072.7A patent/CN110019366A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103455443A (zh) * | 2013-09-04 | 2013-12-18 | 华为技术有限公司 | 一种缓存管理方法和装置 |
US20170351620A1 (en) * | 2016-06-07 | 2017-12-07 | Qubole Inc | Caching Framework for Big-Data Engines in the Cloud |
CN106569963A (zh) * | 2016-10-25 | 2017-04-19 | 乐视控股(北京)有限公司 | 缓存方法和装置 |
CN107124466A (zh) * | 2017-05-23 | 2017-09-01 | 努比亚技术有限公司 | 一种防止缓存穿透方法及装置、计算机可读存储介质 |
Non-Patent Citations (1)
Title |
---|
CARLOSFU: ""缓存系列文章—5.缓存穿透问题", 《ITEYE:HTTPS://WWW.ITEYE.COM/BLOG/CARLOSFU-2249316》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112839008A (zh) * | 2019-11-22 | 2021-05-25 | 北京沃东天骏信息技术有限公司 | 一种访问监控方法、装置和系统 |
CN112839008B (zh) * | 2019-11-22 | 2024-02-06 | 北京沃东天骏信息技术有限公司 | 一种访问监控方法、装置和系统 |
CN111814007A (zh) * | 2020-07-31 | 2020-10-23 | 新华三信息安全技术有限公司 | 双向链表数据处理方法、装置、设备及机器可读存储介质 |
CN111814007B (zh) * | 2020-07-31 | 2023-03-31 | 新华三信息安全技术有限公司 | 双向链表数据处理方法、装置、设备及机器可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110019211A (zh) | 关联索引的方法、装置和系统 | |
CN110019080B (zh) | 数据访问方法和装置 | |
CN108984553A (zh) | 缓存方法和装置 | |
CN109413127A (zh) | 一种数据同步方法和装置 | |
WO2021223662A1 (zh) | 基于扫码的页面访问 | |
CN109936635A (zh) | 负载均衡方法和装置 | |
CN110209677A (zh) | 更新数据的方法和装置 | |
CN107844324A (zh) | 客户端页面跳转处理方法和装置 | |
CN109657174A (zh) | 用于更新数据的方法和装置 | |
CN109189857A (zh) | 基于区块链的数据共享系统、方法和装置 | |
CN109388654A (zh) | 一种查询数据表的方法和装置 | |
CN109885593A (zh) | 用于处理信息的方法和装置 | |
CN109388626A (zh) | 用于向业务分配编号的方法和装置 | |
CN110334036A (zh) | 一种实现缓存数据调度的方法和装置 | |
CN110377416A (zh) | 分布式分区任务调度方法和装置 | |
CN109684624A (zh) | 一种自动识别订单地址路区的方法和装置 | |
CN108173952A (zh) | 一种内容分发网络cdn的数据访问方法和装置 | |
CN110019366A (zh) | 一种缓存数据的方法和装置 | |
CN113364887A (zh) | 一种基于ftp的文件下载方法、代理服务器和系统 | |
CN110109912A (zh) | 一种标识符生成方法和装置 | |
CN108845864A (zh) | 一种基于spring框架的JVM垃圾回收方法和装置 | |
CN110362583A (zh) | 一种用于多数据源的数据处理方法和装置 | |
CN110019393A (zh) | 一种模糊查询的方法和装置 | |
CN108985805A (zh) | 一种选择性执行推送任务的方法和装置 | |
CN110493291A (zh) | 一种处理http请求的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190716 |
|
RJ01 | Rejection of invention patent application after publication |