CN108111325B - 一种资源分配方法及装置 - Google Patents

一种资源分配方法及装置 Download PDF

Info

Publication number
CN108111325B
CN108111325B CN201611050570.7A CN201611050570A CN108111325B CN 108111325 B CN108111325 B CN 108111325B CN 201611050570 A CN201611050570 A CN 201611050570A CN 108111325 B CN108111325 B CN 108111325B
Authority
CN
China
Prior art keywords
resource data
resource
data
preset
cache
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.)
Active
Application number
CN201611050570.7A
Other languages
English (en)
Other versions
CN108111325A (zh
Inventor
罗钧
贾涛
胡伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Kingsoft Cloud Network Technology Co Ltd
Beijing Kingsoft Cloud Technology Co Ltd
Original Assignee
Beijing Kingsoft Cloud Network Technology Co Ltd
Beijing Kingsoft Cloud Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Kingsoft Cloud Network Technology Co Ltd, Beijing Kingsoft Cloud Technology Co Ltd filed Critical Beijing Kingsoft Cloud Network Technology Co Ltd
Priority to CN201611050570.7A priority Critical patent/CN108111325B/zh
Publication of CN108111325A publication Critical patent/CN108111325A/zh
Application granted granted Critical
Publication of CN108111325B publication Critical patent/CN108111325B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/568Storing data temporarily at an intermediate stage, e.g. caching
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/08Configuration management of networks or network elements
    • H04L41/0896Bandwidth or capacity management, i.e. automatically increasing or decreasing capacities
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/60Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明实施例公开了一种资源分配方法及装置。方法包括:接收客户端发送的资源请求;从预设缓存中,取出目标资源数据,预设缓存的操作具有原子性,且预设缓存中存储有预先从数据库读取的资源数据;将目标资源数据返回至客户端。通过本方案,能够减轻数据库的查询压力,提升系统并发性能。

Description

一种资源分配方法及装置
技术领域
本发明涉及网络技术领域,特别涉及一种资源分配方法及装置。
背景技术
许多应用系统,尤其是资源管理系统,都会初始化一些公有 资源用于分配给各个用户,例如,公有云平台提供的购买弹性公网IP(Internet Protocol,网际协议)地址的功能和服务,其中,一个IP地址只能分配给一个用户,当多个用户同时发起购买弹性公网IP地址的请求时,极易出现IP地址分配重复的现象,即高并发下资源重复分配的问题。
目前,主要使用乐观锁,基于数据版本(Version)的记录机制,来防止高并发下资源的重复分配。具体的,在基于数据库表的解决方案中,为数据库表增加一个“version”字段,表示数据的版本号,读取出数据时,将此版本号一同读出,之后更新时,对此版本号加1,然后将更新完成后用于提交的数据版本号与数据库表对应记录的当前版本号进行对比,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据(即资源已经被分配),不进行更新。
通过上述方法,利用乐观锁可以改善资源重复分配的状况,但针对每次请求,都需从数据库里重新取一次数据,增加了数据库的查询压力,导致系统并发性能较低。
发明内容
本发明实施例的目的在于提供一种资源分配方法及装置,以减轻数据库的查询压力,提升系统并发性能。具体技术方案如下:
第一方面,本发明实施例提供了一种资源分配方法,所述方法包括:
接收客户端发送的资源请求;
从预设缓存中,取出目标资源数据;所述预设缓存的操作具有原子性,且所述预设缓存中存储有预先从数据库读取的资源数据;
将所述目标资源数据分配给所述客户端。
可选地,所述存储预先从数据库读取的资源数据的步骤,包括:
预先针对指定类型的资源数据,在所述预设缓存中建立对应的资源集合;
将所述数据库中所述指定类型的资源数据对应的数据表与资源集合的对应关系存储至所述预设缓存中;
根据所述对应关系,从所述指定类型的资源数据对应的数据表中获取第一预设数量个资源数据,存储至所述预设缓存中对应的资源集合中。
可选地,所述存储预先从数据库读取的资源数据的步骤,包括:
预先针对数据库中存储的每种类型的资源数据,在所述预设缓存中为每种类型的资源数据建立对应的资源集合;
将数据库中存储的每种类型的资源数据对应的数据表与资源集合的对应关系存储至所述预设缓存中;
根据所述对应关系,分别从每种类型的资源数据对应的数据表中获取不同类型的第二预设数量个资源数据,存储至所述预设缓存中对应的资源集合中。
可选地,所述从预设缓存中,取出目标资源数据的步骤,包括:
根据所述资源请求,确定目标资源数据的类型;
根据所述目标资源数据的类型,从对应的资源集合中取出所述目标资源数据。
可选地,在所述存储至所述预设缓存中对应的资源集合中的步骤之后,还包括:
在所述数据库中,采用数据库行级锁,将所存储至所述预设缓存中的资源数据标识为已缓存资源。
可选地,所述从预设缓存中,取出目标资源数据的步骤之前,还包括:
判断所述预设缓存中是否有资源数据,如果有,返回执行所述从预设缓存中,取出所述目标资源数据的步骤;否则,从所述指定类型的资源数据对应的数据表中查找到第三预设数量个未缓存的资源数据,存储至所述预设缓存中,并在所述指定类型的资源数据对应的数据表中,采用数据库行级锁,将所述第三预设数量个未缓存的资源数据标识为已缓存资源,返回执行所述取出目标资源数据的步骤。
可选地,所述从预设缓存中,取出目标资源数据的步骤之前,还包括:
判断所述预设缓存中的资源数据的数量是否小于预设阈值,如果否,返回执行所述从预设缓存中,取出所述目标资源数据的步骤;如果是,则从所述指定类型的资源数据对应的数据表中查找到第四预设数量个未缓存的资源数据,存储至所述预设缓存中,并在所述指定类型的资源数据对应的数据表中,采用数据库行级锁,将所述第四预设数量个未缓存的资源数据标识为已缓存资源,返回执行所述取出目标资源数据的步骤。
可选地,在所述将所述目标资源数据分配给所述客户端的步骤之后,还包括:
在所述指定类型的资源数据对应的数据表中,将所述目标资源数据标识为已分配资源。
可选地,所述预先针对指定类型的资源数据,在所述预设缓存中建立对应的资源集合的步骤,之前,还包括:
接收针对所述指定类型的资源数据对应的数据表的分配优化请求;
判断所述数据库中是否存在所述指定类型的资源数据对应的数据表;
若是,判断所述指定类型的资源数据对应的数据表中是否存在所述指定类型的资源数据对应的列;
若存在,执行所述预先针对所述指定类型的资源数据,在所述预设缓存中建立对应的资源集合的步骤。
可选地,所述预设缓存为Redis缓存,
所述存储至所述预设缓存中对应的资源集合中的步骤,包括:
使用sadd方法,存储至所述预设缓存中对应的资源集合中。
可选地,所述预设缓存为Redis缓存,所述从预设缓存中,取出目标资源数据的步骤,包括:
使用spop方法,从所述预设缓存中取出目标资源数据。
可选地,所述预设缓存的操作具有原子性,为:所述预设缓存的操作是不可分割的,且在执行完毕之前不会被任何其他事务或事件中断。
第二方面,本发明实施例提供了一种资源分配装置,所述装置包括:
资源请求接收模块,用于接收客户端发送的资源请求;
资源数据取出模块,用于从预设缓存中,取出目标资源数据;所述预设缓存的操作具有原子性,且所述预设缓存中存储有预先从数据库读取的资源数据;
资源数据分配模块,用于将所述目标资源数据分配给所述客户端。
可选地,本发明实施例所提供的资源分配装置,还包括:
第一预设模块,用于预先针对指定类型的资源数据,在所述预设缓存中建立对应的资源集合;将所述数据库中所述指定类型的资源数据对应的数据表与资源集合的对应关系存储至所述预设缓存中;
存储模块,用于根据所述对应关系,从所述指定类型的资源数据对应的数据表中获取第一预设数量个资源数据,存储至所述预设缓存中对应的资源集合中的资源数据。
可选地,本发明实施例所提供的资源分配装置,还包括:
第二预设模块,用于预先针对数据库中存储的每种类型的资源数据,在所述预设缓存中为每种类型的资源数据建立对应的资源集合;将数据库中存储的每种类型的资源数据对应的数据表与资源集合的对应关系存储至所述预设缓存中;根据所述对应关系,分别从每种类型的资源数据对应的数据表中获取不同类型的第二预设数量个资源数据,存储至所述预设缓存中对应的资源集合中。
可选地,所述资源数据取出模块,具体用于:
根据所述资源请求,确定目标资源数据的类型;
根据所述目标资源数据的类型,从对应的资源集合中取出所述目标资源数据。
可选地,本发明实施例所提供的资源分配装置,还包括:
第一标识模块,用于在所述存储模块根据所述对应关系,从所述指定类型的资源数据对应的数据表中获取第一预设数量个资源数据,存储至所述预设缓存中对应的资源集合中的资源数据之后,在所述数据库中,采用数据库行级锁,将所存储至所述预设缓存中的资源数据标识为已缓存资源。
可选地,本发明实施例所提供的资源分配装置,还包括:
第一判断模块,用于在所述资源数据取出模块从预设缓存中,取出目标资源数据之前,判断所述预设缓存中是否有资源数据,如果有,触发所述资源数据分配模块;否则,从所述指定类型的资源数据对应的数据表中查找到第三预设数量个未缓存的资源数据,存储至所述预设缓存中,并在所述指定类型的资源数据对应的数据表中,采用数据库行级锁,将所述第三预设数量个未缓存的资源数据标识为已缓存资源,触发所述资源数据取出模块。
可选地,本发明实施例所提供的资源分配装置,还包括:
第二判断模块,用于在所述资源数据取出模块从预设缓存中,取出目标资源数据之前,判断所述预设缓存中的资源数据的数量是否小于预设阈值,若否,触发所述资源数据分配模块;若是,则从所述指定类型的资源数据对应的数据表中查找到第四预设数量个未缓存的资源数据,存储至所述预设缓存中,并在所述指定类型的资源数据对应的数据表中,采用数据库行级锁,将所述第四预设数量个未缓存的资源数据标识为已缓存资源,触发所述资源数据取出模块。
可选地,本发明实施例所提供的资源分配装置,还包括:
第二标识模块,用于在所述资源数据分配模块将所述目标资源数据分配给所述客户端之后,在所述指定类型的资源数据对应的数据表中,将所述目标资源数据标识为已分配资源。
可选地,本发明实施例所提供的资源分配装置,还包括:
第三判断模块,用于在所述第一预设模块预先针对指定类型的资源数据,在所述预设缓存中为所述指定类型的资源数据建立对应的资源集合之前,接收针对所述指定类型的资源数据对应的数据表的分配优化请求;判断所述数据库中是否存在所述指定类型的资源数据对应的数据表;若是,判断所述指定类型的资源数据对应的数据表中是否存在所述指定类型的资源数据对应的列;若存在,触发所述第一预设模块。
可选地,所述预设缓存为Redis缓存,
所述存储模块,具体用于:
根据所述对应关系,从所述指定类型的资源数据对应的数据表中获取第一预设数量个资源数据,使用sadd方法,存储至所述预设缓存中对应的资源集合中的资源数据。
可选地,所述预设缓存为Redis缓存,所述资源数据取出模块,具体用于:
使用spop方法,从所述预设缓存中取出目标资源数据。
可选地,所述预设缓存的操作具有原子性,为:所述预设缓存的操作是不可分割的,且在执行完毕之前不会被任何其他事务或事件中断。
在本发明实施例提供的资源分配方法中,首先接收客户端发送的资源请求,然后,从预设缓存中,取出目标资源数据,并将目标资源数据分配给客户端,其中,预设缓存的操作具有原子性,且预设缓存中存储有预先从数据库读取的资源数据。现有技术中,利用乐观锁可以在一定程度上减少资源的重复分配,但每次请求都需要访问数据库进行查询,增加了数据库的压力,而且在高并发情况下,还是很有可能会获取到重复资源数据,使得更新version时产生冲突,这时,就需要以不断执行重试的方式,重新访问数据库,以最终获取到可用资源数据,这对系统性能是种损耗,此外,当有大量不同类型的资源数据需要分配的时候,需要针对每种资源都设置乐观锁,进行“查询-更新-冲突-重试”这个自旋方式的处理,上层逻辑存在许多零散而重复的逻辑,导致数据库查询压力大,系统性能低;与之相比,针对每种类型的资源分配,应用本发明实施例提供的资源分配方法,接收到客户端发送的资源请求后,直接从存储有预先从数据库读取的资源数据的预设缓存中,取出目标资源数据,并分配给客户端,将查询压力转换到缓存这一层,而缓存运行速度较快,一般不会成为性能瓶颈,很好地减少了数据库的压力,此外,预设缓存的操作原子性,使得从缓存中取到的资源数据即为可用资源,能够减少重试次数,提高系统性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例所提供的资源分配方法的第一种流程示意图;
图2为本发明实施例所提供的资源分配方法的第二种流程示意图;
图3为本发明实施例所提供的资源分配方法的第三种流程示意图;
图4为基于图3所示实施例的一种具体的流程图;
图5为本发明实施例所提供的资源分配方法的第四种流程示意图;
图6为本发明实施例所提供的资源分配装置的第一种结构示意图;
图7为本发明实施例所提供的资源分配装置的第二种结构示意图;
图8为本发明实施例所提供的资源分配装置的第三种结构示意图;
图9为本发明实施例所提供的资源分配装置的第四种结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了减小数据库的查询压力,提高系统并发性能,本发明实施例提供了一种资源分配方法及装置。
下面首先对本发明实施例提供的一种资源分配方法进行介绍。
需要说明的是,本发明实施例所述提供的资源分配方法可以应用在资源分配装置中,也可以封装成资源分配接口嵌入在现有的资源管理系统中,这都是被允许的,此处不作限定。
如图1所示,本发明实施例提供了一种资源分配方法,应用于资源管理服务器,包括如下步骤:
S101,接收客户端发送的资源请求。
实际应用中,资源管理服务器首先接收客户端发送的资源请求,然后针对该资源请求执行后续步骤,而资源请求可以包含客户端所要请求的资源类型和/ 或资源数量,具体根据需求而定,此处不作限定。
举例而言,针对公有云平台提供的购买弹性公网IP地址的功能和服务,通过它可以将IP地址类型资源分配给用户,那么,实际应用中,用户A可以向提供该功能和服务的资源管理服务器发起购买1个IP地址的请求,也可以发起购买3个IP地址的请求。
其中,客户端可以为网页浏览器,也可以为移动终端上的应用服务(APP,APPlication),当然,客户端不仅限于上述两种,在此不作限定。
S102,从预设缓存中,取出目标资源数据,其中,预设缓存的操作具有原子性,且预设缓存中存储有预先从数据库读取的资源数据。
需要说明的是,操作具有原子性,可以表明该操作是不可分割的,且在执行完毕之前不会被任何其他事务或事件中断,诸如MemCache缓存、Redis缓存,它们的操作具有原子性,且Redis缓存的所有单个命令的执行都是原子性的;例如,Redis缓存的spop方法,它用于随机返回并删除set(集合,一种无序且不重复的数据结构)中的一个元素,在应用该方法执行取操作时,从集合中取出的数据,不会再被别的进程获取到。关于操作的原子性属于现有技术,此处不再赘述。
可以理解的是,预设缓存中存储的资源数据包含客户端请求的资源数据,数据库是目标资源数据对应的数据库,可以建立在资源管理服务器上,也可以建立在其它能够被资源管理服务器访问的独立的数据库服务器上,此处不作限定;而预设缓存操作的原子性,使得取出的目标资源数据不会再被别的进程获取到,当预设缓存中无重复存储的资源数据时,确保了资源管理系统应用了本发明实施例提供的技术方案后,在接收多个客户端发送的资源请求时,从预设缓存中获取到的资源都是有效的资源数据,无需再对操作进行重试,具体是按照一定规则还是随机从缓存中将数据取出,此处不作限定。
具体的,预设缓存可以为Redis缓存,相应地,所述从预设缓存中,取出目标资源数据的步骤,可以包括:使用spop方法,从预设缓存中取出目标资源数据;可以理解的是,Redis缓存采用Hash算法进行快速查找,与数据库相比,查找速度快,一般不会成为性能瓶颈。其中,Redis缓存是一个高性能的key-value(键值)存储系统,它支持存储的value类型较多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合),这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
S103,将目标资源数据分配给客户端。
在从预设缓存中,取出目标资源数据后,可以将取到的目标资源数据,分配给发出资源请求的客户端。
现有技术中,仅利用乐观锁可以在一定程度上减少资源的重复分配,但每次请求都需要访问数据库进行查询,增加了数据库的压力,而且在高并发情况下,还是很有可能会获取到重复资源数据,使得更新version时产生冲突,这时,就需要以不断执行重试的方式,重新访问数据库,以最终获取到可用资源数据,这对系统性能是种损耗,此外,当有大量不同类型的资源数据需要分配的时候,需要针对每种资源都设置乐观锁,进行“查询-更新-冲突-重试”这个自旋方式的处理,上层逻辑存在许多零散而重复的逻辑,导致数据库查询压力大,系统性能低。
需要说明的是,还可以利用乐观锁结合随机取数的方案,实现资源分配,具体地,可以每次从数据库查出一定数量(例如100个)的资源数据,然后从这100个资源数据中随机选一个作为假定的有效资源数据,在更新version字段的时检查资源冲突,若出现冲突,则采用重试机制;该方案利用随机取数可以在一定程度上降低高并发下的资源重复分配,但增加了每次接收到资源请求后的查询次数,加重了数据库的查询压力,降低了系统性能。
与它们相比,针对每种类型的资源分配,应用图1所示发明实施例提供的资源分配方法,接收到客户端发送的资源请求后,直接从存储有预先从数据库读取的资源数据的预设缓存中,取出目标资源数据,并分配给客户端,将查询压力转换到缓存这一层,而缓存运行速度较快,一般不会成为性能瓶颈,很好地减少了数据库的查询压力,此外,预设缓存的操作原子性,使得从缓存中取到的资源数据即为可用资源,能够减少重试次数,提高系统性能。
在图1所示实施例的基础上,如图2所示,本发明实施例提供的资源分配方法,在步骤S101之前还可以包括如下步骤:
S104,预先针对指定类型的资源数据,在预设缓存中建立对应的资源集合。
实际应用中,可以针对指定类型的资源数据,在预设缓存中建立对应的资源集合,即,可以在要为哪种类型的资源数据采用本发明实施例所提供的资源分配方法进行分配优化时,才实时地针对该类型资源数据,在预设缓存中建立对应的资源集合,以免增加无用的缓存占用;其中,集合为一种无序且不重复的数据结构。
举例而言,资源管理服务器的数据库中共存储了7种资源数据,例如IP地址、域名、邮箱等,但现在指定其中的IP地址资源,进行分配优化,那么就可以只针对IP地址资源数据,在预设缓存中建立对应的资源集合ip_cache_set;其中,ip_cache_set为集合的名称,实际应用中,也可以取为其他不会引起歧义的名称,不作限定。
S105,将数据库中指定类型的资源数据对应的数据表与资源集合的对应关系存储至预设缓存中。
其中,针对数据库中指定类型的资源数据,在预设缓存中建立对应的资源集合后,还需将该指定类型的资源数据对应的数据表与资源集合的对应关系存储至预设缓存中,以使得资源管理服务器可以根据这种对应关系,进行资源数据的读取和存储。
举例而言,假设S104中所举示例中的IP地址资源对应的数据表为ip_tb,那么,便可以采用DB-Table--Cache-Set的方式将对应关系存入预设缓存,具体地,可以将ip_tb--ip_cache_set存入预设缓存中,当然,也可以采用其他方式将ip_tb 与ip_cache_set的对应关系存储至预设缓存中,其中,具体如何将对应关系存储在预设缓存中,属于现有技术,此处不再赘述。
S106,根据对应关系,从指定类型的资源数据对应的数据表中获取第一预设数量个资源数据,存储至预设缓存中对应的资源集合中。
需要说明的是,在S105后,可以根据预设缓存中存储的对应关系,从指定类型的资源数据对应的数据表中获取第一预设数量个资源数据,存储至预设缓存中对应的资源集合中,以进行后续资源数据的分配。
举例而言,针对S105中所举示例,假设第一预设数量为100,那么,便可以根据对应关系ip_tb--ip_cache_set,从ip_tb表中取出100个IP地址,并存入对应的资源集合ip_cache_set中。
需要说明的是,预设缓存可以为Redis缓存,相应地,所述存储至预设缓存中对应的资源集合中的步骤,可以包括:使用sadd方法,存储至预设缓存中对应的资源集合中。其中,在使用sadd方法进行存储的时候,会对数据进行自动去重处理,保证存入资源数据的唯一性,进一步地降低了资源重复分配的概率,从而减少重试次数,提高系统性能。
具体地,图2所示实施例中的S102:从预设缓存中,取出目标资源数据,可以包括:
根据资源请求,确定目标资源数据的类型;
根据目标资源数据的类型,从对应的资源集合中取出目标资源数据。
实际应用中,资源请求一般包括所要请求的目标资源数据的类型,资源管理服务器在接收到资源请求后,可以首先确定目标资源数据的类型,然后根据所确定的类型,从对应的资源集合中取出目标资源数据。
举例而言,假设IP地址资源在预设缓存中对应的资源集合为ip_cache_set,客户端请求分配一个IP地址,资源管理服务器在接收到该请求后,确定客户端要请求的目标资源数据为IP地址资源,然后便可以从ip_cache_set中取出一个 IP地址作为客户端请求的目标资源数据。
在图1所示实施例的基础上,图2所示实施例的资源分配方法中,在接收客户端的资源请求之前,还可以预先针对指定类型的资源数据,在预设缓存中建立对应的资源集合,将数据库中指定类型的资源数据对应的数据表与资源集合的对应关系存储至预设缓存中,并根据对应关系,从指定类型的资源数据对应的数据表中获取第一预设数量个资源数据,存储至预设缓存中对应的资源集合中,以完成指定类型的资源数据的注册和资源集合的初始化,为后续实现资源分配做好准备工作。
需要说明的是,S104至S106的步骤可以理解为资源注册流程,在实际应用中,可以将其封装为资源注册接口,嵌入到现有的资源管理系统中,当然,也可以不进行封装,对此不作限定。
关于上述提到的资源注册流程,在另一种实现方式中,还可以提前完成数据库中每种类型的资源数据的注册,具体可以包括:
预先针对数据库中存储的每种类型的资源数据,在预设缓存中为每种类型的资源数据建立对应的资源集合;
将数据库中存储的每种类型的资源数据对应的数据表与资源集合的对应关系存储至预设缓存中;
根据对应关系,分别从每种类型的资源数据对应的数据表中获取不同类型的第二预设数量个资源数据,存储至预设缓存中对应的资源集合中。
可以理解的是,在接收客户端的资源请求之前,可以预先针对数据库中存储的每种类型的资源数据,在预设缓存中为每种类型的资源数据建立对应的资源集合,然后,将数据库中存储的每种类型的资源数据对应的数据表与资源集合的对应关系存储至预设缓存中,并根据预设缓存中存储的对应关系,分别从每种类型的资源数据对应的数据表中获取不同类型的第二预设数量个资源数据,存储至预设缓存中对应的资源集合中,以进行后续资源数据的分配。此处的原理和S104至S106的原理类似,不再赘述。
举例而言,假设第二预设数量为100,资源管理服务器上的数据库中存储有 2种类型的资源数据:IP地址、域名,对应的数据表分别为ip_tb、dns_tb,那么,可以预先针对IP地址资源、域名资源,在预设缓存中分别建立对应的资源集合 ip_cache_set、dns_cache_set;然后采用DB-Table--Cache-Set的方式将对应关系存入预设缓存,具体地,可以将ip_tb--ip_cache_set,dns_tb--dns_cache_set存入预设缓存中;再根据对应关系,从ip_tb和dns_tb表中分别取出100个IP地址和域名,并存入对应的资源集合ip_cache_set和dns_cache_set中。
两种资源注册流程的实现方式中,只针对指定类型的资源数据进行资源注册,可以避免增加无用的缓存占用,但当有其他类型的资源数据也要进行分配优化时,需重复执行S104至S106的步骤;而一次性地完成数据库中每种类型的资源数据的注册,使用更便捷,针对这两种实现方式,实际应用中,可以根据具体需求进行选择。
进一步地,在图2所示实施例的基础上,如图3所示,本发明实施例所提供的一种资源分配方法,在S106之后,还可以包括如下步骤:
S107,在数据库中,采用数据库行级锁,将所存储至预设缓存中的资源数据标识为已缓存资源。
具体地,在根据对应关系,从指定资源数据对应的数据表中获取第一预设数量个资源数据,存储至预设缓存中对应的资源集合中后,还可以在数据库中指定资源数据对应的数据表中,采用数据库行级锁,将所存储至预设缓存中的资源数据标识为已缓存资源,以使得在查询-更新资源数据缓存状态的过程中不允许对查询出来的数据进行修改操作,防止高并发下出现重复缓存的情况。其中,数据库行级锁,一般是指排它锁,即被锁定行不可进行修改、删除,只可以被其他会话查找,具体地,可以采用select for update实现数据库行级锁,关于数据库行级锁,为现有技术,此处不再赘述。
可以理解的是,在使用另一种实现方式完成数据库中每种类型的资源的注册后,同样地,还可以包括:
在数据库中,采用数据库行级锁,将所存储至预设缓存中的资源数据标识为已缓存资源。
实际应用中,预设缓存中的资源数据的数量是有限的,当多个客户端发出资源请求时,为确保资源分配的连续性,以防止客户端出现等待现象,在一种实现方式中,还可以在从预设缓存中,取出目标资源数据之前,判断预设缓存中是否有资源数据,如果有,返回执行从预设缓存中,取出目标资源数据的步骤;否则,从指定类型的资源数据对应的数据表中查找到第三预设数量个未缓存的资源数据,存储至预设缓存中,并在指定类型的资源数据对应的数据表中,采用数据库行级锁,将第三预设数量个未缓存的资源数据标识为已缓存资源,返回执行取出目标资源数据的步骤。其中,判断预设缓存中是否有资源数据的步骤,更具体地,为判断预设缓存中对应的资源集合中是否有指定类型的资源数据。
举例而言,假设预设缓存为Redis缓存,指定类型的资源数据为IP地址资源数据,第一预设数量和第三预设数量均为200,如图4所示,本发明一具体实施例,可以包括:
S401,预先针对IP地址资源数据,在Redis缓存中建立对应的资源集合 ip_cache_set;
S402,将数据库中IP地址资源数据对应的数据表ip_tb与资源集合 ip_cache_set的对应关系存储至Redis缓存中;
S403,根据对应关系,从数据表ip_tb中获取200个资源数据,使用sadd 方法,存储至资源集合ip_cache_set中;
S404,在数据库中,采用select for update方法,将存储至ip_cache_set中的200个资源数据标识为已缓存资源;
S405,接收客户端发送的IP地址资源请求;
S406,判断Redis缓存中是否有IP地址资源数据,若有,执行S407,否则,执行S403;
S407,使用spop方法,从Redis缓存中,取出一个IP地址;
S408,将取出的IP地址分配给客户端。
在另一种实现方式中,还可以判断预设缓存中的资源数据的数量是否小于预设阈值,若否,返回执行从预设缓存中,取出目标资源数据的步骤;若是,则从指定类型的资源数据对应的数据表中查找到第四预设数量个未缓存的资源数据,存储至预设缓存中,并在指定类型的资源数据对应的数据表中,采用数据库行级锁,将第四预设数量个未缓存的资源数据标识为已缓存资源,返回执行取出目标资源数据的步骤。其中,预设阈值为大于1的自然数。
举例而言,假设预设阈值为10,第四预设数量为100,针对资源集合 ip_cache_set,发现集合中IP地址资源数据当前只有9个,那么,便可以从数据库中对应的数据表ip_tb中查找出100个未缓存的IP地址资源,存储至 ip_cache_set中,并采用select forupdate方法将这100个IP地址资源在数据表 ip_tb中更新为已缓存状态。
需要强调的是,针对以上两种实现方式,具体应用中,可以根据实际需求进行选择,在此不作限定。
在图2所示实施例的基础上,图3所示实施例提供的资源分配方法中,还可以在从指定资源数据对应的数据表中获取第一预设数量个资源数据,存储至预设缓存中对应的资源集合中后,在数据库中,采用数据库行级锁,将所存储至预设缓存中的资源数据标识为已缓存资源,以防止高并发下出现重复缓存;可以理解的是,应用图3所示实施例提供的资源分配方法,相当于实现了一个基于缓存的分布式锁的功能,并且由于预设缓存操作的原子性,使得分配出去的数据即为可用的数据,而只有在预设缓存中无资源数据时,才会去访问数据库,查找出一定数量的资源数据存储至预设缓存中,与现有技术相比,减轻了数据库的查询压力,提升了系统的并发性能。
此外,可以理解的是,缓存往往使用的是RAM(Random Access Memory,随机存取存贮器),即断电即掉的非永久储存,因此,在图3所示实施例的基础上,在S103之后,本发明实施例提供的一种资源分配方法,还可以包括:在指定类型的资源数据对应的数据表中,将目标资源数据标识为已分配资源;这样,当缓存由于异常而停止服务时,例如断电,为防止资源浪费,可以在缓存修复时,运行预设的同步程序,将数据库中对应的数据表中,标识为已缓存未分配的资源更新为未缓存状态,以在重启资源分配流程时,对这些资源进行重新分配。
具体地,在将目标资源数据分配给发出资源请求的客户端后,还可以将目标资源数据在对应的数据表中标识为已分配资源,其中,目标资源数据为指定类型的资源数据;实际应用中,可以预先在数据表中新加一列,用于表明资源数据的分配状态,“1”为已分配,“0”为未分配,当然,这仅是一种可能的标识方法,不具有限定作用。
举例而言,从预设缓存中取出IP地址192.125.23.1分配给客户端后,可以在 IP地址资源对应的数据表ip_tb中,将用以描述资源数据分配状态的列ip_state对应的值更新为“1”,其中“1”为约定的用以表明IP地址资源为已分配状态的值。
出于系统安全考虑,在图2所示实施例的基础上,如图5所示,本发明实施例所提供的一种资源分配方法,在S104之前,还可以包括如下步骤:
S108,接收针对指定类型的资源数据对应的数据表的分配优化请求。
实际应用中,当需要针对指定类型的资源数据应用本发明实施例所提供的资源分配方法时,管理员可以向资源管理服务器发出分配优化请求,其中,该请求可以携带数据库名、该指定类型的资源数据对应的数据表的表名以及资源数据在数据表中对应的列名,当然,可以不仅限于上述三种信息;资源管理服务器在接收该请求后,会根据请求中携带的信息进行后续的合法性判断。
S109,判断数据库中是否存在指定类型的资源数据对应的数据表,若是,执行S110。
其中,资源管理服务器在接收到针对指定类型的资源数据对应的数据表的分配优化请求后,可以首先根据该请求,判断数据库中是否存在指定类型的资源数据对应的数据表,若是,那么执行S110,作进一步判断。
S110,判断指定类型的资源数据对应的数据表中是否存在指定类型的资源数据对应的列,若存在,执行S104。
其中,在S109执行结果为是,即数据库中存在指定类型的资源数据对应的数据表的情况下,可以继续判断指定类型的资源数据对应的数据表中是否存在指定类型的资源数据对应的列,即是否存在需要进行分配的资源,若存在,则执行S104,进行资源的注册,否则可以判定异常,发出警告,如提示“注册失败”,以防止由于数据库异常或者其他原因使得后续无法顺利读取数据表中的资源数据,从而导致无法正常进行资源分配的现象发生。
举例而言,资源管理服务器接收到管理员针对IP地址资源对应的数据表ips 的分配优化请求,其中,该请求携带有数据库名db_resource、数据表名ip_tb、列名ip等信息,首先判断数据库db_resource中是否存在表ip_tb,如果存在,再判断ip_tb表中是否存在ip列,若存在,则执行S104,即预先针对IP地址资源,在预设缓存中建立对应的资源集合;否则当数据库db_resource中不存在表ip_tb或者 ip_tb表中不存在ip列时,均判定异常,可发出警告,以提示管理员进行相应处理。
在图2所示实施例的基础上,图5所示实施例提供的资源分配方法中,还可以接收针对指定类型的资源数据对应的数据表的分配优化请求,判断数据库中是否存在指定类型的资源数据对应的数据表,若是,判断指定类型的资源数据对应的数据表中是否存在指定类型的资源数据对应的列,若存在,执行预先针对指定类型的资源数据,在预设缓存中建立对应的资源集合的步骤。这样,若数据库或者资源数据表出现了异常,可以及时诊断,发出警告,以防止后续无法进行正常的资源分配。
相应于上述方法实施例,本发明实施例提供了一种资源分配装置,如图6 所示,所述装置包括:
资源请求接收模块601,用于接收客户端发送的资源请求;
资源数据取出模块602,用于从预设缓存中,取出目标资源数据;所述预设缓存的操作具有原子性,且所述预设缓存中存储有预先从数据库读取的资源数据;
资源数据分配模块603,用于将所述目标资源数据分配给所述客户端。
现有技术中,利用乐观锁可以在一定程度上减少资源的重复分配,但每次请求都需要访问数据库进行查询,增加了数据库的压力,而且在高并发情况下,还是很有可能会获取到重复资源数据,使得更新version时产生冲突,这时,就需要以不断执行重试的方式,重新访问数据库,以最终获取到可用资源数据,这对系统性能是种损耗,此外,当有大量不同类型的资源数据需要分配的时候,需要针对每种资源都设置乐观锁,进行“查询-更新-冲突-重试”这个自旋方式的处理,上层逻辑存在许多零散而重复的逻辑,导致数据库查询压力大,系统性能低。而应用图6所示发明实施例提供的资源分配方法,接收到客户端发送的资源请求后,直接从存储有预先从数据库读取的资源数据的预设缓存中,取出目标资源数据,并分配给客户端,将查询压力转换到缓存这一层,而缓存运行速度较快,一般不会成为性能瓶颈,很好地减少了数据库的查询压力,此外,预设缓存的操作原子性,使得从缓存中取到的资源数据即为可用资源,能够减少重试次数,提高系统性能。
具体地,所述预设缓存为Redis缓存,所述资源数据取出模块602,具体可以用于:
使用spop方法,从所述预设缓存中取出目标资源数据。
具体地,所述预设缓存的操作具有原子性,为:所述预设缓存的操作是不可分割的,且在执行完毕之前不会被任何其他事务或事件中断。
更进一步地,在包含资源请求接收模块601,资源数据取出模块602及资源数据分配模块603的基础上,如图7所示,本发明实施例提供的资源分配装置还可以包括:
第一预设模块604,用于预先针对指定类型的资源数据,在所述预设缓存中建立对应的资源集合;将所述数据库中所述指定类型的资源数据对应的数据表与资源集合的对应关系存储至所述预设缓存中;
存储模块605,用于根据所述对应关系,从所述指定类型的资源数据对应的数据表中获取第一预设数量个资源数据,存储至所述预设缓存中对应的资源集合中的资源数据。
在图6所示实施例的基础上,图7所示实施例提供的资源分配方法中,在接收客户端的资源请求之前,还可以预先针对指定类型的资源数据,在预设缓存中建立对应的资源集合,将数据库中指定类型的资源数据对应的数据表与资源集合的对应关系存储至预设缓存中,并根据对应关系,从指定类型的资源数据对应的数据表中获取第一预设数量个资源数据,存储至预设缓存中对应的资源集合中,以完成指定类型的资源数据的注册和资源集合的初始化,为后续实现资源分配做好准备工作。
具体地,所述资源数据取出模块602,具体可以用于:
根据所述资源请求,确定目标资源数据的类型;
根据所述目标资源数据的类型,从对应的资源集合中取出所述目标资源数据。
具体地,所述预设缓存为Redis缓存,所述存储模块605,具体可以用于:
根据所述对应关系,从所述指定类型的资源数据对应的数据表中获取第一预设数量个资源数据,使用sadd方法,存储至所述预设缓存中对应的资源集合中的资源数据。
需要说明的是,在另一种实现方式中,第一预设模块604和存储模块605,还可以使用第二预设模块来代替,所述第二预设模块用于预先针对数据库中存储的每种类型的资源数据,在所述预设缓存中为每种类型的资源数据建立对应的资源集合;将数据库中存储的每种类型的资源数据对应的数据表与资源集合的对应关系存储至所述预设缓存中;根据所述对应关系,分别从每种类型的资源数据对应的数据表中获取不同类型的第二预设数量个资源数据,存储至所述预设缓存中对应的资源集合中。
更进一步地,在包含资源请求接收模块601,资源数据取出模块602,资源数据分配模块603,第一预设模块604及存储模块605的基础上,如图8所示,本发明实施例提供的资源分配装置还可以包括:
第一标识模块606,用于在所述存储模块605根据所述对应关系,从所述指定类型的资源数据对应的数据表中获取第一预设数量个资源数据,存储至所述预设缓存中对应的资源集合中的资源数据之后,在所述数据库中,采用数据库行级锁,将所存储至所述预设缓存中的资源数据标识为已缓存资源。
具体地,在一种实现方式中,在包含资源请求接收模块601,资源数据取出模块602,资源数据分配模块603,第一预设模块604,存储模块605及第一标识模块606的基础上,本发明实施例提供的资源分配装置,还可以包括:
第一判断模块,用于在所述资源数据取出模块602从预设缓存中,取出目标资源数据之前,判断所述预设缓存中是否有资源数据,如果有,触发所述资源数据取出模块602;否则,从所述指定类型的资源数据对应的数据表中查找到第三预设数量个未缓存的资源数据,存储至所述预设缓存中,并在所述指定类型的资源数据对应的数据表中,采用数据库行级锁,将所述第三预设数量个未缓存的资源数据标识为已缓存资源,触发所述资源数据取出模块602。
具体地,在另一种实现方式中,在包含资源请求接收模块601,资源数据取出模块602,资源数据分配模块603,第一预设模块604,存储模块605及第一标识模块606的基础上,本发明实施例提供的资源分配装置,还可以包括:
第二判断模块,用于在所述资源数据取出模块602从预设缓存中,取出目标资源数据之前,判断所述预设缓存中的资源数据的数量是否小于预设阈值,若否,触发所述资源数据取出模块602;若是,则从所述指定类型的资源数据对应的数据表中查找到第四预设数量个未缓存的资源数据,存储至所述预设缓存中,并在所述指定类型的资源数据对应的数据表中,采用数据库行级锁,将所述第四预设数量个未缓存的资源数据标识为已缓存资源,触发所述资源数据取出模块602。
在图7所示实施例的基础上,图8所示实施例提供的资源分配方法中,还可以在根据对应关系,从指定资源数据对应的数据表中获取第一预设数量个资源数据,存储至预设缓存中对应的资源集合中后,在数据库中,采用数据库行级锁,将所存储至预设缓存中的资源数据标识为已缓存资源,以防止高并发下出现重复缓存,并且由于预设缓存操作的原子性,使得分配出去的数据即为可用的数据,而只有在预设缓存中无资源数据时,才会去访问数据库,查找出一定数量的资源数据存储至预设缓存中,与现有技术相比,减轻了数据库的查询压力,提升了系统的并发性能。
具体地,在包含资源请求接收模块601,资源数据取出模块602,资源数据分配模块603,第一预设模块604,存储模块605及第一标识模块606的基础上,本发明实施例提供的资源分配装置,还可以包括:
第二标识模块,用于在所述资源数据分配模块603将所述目标资源数据分配给所述客户端之后,在所述指定类型的资源数据对应的数据表中,将所述目标资源数据标识为已分配资源。
可以理解的是,缓存往往使用的是RAM(Random Access Memory,随机存取存贮器),即断电即掉的非永久储存,因此,在图8所示实施例的基础上,本发明实施例提供的资源分配装置,还可以包括:第二标识模块;这样,当缓存由于异常停止服务时,例如断电,为防止资源浪费,可以在缓存修复时,运行预设的同步程序,将数据库中对应的数据表中,标识为已缓存未分配的资源更新为未缓存状态,以在重启资源分配流程时,对这些资源进行重新分配。
更进一步地,在包含资源请求接收模块601,资源数据取出模块602,资源数据分配模块603,第一预设模块604及存储模块605的基础上,如图9所示,本发明实施例提供的资源分配装置还可以包括:
第三判断模块607,用于在所述第一预设模块604预先针对指定类型的资源数据,在所述预设缓存中为所述指定类型的资源数据建立对应的资源集合之前,接收针对所述指定类型的资源数据对应的数据表的分配优化请求;判断所述数据库中是否存在所述指定类型的资源数据对应的数据表;若是,判断所述指定类型的资源数据对应的数据表中是否存在所述指定类型的资源数据对应的列;若存在,触发所述第一预设模块604。
在图7所示实施例的基础上,图9所示实施例提供的资源分配方法中,还可以接收针对指定类型的资源数据对应的数据表的分配优化请求,判断数据库中是否存在指定类型的资源数据对应的数据表,若是,判断指定类型的资源数据对应的数据表中是否存在指定类型的资源数据对应的列,若存在,执行预先针对指定类型的资源数据,在预设缓存中建立对应的资源集合的步骤。这样,若数据库或者资源数据表出现了异常,可以及时诊断,发出警告,以防止后续无法进行正常的资源分配。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域普通技术人员可以理解实现上述方法实施方式中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读取存储介质中,这里所称得的存储介质,如:ROM/RAM、磁碟、光盘等。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

