一种基于Java的响应优先式缓存加载方法与流程

文档序号:35278643发布日期:2023-08-31 21:58阅读:37来源:国知局
一种基于Java的响应优先式缓存加载方法与流程

本发明涉及高效缓存,特别涉及一种基于java的响应优先式缓存加载方法。


背景技术:

1、近年来,随着互联网的发展,进入大数据时代;各大门户网站、电商平台、银行系统、医院系统,每天都产生大量数据,其中一部分数据涉及到数据存储、数据缓存,而这又往往影响人们的体验。当每次获取数据的过程都要耗费算力和时间时,用户就需要等待这个过程,用户就会失去耐心而放弃访问,造成用户的流失。这就需要应用缓存技术,将计算好的数据结果放到内存中,减少运算,从而减少用户响应时间。

2、但现有的缓存技术虽然能在缓存没有过期时避免用户等待,但当缓存过期后还是要用户等待数据计算的这个过程,没有完全解决等待的问题。急需一种新的缓存技术弥补这个缺陷,以响应优先为首要原则,无论缓存是否过期都无需用户等待,以便实现对用户无感的效果。


技术实现思路

1、本发明的目的在于提供一种基于java的响应优先式缓存加载方法,解决了现有技术中缓存更新带来的数据响应慢的问题;该方法通过响应优先式的缓存策略,以响应速度为首要设计原则,适应于各种高速缓存的场景。

2、为实现上述目的,本发明采取的技术方案为:

3、本发明实施例提供一种基于java的响应优先式缓存加载方法,应用于数据交互的数据调度程序和数据存储程序;该方法包括以下步骤:

4、步骤1,在数据存储程序中,构建哈希缓存数据存储结构,用于记录缓存名称、缓存时长、过期时间和缓存内容;

5、步骤2,在数据存储程序中,构建当前运行中的缓存数据任务的数据结构,包含缓存名称和任务超时时间;

6、步骤3,在数据调度程序中建立线程池,根据数据访问请求任务分配线程;

7、避免线程的频繁创建和销毁带来的计算资源消耗;

8、步骤4,在运行缓存任务前,将缓存名称记录到步骤2的数据结构中,功能验证缓存名称,过滤掉相同的任务;

9、步骤5,当数据访问时,在所述线程池中获取异步线程,通过异步线程完成数据的获取和转换工作,将数据存储到步骤1所述的存储结构中;

10、步骤6,当有数据请求时,首先生成缓存名称;根据缓存名称判断,如果同名缓存数据不存在,则代表该缓存首次加载,需采用同步的方式从数据库中加载数据,等待数据加载完成后将数据保存到步骤1所述的存储结构中,并返回数据;如果同名缓存数据已存在,则判断缓存是否过期,如果缓存还没过期,则直接返回当前缓存数据;如果缓存已过期,则通过步骤5的异步方式加载新数据,用新数据替换步骤1中所述存储结构中存储的缓存数据,并设置新的过期时间。

11、进一步地,所述步骤1中,所述哈希缓存数据存储结构中的缓存内容为原始类型,使用时无需进行格式转化。

12、进一步地,所述步骤1中,所述哈希缓存数据存储结构为哈希类型,哈希的键为字符串类型,哈希的值为对象类型,对象类型中又包括长整型、对象类型或对象列表;

13、其中,所述长整型类型用于存储缓存的过期时间和缓存时长;

14、所述对象类型用于存储原始缓存数据,即缓存内容。

15、所述步骤1中,所述哈希缓存数据存储结构哈希的键为缓存名称,具有唯一性,能高效获取对应的缓存数据。

16、进一步地,所述步骤2中,所述当前运行中的缓存数据任务的数据结构为哈希类型,哈希的键为缓存名称,代表该缓存任务正在执行;哈希的值为任务的过期时间,用长整型存储。

17、进一步地,所述步骤1、步骤2中,所述缓存名称的生成算法一致,采用调取方法的类名、方法名和关键参数的形式,格式为:{class}_{method}_{para*}。

18、进一步地,所述步骤3中,当所述数据调度程序在程序初始化过程中,通过参数配置最大线程数和初始线程数,根据访问量和实际的硬件情况分配cup 资源。

19、进一步地,所述步骤4包括:

20、通过综合判断哈希中是否存在相同的缓存名称,以及任务的过期时间,来确定是否有相同任务在进行,避免并发问题造成的重复计算。

21、进一步地,所述步骤4包括:

22、通过综合判断哈希中是否存在相同的缓存名称,以及任务的过期时间,来确定是否有相同任务在进行,避免并发问题造成的重复计算。

23、进一步地,所述步骤6 中:

24、同名缓存首次加载时因为没有可用数据,必须采用同步策略,调用程序需等待数据获取并且存入缓存后再返回数据;随着程序的运行被缓存的数据会逐渐增多,平均响应速度也会逐步提升。

25、与现有技术相比,本发明具有如下有益效果:

26、本发明实施例提供的一种基于java的响应优先式缓存加载方法,应用于数据交互的数据调度程序和数据存储程序;该方法包括:在数据存储程序中,构建哈希缓存数据存储结构,极大的提高了数据访问效率;同时构建当前运行中的缓存数据任务的记录数据存储结构。在数据调度程序中建立线程池,根据数据访问请求任务分配cpu 资源,完成数据的获取,并放入哈希数据结构中;在执行任务时,通过运行中缓存数据任务记录,过滤掉相同的任务,避免并发问题造成的重复计算;当有数据请求时,如果相应的缓存数据不存在则同步加载数据,用户等待。如果相应的缓存数据存在则直接返回当前缓存数据;然后判断缓存是否过期,如果没过期则流程结束,如果过期则异步加载新数据替换当前缓存。

27、现有的缓存技术当缓存过期时仍需等待数据计算的过程,使用户处于等待中。相较于现有的缓存技术,本发明通过采用响应优先的策略,完全避免了用户的等待,适用于各种门户网站、电商平台、统计系统、数据可视化系统等数据量大、计算量大的场景。例如在门户网站的首页中同时显示来自不同数据源的各类咨询信息,如果不使用缓存则需要长时间的等待,使用本发明的响应优先式缓存方法,不管缓存是否过期都不影响用户的访问,对用户无感。在功能部署方面,采用面向切面的方式,只需简单代码即可将该功能部署到相应的系统中,简便已用,易于维护。



技术特征:

1.一种基于java的响应优先式缓存加载方法,其特征在于,应用于数据交互的数据调度程序和数据存储程序;该方法包括以下步骤:

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 中:


技术总结
本发明公开了一种基于Java的响应优先式缓存加载方法,在数据存储程序中,构建高效哈希缓存数据存储结构;同时构建当前运行中的缓存数据任务的记录数据存储结构。在数据调度程序中建立线程池,根据数据访问请求任务分配CPU资源,完成数据的获取,并放入哈希缓存数据结构中;在执行任务时,通过运行中缓存数据任务记录,过滤掉相同的任务;当有数据请求时,如果相应的缓存数据不存在则同步加载数据。如果相应的缓存数据存在则直接返回当前缓存数据;然后判断缓存是否过期,如果没过期则流程结束,如果过期则异步加载新数据替换当前缓存。该方法采用响应优先的策略,响应速度快、计算量小,适用于各种对响应速度有极高要求的场景。

技术研发人员:赵冬莲
受保护的技术使用者:唐山银耐联电子商务有限公司
技术研发日:
技术公布日:2024/1/14
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1