CN104657143A - 高性能数据缓存方法 - Google Patents
高性能数据缓存方法 Download PDFInfo
- Publication number
- CN104657143A CN104657143A CN201510079262.6A CN201510079262A CN104657143A CN 104657143 A CN104657143 A CN 104657143A CN 201510079262 A CN201510079262 A CN 201510079262A CN 104657143 A CN104657143 A CN 104657143A
- Authority
- CN
- China
- Prior art keywords
- data
- cache
- buffer memory
- caching method
- buffer
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了高性能数据缓存方法,包括以下步骤:当发起获取数据的请求时,根据传递的请求参数,获取缓存类型标记,根据不同缓存类型的缓存实例来处理获取数据的请求;通过调用缓存工厂类,实例化不同的缓存实体类来操作缓存数据;通过调用缓存处理逻辑函数获取缓存对象。其中,缓存实体类包括本地缓存和分布式高速缓存。本发明结合web应用程序的特点,采用服务器本地缓存(LocalCache)与独立缓存服务器(MemCache)相结合的模式分类存储数据,极大地降低了数据源的压力,数据访问请求高并发的时候web页面的响应速度得到很大的提高。
Description
技术领域
本发明涉及web应用开发中的数据缓存技术,具体涉及高性能数据缓存方法。
背景技术
目前,有些交互式web应用平台要求功能丰富,还要具备可扩展性、可维护性和高性能的特点,在提供给最终用户一个牢固稳定体验的同时,还要兼顾运营的成本。因此,在设计系统架构的时候,对于缓存设计的目标就是低成本、高性能,在保证高效的缓存实现下,又不过度的设计,保持web应用平台的灵巧性。
在web应用开发过程中,经常会面对各种各样的数据结构,有的数据内容庞大,有的数据琐碎繁多。如果不同类型的数据结构都使用数据库做载体,虽然解决了服务器之间数据的同步,但是随着访问量的增加,频繁的读写数据库,势必会对服务器的性能造成影响。
发明内容
本发明提供高性能数据缓存方法,该方法结合web应用程序的特点,采用服务器本地缓存(LocalCache)与独立缓存服务器(MemCache)相结合的模式分类存储数据,极大地降低了数据源的压力,数据访问请求高并发的时候web页面的响应速度得到很大的提高。
为解决上述技术问题,本发明方法采用如下技术方案:高性能数据缓存方法,包括以下步骤:
S1、当发起获取数据的请求时,根据传递的请求参数,获取缓存类型标记,根据不同缓存类型的缓存实例来处理获取数据的请求;
S2、通过调用缓存工厂类,实例化不同的缓存实体类来操作缓存数据;
S3、通过调用缓存处理逻辑函数获取缓存对象。
优选地,所述步骤S2为:通过定义一个缓存工厂类,根据传递的请求参数,从项目配置文件中读取不同的缓存配置参数,来实例化不同的缓存实体类,以便按类操作缓存数据。
优选地,所述缓存实体类包括本地缓存和分布式高速缓存。本地缓存为使用.net框架提供Cache缓存类。分布式高速缓存为独立的分布式内存对象缓存系统,通过在内存中维护哈希表,将磁盘文件调用到内存中,在内存中实现数据的存取,并通过socket通信来传递数据。
优选地,所述缓存实体类采用“项目简称+功能简称+同类型缓存序号+缓存时间”生成扩展名,作为缓存数据的缓存名称。
优选地,所述步骤S3为:缓存处理逻辑函数首先根据缓存名称去对应的缓存实体类中获取缓存数据,如果缓存实体类中存在缓存数据,就返回相应的数据对象,若不存在,则通过委托函数去数据源中获取缓存数据;在得到需要的数据对象之后,将数据对象按照缓存名称存储到相应的缓存实体类中,同时返回该数据对象。其中,所述数据源包括数据库及磁盘文件。
优选地,所述委托函数用于返回一个object对象,把需要缓存的数据对象的数据源提取操作定义成一个具体的委托函数,并以object类型为该函数的返回值,以参数的方式传递给缓存处理逻辑。
与现有技术相比,本发明具有如下优点及有益效果:
1、从数据缓存的流程上看,用户并不需要知道内部是采用什么样的缓存机制,只需要提供缓存名称、缓存类型标记和缓存时间,就能提取到想要的数据。而对于相同的数据请求(相同的请求会生成相同的缓存名称),都会先通过缓存处理逻辑函数去判断,优先获取缓存数据,缓存失效才从实际数据源获取数据并重新缓存,这样大大降低了直接读取数据源的次数,提高了服务器的I/O性能,数据访问请求高并发的时候web页面的响应速度得到很大的提高。
2、采用缓存处理逻辑函数获取数据,若缓存中不存在所请求的数据,则通过委托函数去实际的数据源中获取数据,使得在开发不同数据缓存的时候,不需要去重复编写同样的数据源读取数据的操作,大大降低了开发成本,同时也利于程序轻松移植到不同的数据环境中,程序的可移植性大大提高。
附图说明
图1为本发明的数据缓存流程图。
具体实施方式
下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不局限于此。
实施例
如图1所示,本发明设计了一个基于数据对象的缓存机制,数据缓存方法包括如下步骤:
1、首先,当发起获取数据的请求时,根据传递的请求参数,获取缓存类型标记,根据不同缓存类型的缓存实例来处理获取数据的请求。
2、通过调用缓存工厂类,实例化不同的缓存实体类来操作缓存数据。通过定义一个缓存工厂类,根据传递的请求参数,从项目配置文件中读取不同的缓存配置参数,来实例化不同的缓存实体类,以便按类操作缓存数据。
缓存实体类在本实施例中定义了两种:一种是本地缓存,其使用.net框架提供Cache缓存类,用来存储一些变动频率比较低,而且数据容量相对比较大的数据对象。另一种是分布式高速缓存(也叫独立缓存),其特点是一个独立高性能的分布式内存对象缓存系统,通过在内存中维护的一个hash(哈希)表,将磁盘文件调用到内存中,在内存中实现数据的存取,并通过socket通信来传递数据。对这两种不同的缓存方式按照统一的接口封装,在具体使用时,根据传递给缓存工厂的缓存类型标记去实例化相应的缓存实例。
考虑到定义的两种缓存实体类都是通过hash表的方式去检索缓存的数据,而且缓存的数据支持多种数据格式。在处理缓存的逻辑上,本实施例采取统一的缓存命名规范,即统一采用“项目简称+功能简称+同类型缓存序号+缓存时间”生成扩展名,这样的缓存名称能够直观的体现出这个缓存数据的用途和缓存的时间,方便开发调试和缓存维护;日后如果需要对数据的缓存方式进行修改或者扩充,只需要调整输入的缓存类型标记就能更换缓存方式,利于缓存方式的修改或扩充。
3、其次,在缓存工厂类实例化相应的缓存实体类之后,通过调用缓存处理逻辑函数获取缓存对象。缓存处理逻辑函数有3个参数:字符串类型的缓存名称(用来在缓存队列中查询存储的缓存对象)、委托函数(delegate)类型的缓存对象(用来提取数据库中实际存储的数据)、bool类型的缓存刷新标记(该标记默认值是false;当设为true时,绕过缓存机制,优先提取数据库数据,目的是为了在特殊需求时提取最新的数据使用的)。
缓存处理逻辑函数是首先根据缓存名称去对应的缓存实体类中获取缓存数据,如果缓存实体类中存在缓存数据,就返回相应的数据对象,若不存在,则通过委托函数(delegate)去数据源中获取缓存数据,这里数据源并不局限于数据库,也可以是磁盘文件等其他数据载体。在得到需要的数据对象之后,将数据对象按照缓存名称存储到相应的缓存实体类中,同时返回该数据对象。
所述委托函数(delegate)主要用于返回一个object对象,把需要缓存的数据对象的数据源提取操作定义成一个具体的委托函数,并以object类型为该函数的返回值,以参数的方式传递给缓存处理逻辑。这使得在开发不同数据缓存的时候,不需要去重复编写同样的缓存处理逻辑,而只需要去编写不同的数据源操作函数,以参数的形式,通过这个委托函数类型传递给缓存处理逻辑类中,即可获取需要的数据,大大降低了开发成本,提高了程序的可移植性。
有时候页面请求需要强制显示实时最新的数据,也就是说不管缓存中是否存在数据,都提取最新的数据库数据。这就会用到前面所述的第三个参数,bool类型的缓存刷新标记。在调用缓存处理逻辑函数时,把bool参数设定为true,这样系统会跳过缓存获取流程,而优先通过委托函数提取数据库数据并把提取到的数据响应给请求端,并同时更新缓存中的数据内容。通过上述缓存处理逻辑函数的三个参数,使得我们在调用缓存处理逻辑函数时更加灵活响应不同的用户需求。
上述实施例为本发明的一种实施方式,但本发明的实施方式并不限定与此,从事该领域技术人员在未背离本发明精神和原则下所做的任何修改、替换、改进,均包含在本发明的保护范围内。
Claims (10)
1.高性能数据缓存方法,其特征在于,包括以下步骤:
S1、当发起获取数据的请求时,根据传递的请求参数,获取缓存类型标记,根据不同缓存类型的缓存实例来处理获取数据的请求;
S2、通过调用缓存工厂类,实例化不同的缓存实体类来操作缓存数据;
S3、通过调用缓存处理逻辑函数获取缓存对象。
2.根据权利要求1所述的高性能数据缓存方法,其特征在于,所述步骤S2为:
通过定义一个缓存工厂类,根据传递的请求参数,从项目配置文件中读取不同的缓存配置参数,来实例化不同的缓存实体类,以便按类操作缓存数据。
3.根据权利要求1或2所述的高性能数据缓存方法,其特征在于,所述缓存实体类包括本地缓存和分布式高速缓存。
4.根据权利要求3所述的高性能数据缓存方法,其特征在于,所述本地缓存为使用.net框架提供Cache缓存类。
5.根据权利要求3所述的高性能数据缓存方法,其特征在于,所述分布式高速缓存为独立的分布式内存对象缓存系统,通过在内存中维护哈希表,将磁盘文件调用到内存中,在内存中实现数据的存取,并通过socket通信来传递数据。
6.根据权利要求3所述的高性能数据缓存方法,其特征在于,所述本地缓存用于存储变动频率比较低,而且数据容量相对比较大的数据对象。
7.根据权利要求1或2所述的高性能数据缓存方法,其特征在于,所述缓存实体类采用“项目简称+功能简称+同类型缓存序号+缓存时间”生成扩展名,作为缓存数据的缓存名称。
8.根据权利要求7所述的高性能数据缓存方法,其特征在于,所述步骤S3为:
缓存处理逻辑函数首先根据缓存名称去对应的缓存实体类中获取缓存数据,如果缓存实体类中存在缓存数据,就返回相应的数据对象,若不存在,则通过委托函数去数据源中获取缓存数据;在得到需要的数据对象之后,将数据对象按照缓存名称存储到相应的缓存实体类中,同时返回该数据对象。
9.根据权利要求8所述的高性能数据缓存方法,其特征在于,所述数据源包括数据库及磁盘文件。
10.根据权利要求8所述的高性能数据缓存方法,其特征在于,所述委托函数用于返回一个object对象,把需要缓存的数据对象的数据源提取操作定义成一个具体的委托函数,并以object类型为该函数的返回值,以参数的方式传递给缓存处理逻辑。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510079262.6A CN104657143A (zh) | 2015-02-12 | 2015-02-12 | 高性能数据缓存方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510079262.6A CN104657143A (zh) | 2015-02-12 | 2015-02-12 | 高性能数据缓存方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104657143A true CN104657143A (zh) | 2015-05-27 |
Family
ID=53248329
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510079262.6A Pending CN104657143A (zh) | 2015-02-12 | 2015-02-12 | 高性能数据缓存方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104657143A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105095462A (zh) * | 2015-07-30 | 2015-11-25 | 北京京东尚科信息技术有限公司 | 处理网页重复请求的方法和系统 |
CN106126536A (zh) * | 2016-06-15 | 2016-11-16 | 北京皮尔布莱尼软件有限公司 | 一种数据缓存的自动选择方法及系统 |
CN106844740A (zh) * | 2017-02-14 | 2017-06-13 | 华南师范大学 | 基于内存对象缓存系统的数据预读方法 |
CN107357814A (zh) * | 2017-06-05 | 2017-11-17 | 广东网金数据服务有限公司 | 一种数据加载方法、装置及终端 |
CN108153812A (zh) * | 2017-11-24 | 2018-06-12 | 广州高清视信数码科技股份有限公司 | 数据通信的方法、装置、计算机设备及存储介质 |
CN108989828A (zh) * | 2018-07-09 | 2018-12-11 | 武汉斗鱼网络科技有限公司 | 一种多对象缓存方法、终端装置及存储介质 |
CN109086279A (zh) * | 2017-06-13 | 2018-12-25 | 北京京东尚科信息技术有限公司 | 报表缓存方法和装置 |
CN112948336A (zh) * | 2021-03-30 | 2021-06-11 | 联想凌拓科技有限公司 | 数据加速方法及缓存单元、电子设备及存储介质 |
CN113608886A (zh) * | 2021-06-30 | 2021-11-05 | 北京新氧科技有限公司 | 一种函数接入缓存方法、装置、电子设备及存储介质 |
CN113986961A (zh) * | 2021-10-29 | 2022-01-28 | 北京泰策科技有限公司 | 一种分布式高并发的消息匹配方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101154230A (zh) * | 2006-09-30 | 2008-04-02 | 中兴通讯股份有限公司 | 一种大数据量分类检索网页的响应方法 |
US20130013729A1 (en) * | 2011-07-07 | 2013-01-10 | International Business Machines Corporation | Multi-level adaptive caching within asset-based web systems |
CN103631891A (zh) * | 2013-11-15 | 2014-03-12 | 北京奇虎科技有限公司 | 浏览器磁盘缓存的处理方法与浏览器 |
-
2015
- 2015-02-12 CN CN201510079262.6A patent/CN104657143A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101154230A (zh) * | 2006-09-30 | 2008-04-02 | 中兴通讯股份有限公司 | 一种大数据量分类检索网页的响应方法 |
US20130013729A1 (en) * | 2011-07-07 | 2013-01-10 | International Business Machines Corporation | Multi-level adaptive caching within asset-based web systems |
CN103631891A (zh) * | 2013-11-15 | 2014-03-12 | 北京奇虎科技有限公司 | 浏览器磁盘缓存的处理方法与浏览器 |
Non-Patent Citations (2)
Title |
---|
林帆: ""下一代网络安全态势评估系统中数据缓存子系统的设计与实现"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
谢杰涛等: ""Web系统高性能本地数据缓存实现机制"", 《计算机应用研究》 * |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105095462B (zh) * | 2015-07-30 | 2018-09-28 | 北京京东尚科信息技术有限公司 | 处理网页重复请求的方法和系统 |
CN105095462A (zh) * | 2015-07-30 | 2015-11-25 | 北京京东尚科信息技术有限公司 | 处理网页重复请求的方法和系统 |
CN106126536A (zh) * | 2016-06-15 | 2016-11-16 | 北京皮尔布莱尼软件有限公司 | 一种数据缓存的自动选择方法及系统 |
CN106844740A (zh) * | 2017-02-14 | 2017-06-13 | 华南师范大学 | 基于内存对象缓存系统的数据预读方法 |
CN107357814A (zh) * | 2017-06-05 | 2017-11-17 | 广东网金数据服务有限公司 | 一种数据加载方法、装置及终端 |
CN109086279A (zh) * | 2017-06-13 | 2018-12-25 | 北京京东尚科信息技术有限公司 | 报表缓存方法和装置 |
CN108153812A (zh) * | 2017-11-24 | 2018-06-12 | 广州高清视信数码科技股份有限公司 | 数据通信的方法、装置、计算机设备及存储介质 |
CN108989828A (zh) * | 2018-07-09 | 2018-12-11 | 武汉斗鱼网络科技有限公司 | 一种多对象缓存方法、终端装置及存储介质 |
CN112948336A (zh) * | 2021-03-30 | 2021-06-11 | 联想凌拓科技有限公司 | 数据加速方法及缓存单元、电子设备及存储介质 |
CN112948336B (zh) * | 2021-03-30 | 2023-01-03 | 联想凌拓科技有限公司 | 数据加速方法及缓存单元、电子设备及存储介质 |
CN113608886A (zh) * | 2021-06-30 | 2021-11-05 | 北京新氧科技有限公司 | 一种函数接入缓存方法、装置、电子设备及存储介质 |
CN113608886B (zh) * | 2021-06-30 | 2024-04-26 | 北京新氧科技有限公司 | 一种函数接入缓存方法、装置、电子设备及存储介质 |
CN113986961A (zh) * | 2021-10-29 | 2022-01-28 | 北京泰策科技有限公司 | 一种分布式高并发的消息匹配方法 |
CN113986961B (zh) * | 2021-10-29 | 2022-05-20 | 北京泰策科技有限公司 | 一种分布式高并发的消息匹配方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104657143A (zh) | 高性能数据缓存方法 | |
US11269832B2 (en) | Application-centric object configuration | |
Benelallam et al. | Neo4EMF, a scalable persistence layer for EMF models | |
CN104881466B (zh) | 数据分片的处理以及垃圾文件的删除方法和装置 | |
CN105183839A (zh) | 一种基于Hadoop的小文件分级索引的存储优化方法 | |
CN104462269A (zh) | 一种异构数据库数据交换方法及系统 | |
CN103617176A (zh) | 一种实现多源异构数据资源自动同步的方法 | |
CN109344348B (zh) | 一种资源更新方法及装置 | |
US11010401B2 (en) | Efficient snapshot generation of data tables | |
CN104866497A (zh) | 分布式文件系统列式存储的元数据更新方法、装置、主机 | |
CN103164525B (zh) | Web应用发布方法和装置 | |
CN103595797B (zh) | 一种分布式存储系统中的缓存方法 | |
CN102722405B (zh) | 高并发、多线程应用中的计数方法及系统 | |
JP2012174096A (ja) | 計算機システム及びデータ管理方法 | |
CN104423982B (zh) | 请求的处理方法和处理设备 | |
CN104281414A (zh) | 分布式文件系统及其小文件访问方法 | |
CN104598550A (zh) | 一种网络视频索引的更新方法和装置 | |
CN102982171A (zh) | 一种数据库同步方法 | |
US9015165B1 (en) | Text-SQL relational database | |
CN110020272A (zh) | 缓存方法、装置以及计算机存储介质 | |
Rudolf | SQL, noSQL or newSQL–comparison and applicability for Smart Spaces | |
CN111797119B (zh) | 一种缓存装置、系统及缓存方法 | |
US10552371B1 (en) | Data storage system with transparent presentation of file attributes during file system migration | |
US20170097990A1 (en) | Text-sql relational database | |
CN107656992B (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 | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20150527 |