Claims (18)

1.一种资源分配方法,其特征在于,应用于资源管理服务器,所述方法包括:
接收客户端发送的资源请求;
从预设缓存中,取出目标资源数据;所述预设缓存的操作具有原子性,且所述预设缓存中存储有预先从数据库读取的资源数据;
将所述目标资源数据分配给所述客户端;
所述预设缓存的操作具有原子性,为:所述预设缓存的操作是不可分割的,且在执行完毕之前不会被任何其他事务或事件中断;
所述存储预先从数据库读取的资源数据的步骤,包括:
预先针对指定类型的资源数据,在所述预设缓存中建立对应的资源集合;
将所述数据库中所述指定类型的资源数据对应的数据表与资源集合的对应关系存储至所述预设缓存中;
根据所述对应关系,从所述指定类型的资源数据对应的数据表中获取第一预设数量个资源数据,存储至所述预设缓存中对应的资源集合中。
2.根据权利要求1所述的方法,其特征在于,所述从预设缓存中,取出目标资源数据的步骤,包括:
根据所述资源请求,确定目标资源数据的类型;
根据所述目标资源数据的类型,从对应的资源集合中取出所述目标资源数据。
3.根据权利要求1所述的方法,其特征在于,在所述存储至所述预设缓存中对应的资源集合中的步骤之后,还包括:
在所述数据库中,采用数据库行级锁,将所存储至所述预设缓存中的资源数据标识为已缓存资源。
4.根据权利要求3所述的方法,其特征在于,所述从预设缓存中,取出目标资源数据的步骤之前,还包括:
判断所述预设缓存中是否有资源数据,如果有,返回执行所述从预设缓存中,取出所述目标资源数据的步骤;否则,从所述指定类型的资源数据对应的数据表中查找到第三预设数量个未缓存的资源数据,存储至所述预设缓存中,并在所述指定类型的资源数据对应的数据表中,采用数据库行级锁,将所述第三预设数量个未缓存的资源数据标识为已缓存资源,返回执行所述取出目标资源数据的步骤。
5.根据权利要求3所述的方法,其特征在于,所述从预设缓存中,取出目标资源数据的步骤之前,还包括:
判断所述预设缓存中的资源数据的数量是否小于预设阈值,如果否,返回执行所述从预设缓存中,取出所述目标资源数据的步骤;如果是,则从所述指定类型的资源数据对应的数据表中查找到第四预设数量个未缓存的资源数据,存储至所述预设缓存中,并在所述指定类型的资源数据对应的数据表中,采用数据库行级锁,将所述第四预设数量个未缓存的资源数据标识为已缓存资源,返回执行所述取出目标资源数据的步骤。
6.根据权利要求3所述的方法,其特征在于,在所述将所述目标资源数据分配给所述客户端的步骤之后,还包括:
在所述指定类型的资源数据对应的数据表中,将所述目标资源数据标识为已分配资源。
7.根据权利要求1所述的方法,其特征在于,所述预先针对指定类型的资源数据,在所述预设缓存中建立对应的资源集合的步骤,之前,还包括:
接收针对所述指定类型的资源数据对应的数据表的分配优化请求;
判断所述数据库中是否存在所述指定类型的资源数据对应的数据表;
若是,判断所述指定类型的资源数据对应的数据表中是否存在所述指定类型的资源数据对应的列;
若存在,执行所述预先针对所述指定类型的资源数据,在所述预设缓存中建立对应的资源集合的步骤。
8.根据权利要求1所述的方法,其特征在于,所述预设缓存为Redis缓存,
所述存储至所述预设缓存中对应的资源集合中的步骤,包括:
使用sadd方法,存储至所述预设缓存中对应的资源集合中。
9.根据权利要求1所述的方法,其特征在于,所述预设缓存为Redis缓存,所述从预设缓存中,取出目标资源数据的步骤,包括:
使用spop方法,从所述预设缓存中取出目标资源数据。
10.一种资源分配装置,其特征在于,应用于资源管理服务器,所述装置包括:
资源请求接收模块,用于接收客户端发送的资源请求;
资源数据取出模块,用于从预设缓存中,取出目标资源数据;所述预设缓存的操作具有原子性,且所述预设缓存中存储有预先从数据库读取的资源数据;
资源数据分配模块,用于将所述目标资源数据分配给所述客户端;
所述预设缓存的操作具有原子性,为:所述预设缓存的操作是不可分割的,且在执行完毕之前不会被任何其他事务或事件中断;
还包括:
第一预设模块,用于预先针对指定类型的资源数据,在所述预设缓存中建立对应的资源集合;将所述数据库中所述指定类型的资源数据对应的数据表与资源集合的对应关系存储至所述预设缓存中;
存储模块,用于根据所述对应关系,从所述指定类型的资源数据对应的数据表中获取第一预设数量个资源数据,存储至所述预设缓存中对应的资源集合中的资源数据。
11.根据权利要求10所述的装置,其特征在于,所述资源数据取出模块,具体用于:
根据所述资源请求,确定目标资源数据的类型;
根据所述目标资源数据的类型,从对应的资源集合中取出所述目标资源数据。
12.根据权利要求10所述的装置,其特征在于,还包括:
第一标识模块,用于在所述存储模块根据所述对应关系,从所述指定类型的资源数据对应的数据表中获取第一预设数量个资源数据,存储至所述预设缓存中对应的资源集合中的资源数据之后,在所述数据库中,采用数据库行级锁,将所存储至所述预设缓存中的资源数据标识为已缓存资源。
13.根据权利要求12所述的装置,其特征在于,还包括:
第一判断模块,用于在所述资源数据取出模块从预设缓存中,取出目标资源数据之前,判断所述预设缓存中是否有资源数据,如果有,触发所述资源数据取出模块;否则,从所述指定类型的资源数据对应的数据表中查找到第三预设数量个未缓存的资源数据,存储至所述预设缓存中,并在所述指定类型的资源数据对应的数据表中,采用数据库行级锁,将所述第三预设数量个未缓存的资源数据标识为已缓存资源,触发所述资源数据取出模块。
14.根据权利要求12所述的装置,其特征在于,还包括:
第二判断模块,用于在所述资源数据取出模块从预设缓存中,取出目标资源数据之前,判断所述预设缓存中的资源数据的数量是否小于预设阈值,若否,触发所述资源数据取出模块;若是,则从所述指定类型的资源数据对应的数据表中查找到第四预设数量个未缓存的资源数据,存储至所述预设缓存中,并在所述指定类型的资源数据对应的数据表中,采用数据库行级锁,将所述第四预设数量个未缓存的资源数据标识为已缓存资源,触发所述资源数据取出模块。
15.根据权利要求12所述的装置,其特征在于,还包括:
第二标识模块,用于在所述资源数据分配模块将所述目标资源数据分配给所述客户端之后,在所述指定类型的资源数据对应的数据表中,将所述目标资源数据标识为已分配资源。
16.根据权利要求10所述的装置,其特征在于,还包括:
第三判断模块,用于在所述第一预设模块预先针对指定类型的资源数据,在所述预设缓存中为所述指定类型的资源数据建立对应的资源集合之前,接收针对所述指定类型的资源数据对应的数据表的分配优化请求;判断所述数据库中是否存在所述指定类型的资源数据对应的数据表;若是,判断所述指定类型的资源数据对应的数据表中是否存在所述指定类型的资源数据对应的列;若存在,触发所述第一预设模块。
17.根据权利要求10所述的装置,其特征在于,所述预设缓存为Redis缓存,
所述存储模块,具体用于:
根据所述对应关系,从所述指定类型的资源数据对应的数据表中获取第一预设数量个资源数据,使用sadd方法,存储至所述预设缓存中对应的资源集合中的资源数据。
18.根据权利要求10所述的装置,其特征在于,所述预设缓存为Redis缓存,所述资源数据取出模块,具体用于:
使用spop方法,从所述预设缓存中取出目标资源数据。
CN201611050570.7A 2016-11-24 2016-11-24 一种资源分配方法及装置 Active CN108111325B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611050570.7A CN108111325B (zh) 2016-11-24 2016-11-24 一种资源分配方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611050570.7A CN108111325B (zh) 2016-11-24 2016-11-24 一种资源分配方法及装置

