CN116662394A - 一种基于Java的响应优先式缓存加载方法 - Google Patents
一种基于Java的响应优先式缓存加载方法 Download PDFInfo
- Publication number
- CN116662394A CN116662394A CN202310848509.0A CN202310848509A CN116662394A CN 116662394 A CN116662394 A CN 116662394A CN 202310848509 A CN202310848509 A CN 202310848509A CN 116662394 A CN116662394 A CN 116662394A
- Authority
- CN
- China
- Prior art keywords
- cache
- data
- name
- hash
- task
- 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
- 230000004044 response Effects 0.000 title claims abstract description 39
- 238000011068 loading method Methods 0.000 title claims abstract description 38
- 238000000034 method Methods 0.000 claims abstract description 43
- 238000013500 data storage Methods 0.000 claims abstract description 25
- 238000004364 calculation method Methods 0.000 claims abstract description 9
- 238000001914 filtration Methods 0.000 claims abstract description 4
- 230000006378 damage Effects 0.000 claims description 9
- 230000008569 process Effects 0.000 claims description 9
- 238000006243 chemical reaction Methods 0.000 claims description 6
- 230000001360 synchronised effect Effects 0.000 claims description 6
- 230000003993 interaction Effects 0.000 claims description 4
- 238000004422 calculation algorithm Methods 0.000 claims description 3
- 238000007726 management method Methods 0.000 claims description 3
- 230000006870 function Effects 0.000 description 10
- 238000010586 diagram Methods 0.000 description 8
- 238000004590 computer program Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 7
- 238000012545 processing Methods 0.000 description 6
- 238000013461 design Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012216 screening Methods 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000010485 coping Effects 0.000 description 1
- 238000013079 data visualisation Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
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
-
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种基于Java的响应优先式缓存加载方法,在数据存储程序中,构建高效哈希缓存数据存储结构;同时构建当前运行中的缓存数据任务的记录数据存储结构。在数据调度程序中建立线程池,根据数据访问请求任务分配CPU资源,完成数据的获取,并放入哈希缓存数据结构中;在执行任务时,通过运行中缓存数据任务记录,过滤掉相同的任务;当有数据请求时,如果相应的缓存数据不存在则同步加载数据。如果相应的缓存数据存在则直接返回当前缓存数据;然后判断缓存是否过期,如果没过期则流程结束,如果过期则异步加载新数据替换当前缓存。该方法采用响应优先的策略,响应速度快、计算量小,适用于各种对响应速度有极高要求的场景。
Description
技术领域
本发明涉及高效缓存技术领域,特别涉及一种基于Java的响应优先式缓存加载方法。
背景技术
近年来,随着互联网的发展,进入大数据时代;各大门户网站、电商平台、银行系统、医院系统,每天都产生大量数据,其中一部分数据涉及到数据存储、数据缓存,而这又往往影响人们的体验。当每次获取数据的过程都要耗费算力和时间时,用户就需要等待这个过程,用户就会失去耐心而放弃访问,造成用户的流失。这就需要应用缓存技术,将计算好的数据结果放到内存中,减少运算,从而减少用户响应时间。
但现有的缓存技术虽然能在缓存没有过期时避免用户等待,但当缓存过期后还是要用户等待数据计算的这个过程,没有完全解决等待的问题。急需一种新的缓存技术弥补这个缺陷,以响应优先为首要原则,无论缓存是否过期都无需用户等待,以便实现对用户无感的效果。
发明内容
本发明的目的在于提供一种基于Java的响应优先式缓存加载方法,解决了现有技术中缓存更新带来的数据响应慢的问题;该方法通过响应优先式的缓存策略,以响应速度为首要设计原则,适应于各种高速缓存的场景。
为实现上述目的,本发明采取的技术方案为:
本发明实施例提供一种基于Java的响应优先式缓存加载方法,应用于数据交互的数据调度程序和数据存储程序;该方法包括以下步骤:
步骤1,在数据存储程序中,构建哈希缓存数据存储结构,用于记录缓存名称、缓存时长、过期时间和缓存内容;
步骤2,在数据存储程序中,构建当前运行中的缓存数据任务的数据结构,包含缓存名称和任务超时时间;
步骤3,在数据调度程序中建立线程池,根据数据访问请求任务分配线程;
避免线程的频繁创建和销毁带来的计算资源消耗;
步骤4,在运行缓存任务前,将缓存名称记录到步骤2的数据结构中,功能验证缓存名称,过滤掉相同的任务;
步骤5,当数据访问时,在所述线程池中获取异步线程,通过异步线程完成数据的获取和转换工作,将数据存储到步骤1所述的存储结构中;
步骤6,当有数据请求时,首先生成缓存名称;根据缓存名称判断,如果同名缓存数据不存在,则代表该缓存首次加载,需采用同步的方式从数据库中加载数据,等待数据加载完成后将数据保存到步骤1所述的存储结构中,并返回数据;如果同名缓存数据已存在,则判断缓存是否过期,如果缓存还没过期,则直接返回当前缓存数据;如果缓存已过期,则通过步骤5的异步方式加载新数据,用新数据替换步骤1中所述存储结构中存储的缓存数据,并设置新的过期时间。
进一步地,所述步骤1中,所述哈希缓存数据存储结构中的缓存内容为原始类型,使用时无需进行格式转化。
进一步地,所述步骤1中,所述哈希缓存数据存储结构为哈希类型,哈希的键为字符串类型,哈希的值为对象类型,对象类型中又包括长整型、对象类型或对象列表;
其中,所述长整型类型用于存储缓存的过期时间和缓存时长;
所述对象类型用于存储原始缓存数据,即缓存内容。
所述步骤1中,所述哈希缓存数据存储结构哈希的键为缓存名称,具有唯一性,能高效获取对应的缓存数据。
进一步地,所述步骤2中,所述当前运行中的缓存数据任务的数据结构为哈希类型,哈希的键为缓存名称,代表该缓存任务正在执行;哈希的值为任务的过期时间,用长整型存储。
进一步地,所述步骤1、步骤2中,所述缓存名称的生成算法一致,采用调取方法的类名、方法名和关键参数的形式,格式为:{class}_{method}_{para*}。
进一步地,所述步骤3中,当所述数据调度程序在程序初始化过程中,通过参数配置最大线程数和初始线程数,根据访问量和实际的硬件情况分配CUP 资源。
进一步地,所述步骤4包括:
通过综合判断哈希中是否存在相同的缓存名称,以及任务的过期时间,来确定是否有相同任务在进行,避免并发问题造成的重复计算。
进一步地,所述步骤4包括:
通过综合判断哈希中是否存在相同的缓存名称,以及任务的过期时间,来确定是否有相同任务在进行,避免并发问题造成的重复计算。
进一步地,所述步骤6 中:
同名缓存首次加载时因为没有可用数据,必须采用同步策略,调用程序需等待数据获取并且存入缓存后再返回数据;随着程序的运行被缓存的数据会逐渐增多,平均响应速度也会逐步提升。
与现有技术相比,本发明具有如下有益效果:
本发明实施例提供的一种基于Java的响应优先式缓存加载方法,应用于数据交互的数据调度程序和数据存储程序;该方法包括:在数据存储程序中,构建哈希缓存数据存储结构,极大的提高了数据访问效率;同时构建当前运行中的缓存数据任务的记录数据存储结构。在数据调度程序中建立线程池,根据数据访问请求任务分配CPU 资源,完成数据的获取,并放入哈希数据结构中;在执行任务时,通过运行中缓存数据任务记录,过滤掉相同的任务,避免并发问题造成的重复计算;当有数据请求时,如果相应的缓存数据不存在则同步加载数据,用户等待。如果相应的缓存数据存在则直接返回当前缓存数据;然后判断缓存是否过期,如果没过期则流程结束,如果过期则异步加载新数据替换当前缓存。
现有的缓存技术当缓存过期时仍需等待数据计算的过程,使用户处于等待中。相较于现有的缓存技术,本发明通过采用响应优先的策略,完全避免了用户的等待,适用于各种门户网站、电商平台、统计系统、数据可视化系统等数据量大、计算量大的场景。例如在门户网站的首页中同时显示来自不同数据源的各类咨询信息,如果不使用缓存则需要长时间的等待,使用本发明的响应优先式缓存方法,不管缓存是否过期都不影响用户的访问,对用户无感。在功能部署方面,采用面向切面的方式,只需简单代码即可将该功能部署到相应的系统中,简便已用,易于维护。
附图说明
图1为本发明实施例提供的基于Java的响应优先式缓存加载方法中缓存数据的结构示意图;
图2为本发明实施例提供的基于Java的响应优先式缓存加载方法的工作流程示意图。
具体实施方式
为使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体实施方式,进一步阐述本发明。
在本发明的描述中,需要说明的是,术语“上”、“下”、“内”、“外”“前端”、“后端”、“两端”、“一端”、“另一端”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“设置有”、“连接”等,应做广义理解,例如“连接”,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
本发明实施例提供的一种基于Java的响应优先式缓存加载方法,应用于高效缓存技术领域,在详细介绍本发明技术方案前,对其应用到的技术术语进行如下解释,以便清楚的理解本发明。
ConcurrentHashMap主要就是为了应对HashMap在并发环境下不安全而开发的,ConcurrentHashMap的设计与实现非常精巧,大量的利用了volatile,final,CAS等lock-free 技术来减少锁竞争对于性能的影响。在大数据平台中,ConcurrentHashMap避免了对全局加锁改成了局部加锁操作,这样就极大地提高了并发环境下的操作速度。在实时缓存保存中,调度控制程序根据缓存有无和是否过期等情况,控制原始数据写入ConcurrentHashMap中;本发明中的调度程序根据需求从ConcurrentHashMap中获取数据并返回给应用程序进行业务处理。
线程池是一种线程使用模式,线程池维护着多个线程,等待着监督管理者分配可并发执行的任务,就是可管理和维护以及分配线程的“池子”。为了减少创建和销毁线程的次数,让每个线程都可以多次的使用,可以根据系统情况调整线程的数量,防止消耗过多内存。通过对多个任务重复使用线程,线程创建的开销就被分摊到了多个任务上了,而且由于在请求到达时线程已经存在,所以消除了线程创建所带来的延迟。这样,就可以立即为请求服务,使用应用程序响应更快。通过线程池管理大大简化了线程的维护,提升了资源利用。
而本发明结合CurrentHashMap和线程池,充分利用其优点,又结合调度算法,使系统架构更加清晰,大大提升处理能力。
参照图1和图2所示,本发明实施例提供的一种基于Java的响应优先式缓存加载方法,应用于数据交互的数据调度程序和数据存储程序;该方法包括以下步骤:
步骤1,在数据存储程序中,构建哈希缓存数据存储结构,用于记录缓存名称、缓存时长、过期时间和缓存内容;
本实施例中,哈希缓存数据存储结构的具体结构如下:
Map<String, T>;
public class T{
private Long Expire;//过期时间
private Long Duration;//缓存时长
private Object data;//缓存数据
}
本步骤中,数据调度程序负责将原始数据保存到哈希中,缓存数据存储类型分别选取Long类型、Object类型。Long类型存储缓存过期时间和缓存时长。Object类型存储原始数据数据。Object类型中一般存储List 类型存储由多个相同数据类型组成的列表。也可以存储单个数据类型的数据,涵盖了所有数据类型。缓存时长通过注解带人缓存中,存储在Duration中,并且调度程序通过该时长计算出过期时间,作为判断缓存是否过期的关键数据。本实施例中,缓存数据为List列表,List中包含具体的对象数据,会随程序的销毁而清除,也会随调度程序的操作替换为新数据,并销毁老数据,回收空间。
其中,高效哈希缓存数据存储结构中包含缓存名称、缓存时长、过期时间和缓存内容,并且缓存内容为原始类型,使用时无需进行格式转化(即无需进行序列号和反序列化)。
哈希缓存中构建的缓存数据存储类型,包括长整型、集合类型、对象类型;具体的,本发明中,其中,所述长整型类型用于存储缓存的过期时间和缓存时长;集合类型用于存储缓存的列表数据;对象类型用于存储集合类型中具体的数据,为原始缓存数据,即缓存内容。
当在数据调度程序在构建缓存数据时采用类名加方法名加关键参数的形式生成哈希的键,该键具有唯一性,再通过键获取对应的缓存数据;哈希的值为缓存数据,用对象类型存储,无需进行序列化和反序列化。
当在数据调度程序中构建缓存数据时,高效哈希缓存数据存储结构中的Key 包括类名、方法名、关键参数;具体的,所述的Key可以采用{class}_{method}_{para*}的字符串形式构建。类型对应的Value为缓存的具体数据,为Object格式。
步骤2,在数据存储程序中,构建当前运行中的缓存数据任务的数据结构,包含缓存名称和任务超时时间;
本步骤中,数据调度程序负责记录缓存任务,存储在哈希中。数据调度程序通过判断哈希存在和过期时间调度异步任务的执行。本实例中通过调度程序,在异步任务执行完毕后,销毁对应的任务记录。根据过期时间判断任务超时,如超时则结束任务,并可以开启新任务。
当在构建当前运行中的缓存数据任务的记录数据存储结构中包含任务的过期时间,超时将认为任务自动结束。
在构建运行中的缓存数据任务数据存储类型,包括长整型;其中,长整型类型用于存储缓存的任务超时时间。
当在数据调度程序在异步加载数据时采用类名加方法名加关键参数的形式生成哈希的键,该键具有唯一性,再通过键判断是否有相同任务在进行,如果进行就不再重复获取数据。
当前运行中的缓存数据任务的数据结构为哈希类型,哈希的键为缓存名称,代表该缓存任务正在执行;哈希的值为任务的过期时间,用长整型存储。
步骤3,在数据调度程序中建立线程池,根据数据访问请求任务分配线程;
避免线程的频繁创建和销毁带来的计算资源消耗;
该步骤中,线程池由调度程序创建并维护。具体的,在初始化线程池时设置最大线程数量和初始线程数量。当调度程序在程序初始化过程中,通过参数配置最大线程数和初始线程数,根据访问量和实际的硬件情况分配CUP 资源。
步骤4,在运行缓存任务前,将缓存名称记录到步骤2的数据结构中,功能验证缓存名称,过滤掉相同的任务;
即:通过综合判断哈希中是否存在相同的缓存名称,以及任务的过期时间,来确定是否有相同任务在进行,避免并发问题造成的重复计算。
通过所述线程池管理线程资源,避免线程的频繁创建和销毁带来的计算资源浪费;本步骤中,让每个线程都可以多次的使用,根据系统情况调整线程的数量,防止消耗过多内存。通过对多个任务重复使用线程,线程创建的开销就被分摊到了多个任务上了,消除了线程创建所带来的延迟。使用应用程序响应更快。
当在调度程序通过线程队列管理线程的过程中,将线程创建与销毁交给线程去管理,通过线程队列削峰填谷,避免线程频繁创建销毁,提高线程使用效率,节约CUP资源。
通过异步线程完成数据的获取、转换,根据数据调取方法的类名、方法名和关键参数生成缓存名称,最后将数据用此名称作为哈希键存储在所述哈希缓存数据结构中;
本步骤中,数据调度程序提取对应的类名、方法名、和关键参数生成缓存名称,缓存名称采用{class}_{method}_{para*}的字符串形式构建。构建的缓存名称可分别用于执行中任务的key和缓存数据哈希中的key。通过key的唯一性控制异步任务的执行和缓存数据的更新。
步骤6,当有数据请求时,首先生成缓存名称;根据缓存名称判断,如果同名缓存数据不存在,则代表该缓存首次加载,需采用同步的方式从数据库中加载数据,等待数据加载完成后将数据保存到步骤1所述的存储结构中,并返回数据;如果同名缓存数据已存在,则判断缓存是否过期,如果缓存还没过期,则直接返回当前缓存数据;如果缓存已过期,则通过步骤5所述的异步方式加载新数据,用新数据替换步骤1中所述存储结构中存储的缓存数据,并设置新的过期时间。
当有数据请求时,根据缓存名称判断,如果相应的缓存数据不存在,则同步加载数据,用户等待数据返回;如果相应的缓存数据存在,则直接返回当前缓存数据;然后判断缓存是否过期,如果没过期则流程结束;如果过期则异步加载新数据替换当前缓存。
当数据调度程序有数据请求时,根据唯一的缓存名称判断,如果相应的缓存名称不存在则代表对应的缓存数据也不存在,数据不存在则同步加载数据,用户等待数据获取完成,完成后返回数据。如果相应的缓存数据存在则直接返回当前缓存数据;然后判断缓存是否过期,如果没过期则流程结束,如果过期则异步加载新数据替换当前缓存。
本发明中,预设样式可以表示为{class}_{method}_{para*}字符串。
该步骤6具体包括:遍历所有正在进行汇总的任务列表,根据类名加方法名加参数的形式判断是否有相同任务在执行,如果已经有相同任务在执行就终止异步加载缓存的线程;
判断条件为将各主要信息合并形成key在哈希中查找,哈希中已将进行中的异步任务名称记录存储,哈希中通过哈希函数快速判断;
若任务在哈希中存在则满足筛选条件,则终止异步加载缓存的线程。
若任务没有在哈希中存在,则不满足筛选条件,则获取最新缓存哈希中的Value,对所述Value值拆箱即为满足条件的最新数据;
返回数据前,判断缓存数据中的过期时间,如果过期时间超过的当前时间,则通过启动异步线程的方式获取所述最新数据保存到缓存哈希的value中,缓存完成则结束并回收线程;
具体的,本发明实施例所述调度程序先判断缓存中是否存在缓存key,缓存key存在则代表数据之前被缓存过,缓存过的数据不会先判断缓存是否过期,而是直接先返回该缓存的数据。接下来判断缓存是否过期,缓存时长通过注解传入,调度程序根据缓存时长加上当前时间计算出过期时间,所述的缓存时长一般为10分钟,也可根据实际情况设定,例如24 小时。缓存过期则启动异步任务,异步任务通过线程池中分配的线程来执行,如果任务数量超过了线程数量则进入队列等待,当有闲置线程时则启动线程。当数据获取成功,则将数据更新到缓存中,整个任务结束则线程结束,线程进入闲置状态。如果缓存key 不存在则代表这是首次缓存,首次缓存必须采用同步策略,应用程序需等待数据获取并且存入缓存后再返回数据。在本发明中,随着程序的运行被缓存的数据会逐渐增多,平均响应速度也会逐步提升。
该方法具有响应速度快、计算量小的特点,适用于各种对响应速度有极高要求的场景,采用AOP模式,只需一个注解即可实现缓存功能,缓存时长可独立配置,简便易用,易于维护。
现有技术中,已有的缓存技术主要为缓存过期后再同步更新缓存的形式,这样的缓存更新策略需同步进行耗时的数据加载操作,会带来数据响应慢的问题,急需一种为高效响应而设计的缓存技术,以响应优先为首要原则。而采用前述方法,通过响应优先式的缓存策略,以响应速度为首要设计原则,先返回当前缓存数据再异步更新缓存,适应于各种高速缓存的场景,响应无任何延迟。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种基于Java的响应优先式缓存加载方法,其特征在于,应用于数据交互的数据调度程序和数据存储程序;该方法包括以下步骤:
步骤1,在数据存储程序中,构建哈希缓存数据存储结构,用于记录缓存名称、缓存时长、过期时间和缓存内容;
步骤2,在数据存储程序中,构建当前运行中的缓存数据任务的数据结构,包含缓存名称和任务超时时间;
步骤3,在数据调度程序中建立线程池,根据数据访问请求任务分配线程;
避免线程的频繁创建和销毁带来的计算资源消耗;
步骤4,在运行缓存任务前,将缓存名称记录到步骤2的数据结构中,功能验证缓存名称,过滤掉相同的任务;
步骤5,当数据访问时,在所述线程池中获取异步线程,通过异步线程完成数据的获取和转换工作,将数据存储到步骤1所述的存储结构中;
步骤6,当有数据请求时,首先生成缓存名称;根据缓存名称判断,如果同名缓存数据不存在,则代表该缓存首次加载,需采用同步的方式从数据库中加载数据,等待数据加载完成后将数据保存到步骤1所述的存储结构中,并返回数据;如果同名缓存数据已存在,则判断缓存是否过期,如果缓存还没过期,则直接返回当前缓存数据;如果缓存已过期,则通过步骤5的异步方式加载新数据,用新数据替换步骤1中所述存储结构中存储的缓存数据,并设置新的过期时间。
2.根据权利要求1所述的一种基于Java的响应优先式缓存加载方法,其特征在于,所述步骤1中,哈希缓存数据存储结构中的缓存内容为原始类型,使用时无需进行格式转化。
3.根据权利要求2所述的一种基于Java的响应优先式缓存加载方法,其特征在于,所述步骤1中,所述哈希缓存数据存储结构为哈希类型,哈希的键为字符串类型,哈希的值为对象类型,对象类型中又包括长整型、对象类型或对象列表;
其中,所述长整型类型用于存储缓存的过期时间和缓存时长;
所述对象类型用于存储原始缓存数据,即缓存内容。
4.根据权利要求1所述的一种基于Java的响应优先式缓存加载方法,其特征在于,所述步骤1中,所述哈希缓存数据存储结构哈希的键为缓存名称,具有唯一性,能高效获取对应的缓存数据。
5.根据权利要求1所述的一种基于Java的响应优先式缓存加载方法,其特征在于,所述步骤2中,所述当前运行中的缓存数据任务的数据结构为哈希类型,哈希的键为缓存名称,代表该缓存任务正在执行;哈希的值为任务的过期时间,用长整型存储。
6.根据权利要求1所述的一种基于Java的响应优先式缓存加载方法,其特征在于,所述步骤1、步骤2中,所述缓存名称的生成算法一致,采用调取方法的类名、方法名和关键参数的形式,格式为:{class}_{method}_{para*}。
7.根据权利要求1所述的一种基于Java的响应优先式缓存加载方法,其特征在于,所述步骤3中,当所述数据调度程序在程序初始化过程中,通过参数配置最大线程数和初始线程数,根据访问量和实际的硬件情况分配CUP 资源。
8.根据权利要求1所述的一种基于Java的响应优先式缓存加载方法,其特征在于,所述步骤4包括:
通过综合判断哈希中是否存在相同的缓存名称,以及任务的过期时间,来确定是否有相同任务在进行,避免并发问题造成的重复计算。
9.根据权利要求1所述的一种基于Java的响应优先式缓存加载方法,其特征在于,所述步骤5,包括:
当在所述数据调度程序通过线程队列管理线程的过程中,将线程创建与销毁交给线程池去管理,通过线程队列削峰填谷,避免线程频繁创建销毁,提高线程使用效率。
10.根据权利要求1所述的一种基于Java的响应优先式缓存加载方法,其特征在于,所述步骤6 中:
同名缓存首次加载时因为没有可用数据,必须采用同步策略,调用程序需等待数据获取并且存入缓存后再返回数据;随着程序的运行被缓存的数据会逐渐增多,平均响应速度也会逐步提升。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310848509.0A CN116662394A (zh) | 2023-07-12 | 2023-07-12 | 一种基于Java的响应优先式缓存加载方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310848509.0A CN116662394A (zh) | 2023-07-12 | 2023-07-12 | 一种基于Java的响应优先式缓存加载方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116662394A true CN116662394A (zh) | 2023-08-29 |
Family
ID=87719294
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310848509.0A Pending CN116662394A (zh) | 2023-07-12 | 2023-07-12 | 一种基于Java的响应优先式缓存加载方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116662394A (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102880557A (zh) * | 2012-09-13 | 2013-01-16 | 浙江金大科技有限公司 | 一种异构数据源的多级分布式高速缓存 |
CN108694075A (zh) * | 2017-04-12 | 2018-10-23 | 北京京东尚科信息技术有限公司 | 处理报表数据的方法、装置、电子设备和可读存储介质 |
CN109684086A (zh) * | 2018-12-14 | 2019-04-26 | 广东亿迅科技有限公司 | 一种基于aop的分布式缓存自动加载方法及装置 |
CN109783499A (zh) * | 2019-01-18 | 2019-05-21 | 成都宝瓜科技有限公司 | 一种数据缓存方法、装置和服务器 |
CN113448749A (zh) * | 2021-06-04 | 2021-09-28 | 山东英信计算机技术有限公司 | 一种优化执行预期定时任务的方法、系统、设备及介质 |
CN114595081A (zh) * | 2022-03-04 | 2022-06-07 | 中信银行股份有限公司 | 一种基于缓存存储的响应式rpc调用方法及系统 |
-
2023
- 2023-07-12 CN CN202310848509.0A patent/CN116662394A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102880557A (zh) * | 2012-09-13 | 2013-01-16 | 浙江金大科技有限公司 | 一种异构数据源的多级分布式高速缓存 |
CN108694075A (zh) * | 2017-04-12 | 2018-10-23 | 北京京东尚科信息技术有限公司 | 处理报表数据的方法、装置、电子设备和可读存储介质 |
CN109684086A (zh) * | 2018-12-14 | 2019-04-26 | 广东亿迅科技有限公司 | 一种基于aop的分布式缓存自动加载方法及装置 |
CN109783499A (zh) * | 2019-01-18 | 2019-05-21 | 成都宝瓜科技有限公司 | 一种数据缓存方法、装置和服务器 |
CN113448749A (zh) * | 2021-06-04 | 2021-09-28 | 山东英信计算机技术有限公司 | 一种优化执行预期定时任务的方法、系统、设备及介质 |
CN114595081A (zh) * | 2022-03-04 | 2022-06-07 | 中信银行股份有限公司 | 一种基于缓存存储的响应式rpc调用方法及系统 |
Non-Patent Citations (1)
Title |
---|
张程: "分布式系统架构:技术栈详解与快速进阶", 北京:机械工业出版社, pages: 186 - 190 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8984524B2 (en) | System and method of using transaction IDS for managing reservations of compute resources within a compute environment | |
US8996811B2 (en) | Scheduler, multi-core processor system, and scheduling method | |
CN110457281A (zh) | 数据处理方法、装置、设备及介质 | |
CN108920153B (zh) | 一种基于负载预测的Docker容器动态调度方法 | |
CN103067425A (zh) | 虚拟机创建方法、虚拟机管理系统及相关设备 | |
CN106557363A (zh) | 一种大数据任务调度的系统以及方法 | |
CN111427675B (zh) | 一种数据处理方法、装置以及计算机可读存储介质 | |
CN1755720A (zh) | 用于缓存或同步项目数据的方法和系统 | |
CN110971939B (zh) | 一种违规图片的识别方法及相关装置 | |
CN101146127B (zh) | 一种分布式系统中客户端缓存更新的方法和装置 | |
CN103092698A (zh) | 云计算应用自动部署系统及方法 | |
KR20230093420A (ko) | 데이터 세트 및 노드 캐시 기반의 스케줄링 방법 및 장치 | |
CN110659261A (zh) | 一种数据挖掘模型发布方法及模型和模型服务管理方法 | |
CN112445615A (zh) | 一种线程的调度系统、计算机设备和存储介质 | |
CN106649031A (zh) | 一种监控数据的获取方法、装置及计算机 | |
CN113961346A (zh) | 数据缓存的管理与调度方法、装置、电子设备和存储介质 | |
CN114553960A (zh) | 一种数据缓存方法、装置、设备及存储介质 | |
CN112230901A (zh) | 一种基于异步io模型的网络编程框架系统及方法 | |
CN108932158A (zh) | 一种元数据服务器事务处理的方法、装置及mds服务器 | |
CN112463305A (zh) | 一种云端虚拟化gpu的管理方法、系统及相关装置 | |
CN116662394A (zh) | 一种基于Java的响应优先式缓存加载方法 | |
CN116881012A (zh) | 一种容器应用垂直扩容方法、装置、设备及可读存储介质 | |
JP5776813B2 (ja) | マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法および制御プログラム | |
CN116149841A (zh) | 基于云数据库实例负载的处理器资源动态超分方法 | |
CN109032509A (zh) | 一种分布式存储系统的数据删除方法及相关装置 |
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: 20230829 |