System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于Redis异步删除大Key的非阻塞删除方法及其实现系统技术方案_技高网

一种基于Redis异步删除大Key的非阻塞删除方法及其实现系统技术方案

技术编号:40983935 阅读:3 留言:0更新日期:2024-04-18 21:28
本发明专利技术属于中间件技术领域,尤其涉及一种基于Redis异步删除大Key的非阻塞删除方法及其实现系统,方法包括:接收客户端发送的删除大Key请求,Redis启动一个或多个后台任务线程,将任务分配给专门的删除线程池;删除线程池将任务分配给其中空闲的工作线程进行处理,在工作线程内部,对大Key进行异步的删除操作;Redis在后台启动专门的空间回收线程,回收已经被删除的大Key占用的内存空间,保证Redis内存的使用效率和稳定性。

【技术实现步骤摘要】

本专利技术属于中间件,特别涉及一种基于redis异步删除大key的非阻塞删除方法及其实现系统。


技术介绍

1、redis作为一款广泛应用于互联网行业的开源内存数据库,在数据管理方面发挥着重要作用。然而,redis中存在一种潜在问题,即大key。大key通常由于不合理的缓存设计或批量操作等原因而产生,它们占据着大量内存资源,并可能导致过长的持久化时间。这些问题对redis的性能和资源利用率造成了一定的负面影响。

2、在传统情况下,要删除大key,通常需要使用del命令。然而,这种方式的时间复杂度为o(n),其中n代表被删除的key的数量。对于单个字符串类型的key,时间复杂度是o(1),但对于列表、集合、有序集合或哈希表类型的key,时间复杂度则是o(m),其中m代表这些数据结构内的元素数量。

3、这就意味着,传统的删除方法会导致redis在删除大key时长时间阻塞,可能会阻碍新发起的redis命令请求,甚至引发崩溃,从而严重威胁了redis的性能和可用性。为了解决这一问题,我们提出了一种基于redis异步删除大key的非阻塞方法,旨在显著提高redis的性能和可用性。


技术实现思路

1、本专利技术旨在提供一种基于redis异步删除大key的非阻塞删除方法及其实现系统,通过引入异步删除任务和任务队列的机制,实现了对于大key的非阻塞删除操作,同时兼容了del命令,避免了集群容量倾斜和请求堆积等问题的出现,从而提升了分布式缓存的性能和稳定性。

2、本专利技术的技术方案如下:

3、第一方面,提出一种基于redis异步删除大key的非阻塞删除方法,该方法包括如下步骤:

4、s1、接收客户端发送的删除大key请求,redis启动一个或多个后台任务线程,将任务分配给专门的删除线程池;

5、s2、删除线程池将任务分配给其中空闲的工作线程进行处理,在工作线程内部,对大key进行异步的删除操作;

6、s3、redis在后台启动专门的空间回收线程,回收已经被删除的大key占用的内存空间,保证redis内存的使用效率和稳定性。

7、本专利技术进一步的改进在于,所述s1中当客户端发送删除大key的请求时,将请求信息放入一个任务队列中,同时向客户端返回删除成功的key个数,表示该删除请求已经被成功接收。

8、本专利技术进一步的改进在于,所述s1中删除线程池由一组工作线程组成,用于执行实际的删除操作,当线程池空闲时,会等待新任务的到来,而当任务队列中有新的删除任务时,会将任务分配给其中一个空闲的工作线程进行处理。

9、本专利技术进一步的改进在于,所述s2中异步删除大key操作包括以下具体步骤:

10、s201、接收客户端发送的删除大key请求,判断是否为大key;

11、s202、若不是大key,则执行del命令;若是大key,则添加异步删除任务到任务队列,判断是否有空闲异步流程。

12、本专利技术进一步的改进在于,所述s202中判断是否有空闲异步流程包括以下具体步骤:

13、s2021、若有空闲异步流程,则从队列中取出一个异步删除任务,执行删除操作,若无空闲异步流程,则等待异步流程空闲从队列中取出一个异步删除任务,执行删除操作;

14、s2022、继续处理下一个异步删除任务。

15、本专利技术进一步的改进在于,所述s2中异步删除大key操作采用的是redis的unlink命令,将待删除的大key标记为删除状态,并将其放入一个临时的列表中,删除操作在后台线程中进行,不影响主线程的正常操作。

16、本专利技术进一步的改进在于,所述当大key被标记为删除状态后,在后台线程的处理过程中会根据具体情况对该大key进行彻底删除或延迟删除,避免阻塞问题。

17、第二方面,提出一种基于redis异步删除大key的非阻塞删除系统,该系统包括:

