CN105446909A - 用于缓存管理的方法和系统 - Google Patents
用于缓存管理的方法和系统 Download PDFInfo
- Publication number
- CN105446909A CN105446909A CN201410437031.3A CN201410437031A CN105446909A CN 105446909 A CN105446909 A CN 105446909A CN 201410437031 A CN201410437031 A CN 201410437031A CN 105446909 A CN105446909 A CN 105446909A
- Authority
- CN
- China
- Prior art keywords
- cache entries
- time point
- classification
- scheduled time
- ratio
- 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
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/12—Replacement control
- G06F12/121—Replacement control using replacement algorithms
- G06F12/128—Replacement control using replacement algorithms adapted to multidimensional cache systems, e.g. set-associative, multicache, multiset or multilevel
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0891—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0808—Multiuser, multiprocessor or multiprocessing cache systems with cache invalidating means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/957—Browsing optimisation, e.g. caching or content distillation
- G06F16/9574—Browsing optimisation, e.g. caching or content distillation of access to content, e.g. by caching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/12—Replacement control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1041—Resource optimization
- G06F2212/1044—Space efficiency improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/604—Details relating to cache allocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/62—Details of cache specific to multiprocessor cache arrangements
- G06F2212/621—Coherency control relating to peripheral accessing, e.g. from DMA or I/O device
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Debugging And Monitoring (AREA)
Abstract
本公开内容涉及用于缓存管理的方法和系统。本发明的一个实施例提供一种缓存管理方法,包括:响应于缓存条目被创建,确定所述缓存条目的类别;确定与所述类别相关联的失效事件的预计时间点,所述失效事件的发生将导致所述类别的缓存条目失效;以及基于所述预计时间点,设置所述缓存条目的有效周期。还描述了相应的系统。
Description
技术领域
本发明的实施例涉及用于缓存管理的方法和系统。
背景技术
缓存(caching)是指将先前访问过的内容存储在本地存储位置,从而允许对针对相同内容的后续访问请求做出快速响应。缓存技术被广泛地应用于计算机处理器、存储系统、数据系统、网络应用等各个不同的领域中。例如,在网络环境中,用户先前访问的web页面或者其他网络内容可以被缓存在客户端本地。当用户再次访问先前已经访问过的web页面时,可以直接从本地存储中读取和返回缓存的web页面,从而缩短响应时间,并且降低对网络带宽资源和服务器计算资源的消耗。
处理缓存失效(cacheinvalidation)是缓存管理中的一个重要问题。缓存失效是指缓存的内容与该内容的实际最新版本不一致,从而使得缓存的内容丧失其应有的作用。缓存失效主要是由内容的后台更新造成的。例如,当web服务器更新web页面中的内容时,该web页面在客户端处的缓存条目将会失效。当一个缓存条目失效时,应当将其从缓存中移除。
基于时间来管理缓存失效的方案是已知的。每个缓存条目被指派一个固定的有效周期。当有效周期届满时,相应的缓存条目被确定为失效并且从缓存中被移除。然而在实践中,很难设置合适的有效周期。一些缓存条目可能在被删除时仍然是有效的。反之,另一些缓存条目在未被删除时可能已经失效。
另一类方案基于事件规则来处理缓存失效。每个缓存条目可以与一个或多个预定事件相关联。当预定事件之一发生时,相应的缓存条目被确定为失效并且从缓存中被删除。然而,在涉及多方的分布式系统中,基于事件的缓存失效管理可能面临困难。例如,在网络电子商务环境中,web页面通常在内容分发网络(ContentDistributionNetwork,CDN)和企业内部的服务器或客户端上都被缓存。此时,需要实现跨系统的事件触发机制来管理缓存失效。然而,跨系统的事件触发通常具有较高的开发和维护成本,而且受到应用的限制而难以保证通用性。
发明内容
总体上,本发明的实施例提出一种用于更加有效地管理缓存的技术方案。
在本发明的一个方面,提供一种缓存管理方法。所述方法包括:响应于缓存条目被创建,确定所述缓存条目的类别;确定与所述类别相关联的失效事件的预计时间点,所述失效事件的发生将导致所述类别的缓存条目失效;以及基于所述预计时间点,设置所述缓存条目的有效周期。
在本发明的另一方面,提供一种缓存管理系统。所述系统包括:类别确定单元,被配置为响应于缓存条目被创建,确定所述缓存条目的类别;时间点确定单元,被配置为确定与所述类别相关联的失效事件的预计时间点,所述失效事件的发生将导致所述类别的缓存条目失效;以及有效周期设置单元,被配置为基于所述预计时间点,设置所述缓存条目的有效周期。
根据本发明的实施例,基于时间和基于失效事件的缓存管理机制被有机地结合。缓存条目的有效周期不再被简单地设置为固定的值,而是可以根据相应类别的失效事件的预计发生时间点而自适应地、灵活地设置。这样,可以确保缓存条目的失效时间更加接近实际失效的时间。而且,根据本发明的实施例,不需要使用高成本的事件触发机制。以此方式,可以对缓存进行更加准确和高效的管理。本发明的其他特征和优点将通过下文描述而变得容易理解。
附图说明
通过结合附图对本发明示例性实施方式进行更详细的描述,本发明的上述以及其它目的、特征和优势将变得更加明显其中:
图1示出了适于用来实现本发明实施例的示例性计算机系统/服务器的示意性框图;
图2示出了根据本发明实施例的用于管理缓存的方法的示意性流程图;以及
图3示出了根据本发明实施例的用于管理缓存的系统的示意性框图。
在附图中,相同或相似的标号被用来表示相同或相似的元素。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
图1示出了适于用来实现本发明实施方式的示例性计算机系统/服务器12的方框图。图1显示的计算机系统/服务器12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图1所示,计算机系统/服务器12以通用计算设备的形式表现。计算机系统/服务器12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机系统/服务器12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机系统/服务器12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机系统/服务器12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图1未显示,通常称为“硬盘驱动器”)。尽管图1中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括—但不限于—操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
计算机系统/服务器12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器12交互的设备通信,和/或与使得该计算机系统/服务器12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,计算机系统/服务器12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机系统/服务器12的其它模块通信。应当明白,尽管图中未示出,可以结合计算机系统/服务器12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
下面将详细描述本发明实施例的机制和原理。除非特别声明,在下文和权利要求中使用的术语“基于”表示“至少部分地基于”。术语“包括”表示开放性包括,即“包括但不限于”。术语“多个”表示“两个或者更多”。术语“一个实施例”表示“至少一个实施例”。术语“另一实施例”表示“至少一个另外的实施例”。其他术语的定义将在下文描述中给出。
图2示出了根据本发明的实施例的用于管理缓存的方法200的流程图。在下文描述中,可能将会参考网络内容(例如,web页面)来阐释本发明的缓存管理机制。然而应当理解,这仅仅是示例性的,无意以任何方式对本发明的范围进行限制。本发明的实施例可被用于管理任何适当类型的内容的缓存。
方法200开始于步骤S210,在此响应于缓存条目被创建,确定缓存条目的类别。以web页面为例,当用户第一次访问该web页面时,可以在客户端的本地缓存中创建该web页面的缓存条目。在一个实施例中,一个web页面可以作为整体被保存在一个缓存条目中。备选地,在另一实施例中,可以为一个web页面创建多个缓存条目,每个缓存条目中保存该web页面的部分内容。特别地,在一个实施例中,与每个web页面相关联的缓存条目都与该web页面的统一资源定位符(URL)相关联。
响应于新的缓存条目被创建,在步骤S210,可以通过各种不同的方式来确定该缓存条目的类别。例如,在一个实施例中,可以事先在训练阶段通过学习而生成缓存条目的多个预定义类别。以web页面为例,在训练阶段,可以首先生成多个web页面的缓存条目。在一个实施例中,可以针对实际的web页面而生成缓存条目。例如,可以针对将要访问的web站点的所有或者部分web页面而生成缓存条目。备选地或附加地,也可以使用专门用于训练的web页面来生成缓存条目。换言之,根据本发明的实施例,训练数据集与实际将要被访问的数据集可以相同,也可以不同。
针对所生成这些缓存条目(称为“训练缓存条目”),可以根据任何适当的标准或者度量对其进行分组,从而将训练缓存条目划分为多个类别。例如,在一个实施例中,可以根据这些训练缓存条目的失效事件(invalidationevent)的时间点对训练缓存条目进行分组。在此使用的术语“失效事件”是指将会引起相关联的缓存条目失效的事件。作为示例,在网络应用环境中,失效事件可以包括但不限于以下一个或多个:对web页面的编辑、数据导入、数据导出、数据同步、文件更新、数据库更新,等等。
训练缓存条目的失效事件的时间点可以通过各种方式来确定。例如,在一个实施例中,可以通过实时监测失效事件的发生来确定失效事件的时间点。作为示例,假设一个训练条目的失效事件包括用户编辑和数据同步。此时,可以针对这两类事件而对该训练缓存条目进行实时监测,并且将失效事件首次发生的时间作为该训练缓存条目的失效事件时间点。
备选地或附加地,一个或多个训练缓存条目的失效事件时间点也可由用户指定。例如,在一个实施例中,用户可以指定:与图书销售相关联的web页面将在每天下午16:00更新。此时,所有图书销售的web页面的缓存条目的失效事件时间可以被设置为下午16:00。
作为又一示例,在一个实施例中,可以使用训练缓存条目的实际失效时间作为失效事件时间点的估计。具体而言,在这样的实施例中,每条训练缓存条目的有效周期可被设置为足够长。换言之,训练缓存条目不会因为超时而被删除。而后,可以以比较短的预定时间间隔(例如,5分钟或者10分钟),周期性地扫描训练缓存条目。在每次扫描中,确定每个被扫描的训练缓存条目是否失效。这可以通过对缓存条目的数据与相关web页面的当前实际数据进行比较来实现。如果一个训练条目在一次扫描中被确定为已失效,则使用扫描被执行的时间点作为该条目的失效时间点。该失效时间点进而被用作训练缓存条目的失效事件时间点的估计。已失效的训练缓存条目将从后续扫描中被排除。
作为示例,假设一个条目在下午14:00的扫描中保持有效,但是在紧邻的下午14:05执行的下一次扫描中变为无效,则可以将该缓存条目的失效事件时间点估计为下午14:05。也就是说,使得该缓存条目失效的失效事件被估计为发生在下午14:05。可以理解,这种估计可能存在一定的误差,因为缓存条目的失效事件可能发生在下午14:00到14:05中的任意时间点。但是,通过将扫描间隔设置地足够小,可以将这种误差控制在可容忍的范围之内。
重复上述过程,直到所有训练缓存条目都失效。备选地,训练过程也可以响应于达到预定的训练时间(例如,一天或者多天)而停止。以此方式,可以获得每个训练缓存条目的失效事件时间点。继而,可以根据失效事件时间点对训练缓存条目进行分组。在一个实施例中,分组可以通过聚类(clustering)来实现,使得失效事件的时间点彼此接近的训练缓存条目被分到相同的分组中。目前已知或将来开发的任何聚类方法均可与本发明的实施例结合使用。本发明的范围在此方面不受限制。
通过对训练缓存条目进行聚类而获得的每个分组被视为缓存条目的一个类别。在这样的实施例中,在步骤S210,可以提取新建缓存条目的属性,并且基于该属性从通过训练获得的多个预定义类别中选择一个类别。例如,在一个实施例中,属性可以是缓存条目所对应的web页面的URL。可以将该URL与属于各个预定义类别的训练缓存条目的URL相匹配,以便找到最匹配的URL。相应地,具有最匹配URL的训练缓存条目所在的类别可被确定为新建缓存条目的类别。
在一个实施例中,可以使用URL中的一部分而非全部作为缓存条目的属性。例如,在一个实施例中,用于呈现货品的web页面的URL中可能包含该货品的标识、分类、提供方、销售方等信息。作为示例,在URL中,“&ArticleID=xyz”可以表示货品的标识。在这样的实施例中,可以提取URL中一个或多个这样的部分,并且使用所提取的部分来执行与预定义类别中的训练缓存条目的匹配,从而确定新建缓存条目的类别。
应当理解,上文描述的实施例仅仅是示例性的,并非意在限制本发明的范围。基于本发明所提供的教导,可以对上述实施例进行各种修改或变形。例如,在一个备选实施例中,取代按照失效事件的时间点对训练缓存条目聚类,可以按照web页面的URL或其部分、与web页面相关联的产品属性(例如,类型、标识、提供商、产地,等等)等各种其他标准对训练缓存条目进行分组,以便确定多个预定义类别。对于每个预定义类别,可以由用户以人工方式指定与该类别相关联的失效事件时间点。
作为示例,在电子商务环境中,web页面可以被用于呈现相应的货品。在一个实施例中,可以基于货品的类型对web页面的缓存条目进行分组。例如,可以将缓存条目划分为“图书”、“电器”、“服装”等多个类别。对于每个类别,用户可以根据实际使用情况来指定其失效事件的时间点。例如,如果运营方在每天下午16:00更新针对图书的库存、价格等方面的数据,则“图书”类别的失效事件时间点可以被设置为下午16:00。
注意,上文描述的实施例都仅仅是示例性的,可以基于任何适当的属性对训练缓存条目进行分组。而且,在一个实施例中,对训练条目的分组甚至可以由用户以人工方式完成。本发明的范围在此方面不受限制。
继续参考图2,接下来,方法200进行到步骤S220。在步骤S220,获得与步骤S210处确定的类别相关联的失效事件的预计时间点。如上所述,新建缓存条目的类别可以选自多个预定义类别。在一个实施例中,预定义类别是通过根据训练缓存条目的失效事件时间点对训练缓存条目分组而获得的。在这样的实施例中,可以获得属于该类别的训练缓存条目的失效事件时间点,并且基于这些失效事件时间点来确定新建缓存条目的预计失效事件时间。例如,在一个实施例中,可以计算属于该类别的所有训练缓存条目的失效事件时间点的平均值、最大值或者最小值,作为新建缓存条目的预计失效事件时间点。
备选地,在另一实施例中,如上所述,每个类别的失效事件的时间点可以是用户指定的。此时,可以直接使用新建缓存条目所属类别的、用户指定的失效事件时间点,作为新建缓存条目的失效事件的预计时间点。
接下来,在方法200的步骤S230,基于步骤S220处确定的失效事件的预计时间点,来设置缓存条目的有效周期。具体而言,有效周期可以被设置失效事件的预计时间点与缓存条目的创建时间之间的差。例如,假设一个缓存条目的创建时间是上午9:00,并且该缓存条目的预计失效事件时间点为下午14:00。在此示例中,新建缓存条目的有效周期可以被设置为14:00–9:00=5小时。
根据本发明的实施例,基于失效事件和基于时间的缓存管理机制被有机地结合。每个缓存条目的有效周期不再简单地被设置为预先定义的时间。相反,缓存条目有效周期的设定是根据预计的失效事件时间点而设置的。以此方式,对缓存条目失效的管理将更为准确和有效。同时,失效事件以缓存条目有效周期的形式被体现,无需如已知方案中那样使用显式的事件调用。这样,本发明的实施例能够更好地适用于跨平台的分布式环境。由此,本发明的实施例兼具基于时间的缓存管理和基于事件的缓存管理二者的优势,同时克服了二者的缺陷。
在一个实施例中,方法可以200可以进行到可选的步骤S240,在此收集缓存条目在使用过程中的反馈,以便调整缓存条目的一个或多个类别的失效事件时间点。具体而言,对于任何给定的类别,可以基于在步骤S220处确定与类别相关联的失效事件的预计时间点,以及属于该类别的多个缓存条目的实际失效时间点,来修改该类别的失效事件的预计时间点。
具体而言,对于任何给定的类别,可以确定该类别的缓存条目中的、实际失效时间点早于预计时间点的缓存条目(称为“第一组缓存条目”)的数目。继而,可以计算第一组缓存条目在该类别的所有缓存条目中所占的比例,称为“第一比例”。例如,在一个实施例中,可以在该类别的失效事件的预计时间点之前的一个预定时间点(称为“第一时间点”),检测该类别的缓存条目中有多少条目已经失效。在此实施例中,在第一时间点已经失效的缓存条目构成了第一组缓存条目。特别地,在第一时刻检测的缓存条目可包括在运行时被指派到该类别的实际缓存条目。
第一比例可与预定阈值(称为“第一阈值”)进行比较。如果第一比例高于第一阈值,表明与该类别相关联的当前预计失效事件时间点可能偏晚。此时,可以将该类别的失效事件的预计时间点适当提前。例如,在一个实施例中,可以将失效事件的预计时间点提前到第一时间点。当然,失效事件的预计时间点可被提前到任何其他适当的时间。
作为示例,假设与缓存条目的一个给定类别相关联的失效事件的当前预计时间点为上午10:00,第一时间点为上午9:55,并且第一阈值为10%。此时,将会在上午9:55检测属于该类别的每个缓存条目是否已经失效。在上午9:55已经失效的那些缓存条目构成了第一组缓存条目。如果发现第一缓存条目占该类别的所有缓存条目的比例超过10%(即,在上午9:55时,属于该类别的缓存条目中超过10%的缓存条目已经失效),则可以将失效事件的预计时间点提前。例如,在一个实施例中,失效事件的预计时间点可被提前到上午9:55。
备选地或附加地,在一个实施例中,对于任何给定的类别,可以确定该类别的缓存条目中的、实际失效时间点晚于预计时间点的缓存条目(称为“第二组缓存条目”)的数目。继而,可以计算第二组缓存条目在该类别的所有缓存条目中所占的比例,称为“第二比例”。例如,在一个实施例中,可以在该类别的失效事件的预计时间点之后的一个预定时间点(称为“第二时间点”),检测该类别的缓存条目中有多少条目仍然保持有效。在此实施例中,在第二时间点保持有效的缓存条目构成了第二组缓存条目。类似于第一组缓存条目,第二组缓存条目可包括在运行时被指派到该类别的实际缓存条目。
第二比例可与预定的阈值(称为“第二阈值”)进行比较。如果第二比例高于第二阈值,表明与该类别相关联的当前预计失效事件时间点可能偏早。此时,可以将该类别的失效事件的预计时间点适当延后。例如,在一个实施例中,可以将失效事件的预计时间点延后到第二时间点。当然,失效事件的预计时间点可被延后到任何其他适当的时间。
仍然考虑上文描述的示例,其中类别的失效事件的当前预计时间点为上午10:00。假设第二时间点为上午10:05,并且第二阈值为10%。注意,尽管在此示例中第一阈值等于第二阈值,但是这仅仅是示例性的。在其他实施例中,第一阈值可以不等于第二阈值。如果通过检测发现在上午10:05时属于该类别的缓存条目中超过10%的条目仍然保持有效,则可以将失效事件的预计时间点延后,例如延后到上午10:05。
特别地,在一个实施例中,可以执行第一比例与第一阈值的比较,并且还执行第二比例与第二阈值的比较。如果第一比例大于第一阈值并且第二比例大于第二阈值,说明该类别中相当数目的缓存条目在失效事件的预计时间点之前已经失效。同时,该类别中相当数目的缓存条目在失效事件的预计时间点之后仍然保持有效。属于同一类别的缓存条目失效时间的这种分散性表明:该类别未能正确地反映缓存条目的失效事件在时间上的规律,因此是不适当的。此时,在一个实施例中,可以通过调整类别本身来修改失效事件的预计时间点。
例如,在一个实施例中,对类别的调整可以包括重新对训练缓存条目执行聚类过程,以便产生新的类别。备选地或附加地,在一个实施例中,对类别的调整可以包括从类别中移除在失效事件的预计时间点之前失效的缓存条目。备选地或附加地,在又一个实施例中,对类别的调整可以包括从类别中移除在失效事件的预计时间点之后仍然保持有效的缓存条目。对类别的任何其他适当调整都是可能的。
通过动态地提前和/或延后失效事件的预计时间点,可以在运行态动态地适应一个或多个类别的失效事件的变化。例如,在上文示例中,当通过聚类生成预定义类别时,给定类别的失效事件可能的确在上午10:00发生。然而,服务提供方可能随后调整该失效事件的时间点。例如,web站点的托管方可以将更新有关数据的时间点从上午10:00调整到上午10:30。在这样的情况下,通过在使用中动态地将失效事件的预计时间点延后一次或多次,可以逐步地使失效事件的预计时间点再次与实际时间点相吻合。
而且,在同时使用第一比例和第二比例的实施例中,还可以对类别的改变做出正确、及时的响应。例如,随着时间的变化,最初被划分为相同类别的缓存条目的失效事件时间点可能变得彼此异质。根据本发明的实施例,这种变化可以被检测到,并且可以通过对类别所做的调整而得到有效的补偿。
图3示出了根据本发明实施例的用于缓存管理的系统300的示意性框图。如图所示,系统300包括:类别确定单元310,被配置为响应于缓存条目被创建,确定所述缓存条目的类别;时间点确定单元320,被配置为确定与所述类别相关联的失效事件的预计时间点,所述失效事件的发生将导致所述类别的缓存条目失效;以及有效周期设置单元330,被配置为基于所述预计时间点,设置所述缓存条目的有效周期。
在一个实施例中,所述类别确定单元310可以包括:属性提取单元,被配置为提取所述缓存条目的属性;以及类别选择单元,被配置为基于所述属性从多个预定义类别中选择所述缓存条目的所述类别,所述多个预定义类别通过按照多个训练缓存条目的失效事件时间点对所述多个训练缓存条目进行分组而获得。
在一个实施例中,所述时间点确定单元320包括:训练时间点确定单元,被配置为确定所述多个训练缓存条目中属于所述类别的训练缓存条目的所述失效事件时间点;以及时间点计算单元,被配置为基于属于所述类别的所述训练缓存条目的所述失效事件时间点来计算所述预计时间点。
在一个实施例中,系统300还可以包括:时间点修改单元,被配置为基于属于所述类别的多个缓存条目的实际失效时间点,修改所述预计时间点。
在一个实施例中,所述时间点修改单元可以包括:第一比例计算单元,被配置为计算第一组缓存条目在所述多个缓存条目中所占的第一比例,所述第一组缓存条目的所述实际失效时间点早于所述预计时间点;以及时间点提前单元,被配置为响应于所述第一比例超过第一阈值,将所述预计时间点提前。
备选地或附加地,在一个实施例中,所述时间点修改单元可以包括:第二比例计算单元,被配置为计算第二组缓存条目在所述多个缓存条目中所占的第二比例,所述第二组缓存条目的所述实际失效时间点晚于所述预计时间点;以及时间点延后单元,被配置为响应于所述第二比例超过第二阈值,将所述预计时间点延后。
特别地,在一个实施例中,所述时间点修改单元可以同时包括上述第一比例计算单元和第二比例计算单元。在这样的实施例中,系统300还可以包括类别调整单元,被配置为响应于所述第一比例超过第一阈值并且所述第二比例超过第二阈值,调整所述类别以修改所述预计时间点。
应当注意,为清晰起见,图3中没有示出系统300所包括的可选单元或者子单元。上文所描述的所有特征和操作分别适用于系统300,故在此不再赘述。而且,系统300中的单元或子单元的划分不是限制性的而是示例性的,旨在从逻辑上描述其主要功能或操作。一个单元的功能可以由多个单元来实现;反之,多个单元亦可由一个单元来实现。本发明的范围在此方面不受限制。
而且,系统300所包含的单元可以利用各种方式来实现,包括软件、硬件、固件或其任意组合。例如,在某些实施方式中,系统300可以利用软件和/或固件来实现。备选地或附加地,系统300可以部分地或者完全地基于硬件来实现。例如,系统300中的一个或多个单元可以实现为集成电路(IC)芯片、专用集成电路(ASIC)、片上系统(SOC)、现场可编程门阵列(FPGA),等等。本发明的范围在此方面不受限制。
本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是—但不限于—电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Java、Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。
这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
计算机可读程序指令也可加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (14)
1.一种缓存管理方法,所述方法包括:
响应于缓存条目被创建,确定所述缓存条目的类别;
确定与所述类别相关联的失效事件的预计时间点,所述失效事件的发生将导致所述类别的缓存条目失效;以及
基于所述预计时间点,设置所述缓存条目的有效周期。
2.根据权利要求1所述的方法,其中确定所述缓存条目的类别包括:
提取所述缓存条目的属性;以及
基于所述属性从多个预定义类别中选择所述缓存条目的所述类别,所述多个预定义类别通过按照多个训练缓存条目的失效事件时间点对所述多个训练缓存条目进行分组而获得。
3.根据权利要求2所述的方法,其中确定与所述类别相关联的失效事件的预计时间点包括:
确定所述多个训练缓存条目中属于所述类别的训练缓存条目的所述失效事件时间点;以及
基于属于所述类别的所述训练缓存条目的所述失效事件时间点来计算所述预计时间点。
4.根据权利要求1到3任一项所述的方法,还包括:
基于属于所述类别的多个缓存条目的实际失效时间点,修改所述预计时间点。
5.根据权利要求4所述的方法,其中修改所述预计时间点包括:
计算第一组缓存条目在所述多个缓存条目中所占的第一比例,所述第一组缓存条目的所述实际失效时间点早于所述预计时间点;以及
响应于所述第一比例超过第一阈值,将所述预计时间点提前。
6.根据权利要求4所述的方法,其中修改所述预计时间点包括:
计算第二组缓存条目在所述多个缓存条目中所占的第二比例,所述第二组缓存条目中的所述实际失效时间点晚于所述预计时间点;以及
响应于所述第二比例超过第二阈值,将所述预计时间点延后。
7.根据权利要求4所述的方法,其中修改所述预计时间点包括:
计算第一组缓存条目在所述多个缓存条目中所占的第一比例,所述第一组缓存条目的所述实际失效时间点早于所述预计时间点;
计算第二组缓存条目在所述多个缓存条目中所占的第二比例,所述第二组缓存条目的所述实际失效时间点晚于所述预计时间点;以及
响应于所述第一比例超过第一阈值并且所述第二比例超过第二阈值,调整所述类别以修改所述预计时间点。
8.一种缓存管理系统,所述系统包括:
类别确定单元,被配置为响应于缓存条目被创建,确定所述缓存条目的类别;
时间点确定单元,被配置为确定与所述类别相关联的失效事件的预计时间点,所述失效事件的发生将导致所述类别的缓存条目失效;以及
有效周期设置单元,被配置为基于所述预计时间点,设置所述缓存条目的有效周期。
9.根据权利要求8所述的系统,其中所述类别确定单元包括:
属性提取单元,被配置为提取所述缓存条目的属性;以及
类别选择单元,被配置为基于所述属性从多个预定义类别中选择所述缓存条目的所述类别,所述多个预定义类别通过按照多个训练缓存条目的失效事件时间点对所述多个训练缓存条目进行分组而获得。
10.根据权利要求9所述的系统,其中所述时间点确定单元包括:
训练时间点确定单元,被配置为确定所述多个训练缓存条目中属于所述类别的训练缓存条目的所述失效事件时间点;以及
时间点计算单元,被配置为基于属于所述类别的所述训练缓存条目的所述失效事件时间点来计算所述预计时间点。
11.根据权利要求8到10任一项所述的系统,还包括:
时间点修改单元,被配置为基于属于所述类别的多个缓存条目的实际失效时间点,修改所述预计时间点。
12.根据权利要求11所述的系统,其中所述时间点修改单元包括:
第一比例计算单元,被配置为计算第一组缓存条目在所述多个缓存条目中所占的第一比例,所述第一组缓存条目的所述实际失效时间点早于所述预计时间点;以及
时间点提前单元,被配置为响应于所述第一比例超过第一阈值,将所述预计时间点提前。
13.根据权利要求11所述的系统,其中所述时间点修改单元包括:
第二比例计算单元,被配置为计算第二组缓存条目在所述多个缓存条目中所占的第二比例,所述第二组缓存条目的所述实际失效时间点晚于所述预计时间点;以及
时间点延后单元,被配置为响应于所述第二比例超过第二阈值,将所述预计时间点延后。
14.根据权利要求11所述的系统,其中所述时间点修改单元包括:
第一比例计算单元,被配置为计算第一组缓存条目在所述多个缓存条目中所占的第一比例,所述第一组缓存条目的所述实际失效时间点早于所述预计时间点;
第二比例计算单元,被配置为计算第二组缓存条目在所述多个缓存条目中所占的第二比例,所述第二组缓存条目的所述实际失效时间点晚于所述预计时间点;以及
类别调整单元,被配置为响应于所述第一比例超过第一阈值并且所述第二比例超过第二阈值,调整所述类别以修改所述预计时间点。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410437031.3A CN105446909A (zh) | 2014-08-29 | 2014-08-29 | 用于缓存管理的方法和系统 |
US14/824,384 US9690712B2 (en) | 2014-08-29 | 2015-08-12 | Method and system for cache management |
US15/593,403 US10223287B2 (en) | 2014-08-29 | 2017-05-12 | Method and system for cache management |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410437031.3A CN105446909A (zh) | 2014-08-29 | 2014-08-29 | 用于缓存管理的方法和系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105446909A true CN105446909A (zh) | 2016-03-30 |
Family
ID=55402652
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410437031.3A Pending CN105446909A (zh) | 2014-08-29 | 2014-08-29 | 用于缓存管理的方法和系统 |
Country Status (2)
Country | Link |
---|---|
US (2) | US9690712B2 (zh) |
CN (1) | CN105446909A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10223287B2 (en) | 2014-08-29 | 2019-03-05 | International Business Machines Corporation | Method and system for cache management |
CN113688155A (zh) * | 2021-08-05 | 2021-11-23 | 浪潮云信息技术股份公司 | 一种预防缓存雪崩的系统 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20130053249A (ko) * | 2011-11-15 | 2013-05-23 | 삼성전자주식회사 | 통신 시스템에서 캐쉬 메모리 관리 방법 및 장치 |
CN107153663B (zh) * | 2016-03-04 | 2019-10-29 | 中国移动通信集团北京有限公司 | 一种域名资源缓存方法及装置 |
AU2017314759B2 (en) * | 2016-08-24 | 2022-10-06 | Selfserveme Pty Ltd | Customer service systems and portals |
US11080110B2 (en) * | 2017-10-06 | 2021-08-03 | Experian Health, Inc. | In-memory storage of aggregated data for real-time event tracking |
US11645344B2 (en) | 2019-08-26 | 2023-05-09 | Experian Health, Inc. | Entity mapping based on incongruent entity data |
KR20210097347A (ko) * | 2020-01-30 | 2021-08-09 | 한국전자통신연구원 | 인공지능 기반 이미지 검색 방법 및 장치 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6807607B1 (en) * | 1999-08-17 | 2004-10-19 | International Business Machines Corporation | Cache memory management system and method |
US20070156966A1 (en) * | 2005-12-30 | 2007-07-05 | Prabakar Sundarrajan | System and method for performing granular invalidation of cached dynamically generated objects in a data communication network |
US7480767B2 (en) * | 2006-06-15 | 2009-01-20 | Sap Ag | Cache with time-based purging and computation of purged items |
US8533393B1 (en) * | 2010-12-14 | 2013-09-10 | Expedia, Inc. | Dynamic cache eviction |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6934720B1 (en) | 2001-08-04 | 2005-08-23 | Oracle International Corp. | Automatic invalidation of cached data |
AU2003209249A1 (en) * | 2002-01-18 | 2003-09-02 | Idetic, Inc. | A multi-tiered caching mechanism for the storage and retrieval of content multiple versions |
US8650266B2 (en) | 2002-03-26 | 2014-02-11 | At&T Intellectual Property Ii, L.P. | Cache validation using smart source selection in a data network |
US20060095460A1 (en) | 2004-10-29 | 2006-05-04 | International Business Machines Corporation | Systems and methods for efficiently clustering objects based on access patterns |
US20080209120A1 (en) | 2007-02-26 | 2008-08-28 | Microsoft Corporation | Accelerating cache performance by active cache validation |
US7783757B2 (en) | 2007-03-12 | 2010-08-24 | Citrix Systems, Inc. | Systems and methods of revalidating cached objects in parallel with request for object |
US8799396B2 (en) | 2008-02-04 | 2014-08-05 | Cisco Technology, Inc. | Method and system for an efficient distributed cache with a shared cache repository |
US8086803B2 (en) | 2009-05-13 | 2011-12-27 | International Business Machines Corporation | Managing cache elements |
US8566521B2 (en) | 2010-09-01 | 2013-10-22 | International Business Machines Corporation | Implementing cache offloading |
US8918602B2 (en) | 2011-09-19 | 2014-12-23 | International Business Machines Corporation | Dynamically altering time to live values in a data cache |
CN105446909A (zh) | 2014-08-29 | 2016-03-30 | 国际商业机器公司 | 用于缓存管理的方法和系统 |
-
2014
- 2014-08-29 CN CN201410437031.3A patent/CN105446909A/zh active Pending
-
2015
- 2015-08-12 US US14/824,384 patent/US9690712B2/en not_active Expired - Fee Related
-
2017
- 2017-05-12 US US15/593,403 patent/US10223287B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6807607B1 (en) * | 1999-08-17 | 2004-10-19 | International Business Machines Corporation | Cache memory management system and method |
US20070156966A1 (en) * | 2005-12-30 | 2007-07-05 | Prabakar Sundarrajan | System and method for performing granular invalidation of cached dynamically generated objects in a data communication network |
US7480767B2 (en) * | 2006-06-15 | 2009-01-20 | Sap Ag | Cache with time-based purging and computation of purged items |
US8533393B1 (en) * | 2010-12-14 | 2013-09-10 | Expedia, Inc. | Dynamic cache eviction |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10223287B2 (en) | 2014-08-29 | 2019-03-05 | International Business Machines Corporation | Method and system for cache management |
CN113688155A (zh) * | 2021-08-05 | 2021-11-23 | 浪潮云信息技术股份公司 | 一种预防缓存雪崩的系统 |
Also Published As
Publication number | Publication date |
---|---|
US20160062903A1 (en) | 2016-03-03 |
US10223287B2 (en) | 2019-03-05 |
US20170249259A1 (en) | 2017-08-31 |
US9690712B2 (en) | 2017-06-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105446909A (zh) | 用于缓存管理的方法和系统 | |
US10678678B1 (en) | Ordered test execution based on test coverage | |
US10387236B2 (en) | Processing data errors for a data processing system | |
CN109614262B (zh) | 业务校验方法、装置及计算机可读存储介质 | |
US20160004517A1 (en) | SOFTWARE DEVELOPMENT IMPROVEMENT TOOL - iREVIEW | |
CN106575227B (zh) | 自动软件更新框架 | |
CN113032257B (zh) | 自动化测试方法、装置、计算机系统和可读存储介质 | |
CN114528008A (zh) | 基于分布式版本控制系统的代码管控方法、设备及介质 | |
CN109299124B (zh) | 用于更新模型的方法和装置 | |
US20220114478A1 (en) | System and method for enhancing inference models based on prediction data | |
CN109361628A (zh) | 报文组装方法、装置、计算机设备和存储介质 | |
CN110865806B (zh) | 代码处理方法、装置、服务器及存储介质 | |
CN115454420A (zh) | 人工智能算法模型部署系统、方法、设备及存储介质 | |
CN110716804A (zh) | 无用资源的自动删除方法、装置、存储介质及电子设备 | |
CN110908907A (zh) | Web页面测试方法、装置、设备及存储介质 | |
CN114489704A (zh) | 基于策略的版本编译部署方法及装置 | |
US11709862B2 (en) | Selective synchronization of database objects | |
CN105094857A (zh) | 用于应用加载的方法和系统 | |
CN110689137B (zh) | 参数确定方法、系统、介质和电子设备 | |
US10311138B2 (en) | Preventing partial change set deployments in content management systems | |
CN113867778B (zh) | 一种镜像文件的生成方法、装置、电子设备及存储介质 | |
CN112148762A (zh) | 一种实时数据流的统计方法和装置 | |
US20220365912A1 (en) | Data Quality Management System | |
CN115080434A (zh) | 案例执行方法、装置、设备和介质 | |
CN112765188A (zh) | 配置信息处理方法、配置管理系统、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160330 |