Publications (2)

Publication Number Publication Date
CN108111325A CN108111325A (zh) 2018-06-01
CN108111325B true CN108111325B (zh) 2021-06-22

Family

ID=62204048

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611050570.7A Active CN108111325B (zh) 2016-11-24 2016-11-24 一种资源分配方法及装置

Country Status (1)

Country Link
CN (1) CN108111325B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108718285B (zh) * 2018-06-15 2022-06-03 北京奇艺世纪科技有限公司 云计算集群的流量控制方法、装置及服务器
CN109525683B (zh) * 2018-11-14 2020-07-17 中盈优创资讯科技有限公司 城域网ipv4地址的空闲地址挖潜方法及装置
CN110659386B (zh) * 2019-09-12 2022-11-22 北京达佳互联信息技术有限公司 数字资源处理方法、装置、电子设备及存储介质
CN111030868B (zh) * 2019-12-19 2023-12-05 紫光云(南京)数字技术有限公司 一种弹性公网ip下发设备失败的解决方法
CN113485827B (zh) * 2021-06-30 2023-04-14 上海森浦信息服务有限公司 用于实现自动配置下发功能的数据处理方法、装置及存储介质
CN113420052B (zh) * 2021-07-08 2023-02-17 上海浦东发展银行股份有限公司 一种多级分布式缓存系统及方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104753966A (zh) * 2013-12-25 2015-07-01 明博教育科技有限公司 一种基于服务器和客户端缓存的资源文件查询方法及系统
CN104954468A (zh) * 2015-06-18 2015-09-30 小米科技有限责任公司 资源的分配方法及装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103248684B (zh) * 2013-04-28 2016-09-28 北京奇虎科技有限公司 一种互联网中资源获取方法和装置
US9306939B2 (en) * 2014-05-30 2016-04-05 Oracle International Corporation Authorization token cache system and method
CN104461744B (zh) * 2014-12-18 2018-01-19 曙光云计算技术有限公司 一种资源分配方法及装置
CN105391774B (zh) * 2015-10-15 2018-11-13 珠海市君天电子科技有限公司 一种基于亚马逊网络服务器的资源请求方法及装置
CN105978744B (zh) * 2016-07-26 2018-10-26 浪潮电子信息产业股份有限公司 一种资源分配方法、装置及系统

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104753966A (zh) * 2013-12-25 2015-07-01 明博教育科技有限公司 一种基于服务器和客户端缓存的资源文件查询方法及系统
CN104954468A (zh) * 2015-06-18 2015-09-30 小米科技有限责任公司 资源的分配方法及装置