18、接收分配模块、异步删除模块、启动回收模块:

19、所述接收分配模块,用于接收客户端发送的删除大key请求,redis启动一个或多个后台任务线程,将任务分配给专门的删除线程池;

20、所述异步删除模块,用于删除线程池将任务分配给其中空闲的工作线程进行处理,在工作线程内部,对大key进行异步的删除操作;

21、所述启动回收模块,用于redis在后台启动专门的空间回收线程,回收已经被删除的大key占用的内存空间,保证redis内存的使用效率和稳定性。本专利技术的技术效果如下:

22、提供一种基于redis异步删除大key的非阻塞删除方法及其实现系统,通过引入异步删除任务和任务队列的机制,实现了对于大key的非阻塞删除操作,同时兼容了del命令,避免了集群容量倾斜和请求堆积等问题的出现,从而提升了分布式缓存的性能和稳定性。

本文档来自技高网...

【技术保护点】

1.一种基于Redis异步删除大Key的非阻塞删除方法,其特征在于:包括以下具体步骤:

2.根据权利要求1所述的一种基于Redis异步删除大Key的非阻塞删除方法,其特征在于:所述S1中当客户端发送删除大Key的请求时,将请求信息放入一个任务队列中,同时向客户端返回删除成功的key个数,表示该删除请求已经被成功接收。

3.根据权利要求2所述的一种基于Redis异步删除大Key的非阻塞删除方法,其特征在于:所述S1中删除线程池由一组工作线程组成,用于执行实际的删除操作,当线程池空闲时,会等待新任务的到来,而当任务队列中有新的删除任务时,会将任务分配给其中一个空闲的工作线程进行处理。

4.根据权利要求3所述的一种基于Redis异步删除大Key的非阻塞删除方法,其特征在于:所述S2中异步删除大Key操作包括以下具体步骤:

5.根据权利要求4所述的一种基于Redis异步删除大Key的非阻塞删除方法,其特征在于:所述S202中判断是否有空闲异步流程包括以下具体步骤:

6.根据权利要求3所述的一种基于Redis异步删除大Key的非阻塞删除方法,其特征在于:所述S2中异步删除大Key操作采用的是Redis的UNLINK命令,将待删除的大Key标记为删除状态,并将其放入一个临时的列表中,删除操作在后台线程中进行,不影响主线程的正常操作。

7.根据权利要求4所述的一种基于Redis异步删除大Key的非阻塞删除方法,其特征在于:所述当大Key被标记为删除状态后,在后台线程的处理过程中会根据具体情况对该大Key进行彻底删除或延迟删除,避免阻塞问题。

8.一种基于Redis异步删除大Key的非阻塞删除系统,基于权利要求1-7任一项所述的一种基于Redis异步删除大Key的非阻塞删除方法实现,其特征在于,包括:接收分配模块、异步删除模块、启动回收模块:

9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时,实现权利要求1-7中任一项所述的一种基于Redis异步删除大Key的非阻塞删除方法。

10.一种电子设备,其特征在于,包括存储器,用于存储指令;处理器,用于执行所述指令,使得所述设备执行实现权利要求1-7中任一项所述的一种基于Redis异步删除大Key的非阻塞删除方法的操作。

...

【技术特征摘要】

1.一种基于redis异步删除大key的非阻塞删除方法,其特征在于:包括以下具体步骤:

2.根据权利要求1所述的一种基于redis异步删除大key的非阻塞删除方法,其特征在于:所述s1中当客户端发送删除大key的请求时,将请求信息放入一个任务队列中,同时向客户端返回删除成功的key个数,表示该删除请求已经被成功接收。

3.根据权利要求2所述的一种基于redis异步删除大key的非阻塞删除方法,其特征在于:所述s1中删除线程池由一组工作线程组成,用于执行实际的删除操作,当线程池空闲时,会等待新任务的到来,而当任务队列中有新的删除任务时,会将任务分配给其中一个空闲的工作线程进行处理。

4.根据权利要求3所述的一种基于redis异步删除大key的非阻塞删除方法,其特征在于:所述s2中异步删除大key操作包括以下具体步骤:

5.根据权利要求4所述的一种基于redis异步删除大key的非阻塞删除方法,其特征在于:所述s202中判断是否有空闲异步流程包括以下具体步骤:

6.根据权利要求3所述的一种基于redis异步删除大key的非阻塞删除方法,其特征在...

【专利技术属性】
技术研发人员:石方波毛刘刚陈国锐吴小文张国豪黄开成
申请(专利权)人:天翼云科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1