本发明涉及一种响应式缓存预热方法,具体为基于数据、权限变更通知的响应式缓存预热方法,属于数据缓存预热。
背景技术:
1、数据缓存预热是一种提高数据访问效率的技术手段,特别是在计算机存储和数据库管理中。缓存预热通常指的是在实际需要使用数据之前,先将数据加载到缓存中,以便在需要时能够快速访问;缓存预热可以显著提高数据检索性能,减少访问延迟,对于需要处理大量数据的应用程序尤其重要。在预热过程中,可以使用各种算法和策略来决定哪些数据应该被加载到缓存中,这通常涉及到数据的访问频率、修改频率等特性。
2、目前的缓存系统在查询业务数据时,如果是首次查询则直接查询数据库,查到数据后将数据保存到缓存系统并将结果返回,当下次使用相同参数来请求数据时会命中缓存,则直接从缓存系统查询数据。当执行会修改业务数据的操作时,会同步清空缓存数据。定时进行缓存预热,基于昨日查询记录通过推测参数变更代替用户查询来预热缓存,然而还存在以下问题:
3、1.无法及时感知数据、权限变化,缓存更新不及时;
4、2.缓存更新逻辑缺少完善的失败重试机制,无法保障缓存更新的成功率;
5、3.业务数据、权限变更后缓存被清空而不会被更新,导致缓存命中率低下;
6、4.预热逻辑中基于昨日查询记录通过推测参数变更,构建查询参数来预热缓存,参数推测不准确、缓存可用性低。
7、为此,提出一种基于数据、权限变更通知的响应式缓存预热方法。
技术实现思路
1、有鉴于此,本发明提供一种基于数据、权限变更通知的响应式缓存预热方法,以解决或缓解现有技术中存在的技术问题,至少提供有益的选择。
2、本发明实施例的技术方案是这样实现的:一种基于数据、权限变更通知的响应式缓存预热方法,包括以下步骤:
3、s1、构建query eng i ne查询引擎-利用查询引擎优先从red i s缓存中读取结果;
4、s2、在后端请求中插入查询记录-用于选取预热目标数据使用;
5、s3、数据集数据更新-更新成功则将跟新事件写入数据集事件表;
6、s4、监听数据集、权限变更事件;
7、s5、构建数据集事件处理逻辑;
8、s6、定时去消费预热任务队列;
9、s7、任务提交到线程池前,更新任务状态为处理中-对缓存数据进行刷新;
10、s8、查询引擎服务收到请求后,对请求类型进行检查,是缓存刷新请求,则执行缓存刷新逻辑,从数据库中直接查询数据,查询成功后,更新red i s对应key的va l ue。
11、进一步优选的,所述s1中,当red i s缓存中没有与请求对应的结果时,通过查询引擎自动提交数据库查询任务,查询成功后,引擎自动将结果保存到red i s缓存。
12、进一步优选的,所述s2中,用户在系统中查询数据时,发起的后端请求中有统计用户的数据查询记录的逻辑,每当用户查询一个数据,系统都会自动插入一条查询记录;
13、其中,查询记录是根据用户id和数据id做逻辑库主键去重生成。
14、进一步优选的,所述s3中,数据集数据每12-36小时进行一次更新。
15、进一步优选的,所述s4中,利用定时任务去查询未处理的时间记录,然后循环调用时间处理逻辑去处理事件。
16、进一步优选的,所述s5中,当数据集事件处理逻辑执行时,首先根据数据集id从数据查询记录中选取需要预热的数据;然后根据优先级策略将数据缓存预热任务信息先放入优先级任务队列;然后获取分布式锁,获取成功后,根据score倒序查出优先级队列的所有数据;
17、其中,查询范围为6至8日内的数据,即date>=t-(6至8),数据集id=当前处理的数据集id;
18、其中,优先级策略为:最近查询时间越近,优先级越高,最近查询时间越近说明近期越活跃,需要优先刷新;
19、其中,缓存预热任务信息总数tota l count<(3至5),则全部由快速处理队列处理,否则将数据分为3至5份,快速处理队列分1份,慢速处理队列分2-4份,即:i ndex=total count/(3至5),快速处理任务队列分的[0,i ndex],慢速处理任务队列分的(i ndex,tata l count-1]。
20、进一步优选的,所述s6中,消费前将失败的和长时间处理中状态的任务重新加入到快慢任务队列,然后循环从队列中pop元素,并在循环中执行缓存预热逻辑、生成缓存,任务的执行使用线程池做并行提速,任务执行过程中记录和更新任务状态,队列为空后停止任务;
21、其中,快速队列的线程池的线程数大于慢速队列,线程数可配置,队列采用同步阻塞队列,线程池满自动挂起提交任务的线程,等待线程池有空闲时再唤起;
22、其中,任务状态包括初始态、处理中、成功和失败。
23、进一步优选的,所述s7中,任务执行前更新状态为处理中,缓存预热逻辑中根据用户数据所在的分析看板中的默认参数来构建全局筛选器参数,然后调用数据查询、缓存刷新方法,数据查询、缓存刷新方法负责构建数据查询的下游rpc接口参数,并根据参数判断任务的状态;
24、其中,判断方式为:rpc接口调用成功且业务请求状态码为200,说明缓存刷新成功,随后更新缓存预热任务的状态为成功,否则更新缓存预热任务的状态为失败。
25、进一步优选的,所述s7中,缓存预热逻辑整体异常捕获,捕获到异常则更新任务状态为失败,等待下一周期的处理。
26、进一步优选的,所述s8中,key为数据编译生成的sq l的md5值拼接而成,保证一个sq l一个缓存。
27、本发明实施例由于采用以上技术方案,其具有以下优点:
28、一、本发明通过引入通知机制,来提升缓存预热时机的准确性和及时性,并且每个缓存预热请求使用独立的任务进行执行,具有完善的失败重试策略,保证了预热请求的高成功率,通过使用查询统计和优先级策略来选取需要预热的数据,模拟用户查询路径构建查询参数来预热缓存,缓存有效性高。
29、二、本发明通过将缓存更新逻辑抽离成独立调度任务,配合重试机制来保证任务的成功率,配合数据集事件处理逻辑利用削峰策略,可有效防止服务器因压力大而响应缓慢或宕机的情况发生。
30、三、本发明基于事件通知机制,可扩展性强。
31、上述概述仅仅是为了说明书的目的,并不意图以任何方式进行限制。除上述描述的示意性的方面、实施方式和特征之外,通过参考附图和以下的详细描述,本发明进一步的方面、实施方式和特征将会是容易明白的。
1.一种基于数据、权限变更通知的响应式缓存预热方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的基于数据、权限变更通知的响应式缓存预热方法,其特征在于:所述s1中,当redis缓存中没有与请求对应的结果时,通过查询引擎自动提交数据库查询任务,查询成功后,引擎自动将结果保存到redis缓存。
3.根据权利要求1所述的基于数据、权限变更通知的响应式缓存预热方法,其特征在于:所述s2中,用户在系统中查询数据时,发起的后端请求中有统计用户的数据查询记录的逻辑,每当用户查询一个数据,系统都会自动插入一条查询记录;
4.根据权利要求1所述的基于数据、权限变更通知的响应式缓存预热方法,其特征在于:所述s3中,数据集数据每12-36小时进行一次更新。
5.根据权利要求1所述的基于数据、权限变更通知的响应式缓存预热方法,其特征在于:所述s4中,利用定时任务去查询未处理的时间记录,然后循环调用时间处理逻辑去处理事件。
6.根据权利要求4所述的基于数据、权限变更通知的响应式缓存预热方法,其特征在于:所述s5中,当数据集事件处理逻辑执行时,首先根据数据集id从数据查询记录中选取需要预热的数据;然后根据优先级策略将数据缓存预热任务信息先放入优先级任务队列;然后获取分布式锁,获取成功后,根据score倒序查出优先级队列的所有数据;
7.根据权利要求6所述的基于数据、权限变更通知的响应式缓存预热方法,其特征在于:所述s6中,消费前将失败的和长时间处理中状态的任务重新加入到快慢任务队列,然后循环从队列中pop元素,并在循环中执行缓存预热逻辑、生成缓存,任务的执行使用线程池做并行提速,任务执行过程中记录和更新任务状态,队列为空后停止任务;
8.根据权利要求1所述的基于数据、权限变更通知的响应式缓存预热方法,其特征在于:所述s7中,任务执行前更新状态为处理中,缓存预热逻辑中根据用户数据所在的分析看板中的默认参数来构建全局筛选器参数,然后调用数据查询、缓存刷新方法,数据查询、缓存刷新方法负责构建数据查询的下游rpc接口参数,并根据参数判断任务的状态;
9.根据权利要求8所述的基于数据、权限变更通知的响应式缓存预热方法,其特征在于:所述s7中,缓存预热逻辑整体异常捕获,捕获到异常则更新任务状态为失败,等待下一周期的处理。
10.根据权利要求1所述的基于数据、权限变更通知的响应式缓存预热方法,其特征在于:所述s8中,key为数据编译生成的sql的md5值拼接而成,保证一个sql一个缓存。