Also Published As

Publication number Publication date
CN108111325A (zh) 2018-06-01

Similar Documents

Publication Publication Date Title
CN108111325B (zh) 一种资源分配方法及装置
EP3418877B1 (en) Data writing and reading method and apparatus, and cloud storage system
US11467967B2 (en) Managing a distributed cache in a cloud-based distributed computing environment
CN109710190B (zh) 一种数据存储方法、装置、设备及存储介质
US9747341B2 (en) System and method for providing a shareable global cache for use with a database environment
CN106302595B (zh) 一种对服务器进行健康检查的方法及设备
EP3338436B1 (en) Lock-free updates to a domain name blacklist
CN109120709A (zh) 一种缓存方法、装置、设备及介质
US9864684B2 (en) Performing efficient cache invalidation
EP2710477B1 (en) Distributed caching and cache analysis
CN102790809B (zh) 域名系统解析方法、装置及客户端
WO2022057231A1 (zh) 访问服务器的方法、装置、设备及存储介质
US11500755B1 (en) Database performance degradation detection and prevention
CN111385370B (zh) Id分配方法、装置、存储介质及id分配系统
CN106777085A (zh) 一种数据处理方法、装置及数据查询系统
US9380127B2 (en) Distributed caching and cache analysis
US11061889B2 (en) Systems and methods of managing manifest refresh in a database
CN110795395A (zh) 文件部署系统和文件部署方法
CN105915621A (zh) 访问数据的方法及预处理服务器
CN113760976A (zh) 业务的处理方法、装置、设备及存储介质
US8281000B1 (en) Variable-length nonce generation
CN111104376B (zh) 资源文件查询方法及装置
US11630813B1 (en) Transparent database normalization in provider networks
US20240089339A1 (en) Caching across multiple cloud environments
CN108712498B (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
GR01 Patent grant
GR01 Patent grant