CN113448976A - 数据处理方法、装置、计算机设备和存储介质 - Google Patents
数据处理方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN113448976A CN113448976A CN202110739064.3A CN202110739064A CN113448976A CN 113448976 A CN113448976 A CN 113448976A CN 202110739064 A CN202110739064 A CN 202110739064A CN 113448976 A CN113448976 A CN 113448976A
- Authority
- CN
- China
- Prior art keywords
- lock
- resource
- request
- database
- target resource
- 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.)
- Granted
Links
Images
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/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
- G06F16/2343—Locking methods, e.g. distributed locking or locking implementation details
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
-
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- 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)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及一种数据处理方法、装置、计算机设备和存储介质。所述方法包括:响应于访问目标资源的第一请求,从本地缓存中查找与所述目标资源对应的缓存锁;若在本地缓存中存在与所述目标资源对应的有效的缓存锁,则不向数据库发起针对所述目标资源的第二请求;所述第二请求,是用于对目标资源进行加锁的请求;若本地缓存中不存在有效的缓存锁,向所述数据库发起所述第二请求;若所述数据库中存在与所述目标资源对应的资源锁,则基于所述资源锁的锁有效期以及所述第二请求对应的锁版本信息,对所述资源锁进行更新,以对所述目标资源进行加锁。采用本方法能够有效缓解数据库的请求压力以有效提高数据处理性能。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种数据处理方法、装置、计算机设备和存储介质。
背景技术
随着计算机技术的迅速发展,网络中的共享数据资源不断增多,共享资源可以被多个用户访问。为避免对共享资源的访问冲突,出现了分布式锁技术,以对共享资源的访问进行管理。分布式锁技术,是控制分布式系统之间互斥访问共享资源的一种技术。
在相关技术中,分布式系统中包括多个锁服务器,针对每个锁服务器会配备相应的备机或从机。通常情况下,优先由锁服务器向数据库发送加锁请求,锁服务器故障时,再由其备机或从机提供加锁服务,向数据库发加锁请求。不论是锁服务器还是其备机或从机,在针对目标资源申请加锁时,都是直接向数据库发送加锁请求。在高并发的情况下,数据库的压力就会较大,从而影响数据库的性能。
发明内容
基于此,有必要针对上述技术问题,提供一种能够有效缓解数据库压力以提高性能的数据处理方法、装置、计算机设备和存储介质。
一种数据处理方法,所述方法包括:
响应于访问目标资源的第一请求,从本地缓存中查找与所述目标资源对应的缓存锁;
若在所述本地缓存中存在与所述目标资源对应的有效的缓存锁,则不向数据库发起针对所述目标资源的第二请求;所述第二请求,是用于对所述目标资源进行加锁的请求;
若本地缓存中不存在所述有效的缓存锁,向所述数据库发起所述第二请求;
若所述数据库中存在与所述目标资源对应的资源锁,则基于所述资源锁的锁有效期以及所述第二请求对应的锁版本信息,对所述资源锁进行更新,以对所述目标资源进行加锁。
一种数据处理装置,所述装置包括:
第一请求处理模块,用于响应于访问目标资源的第一请求,从本地缓存中查找与所述目标资源对应的缓存锁;若在所述本地缓存中存在与所述目标资源对应的有效的缓存锁,则不向数据库发起针对所述目标资源的第二请求;所述第二请求,是用于对所述目标资源进行加锁的请求;
第二请求处理模块,用于若本地缓存中不存在所述有效的缓存锁,向所述数据库发起所述第二请求;
加锁处理模块,用于若所述数据库中存在与所述目标资源对应的资源锁,则基于所述资源锁的锁有效期以及所述第二请求对应的锁版本信息,对所述资源锁进行更新,以对所述目标资源进行加锁。
在一个实施例中,所述第一请求处理模块还用于根据所述第一请求中携带的目标资源的资源标识,从本地缓存中查找所述目标资源对应的缓存锁;所述缓存锁,是在当前节点向数据库请求加锁成功得到资源锁后,将所述资源锁在本地进行缓存得到的锁;所述当前节点,是响应于所述第一请求的锁服务器节点。
在一个实施例中,所述第一请求处理模块还用于当所述本地缓存中存在与所述目标资源对应的缓存锁时,则根据所述缓存锁的锁有效期,检测所述缓存锁的有效性;其中,所述缓存锁的锁有效期,小于数据库中用于占用所述目标资源的资源锁的锁有效期。
在一个实施例中,所述数据库中与所述目标资源对应的资源锁的锁结构为键值对结构;所述键值对结构中的键,为所述目标资源的资源标识;所述键值对结构中的值,包括锁服务器节点的节点标识、所述资源锁的锁有效期以及所述资源锁的锁版本信息;所述加锁处理模块还用于根据所述资源锁对应的节点标识和锁有效期,确定是否对所述资源锁进行更新;当确定需对所述资源锁进行更新时,根据所述第二请求对应的锁版本信息,对所述资源锁的键值对结构中的锁有效期以及锁版本信息进行更新,得到与所述资源标识对应的更新后的资源锁。
在一个实施例中,所述加锁处理模块还用于对所述资源锁的锁结构中的锁有效期进行更新,得到更新后的锁有效期;根据所述第二请求对应的锁版本信息,对所述资源锁的锁结构中锁版本信息的值进行增加,得到更新后的锁版本信息;根据当前节点的节点标识、更新后的锁版本信息和更新后的锁有效期,得到与所述资源标识对应的更新后的资源锁。
在一个实施例中,所述第二请求携带查找到的与所述目标资源对应的资源锁的锁版本信息;所述加锁处理模块还用于若所述数据库中存在当前节点针对所述目标资源占用的资源锁,则根据所述锁版本信息,对所述资源锁的锁有效期进行更新,以对所述目标资源进行加锁;若所述数据库中存在非当前节点针对所述目标资源占用的资源锁,则基于所述资源锁的锁有效期检测所述资源锁的有效性,根据所述资源锁的有效性检测结果以及所述锁版本信息对所述资源锁进行更新,以对所述目标资源进行加锁。
在一个实施例中,所述加锁处理模块还用于若所述有效性检测结果表征所述非当前节点针对所述目标资源占用的资源锁已过期,则删除过期的所述资源锁,并根据所述锁版本信息在所述数据库中插入所述当前节点用于占用所述目标资源的资源锁;若所述有效性检测结果表征所述非当前节点针对所述目标资源占用的资源锁处于有效状态,则重新向所述数据库发起所述第二请求,直到所述非当前节点针对所述目标资源占用的资源锁已过期时,删除过期的所述资源锁,并根据所述锁版本信息,在所述数据库中插入所述当前节点用于占用所述目标资源的资源锁。
在一个实施例中,所述加锁处理模块还用于若所述数据库中不存在对所述目标资源占用的资源锁,则根据所述第二请求对应的锁版本信息,在所述数据库中插入当前节点用于占用所述目标资源的资源锁,以对所述目标资源进行加锁。
在一个实施例中,所述装置还包括锁缓存模块,用于在当前节点对所述目标资源成功加锁后,得到成功加锁后的资源锁;根据成功加锁后的资源锁的锁有效期,确定所述资源锁对应的缓存锁的锁有效期;根据成功加锁后的资源锁对应的所述目标资源的资源标识、所述成功加锁后的资源锁的锁版本信息、以及所述缓存锁的锁有效期,生成与成功加锁后的资源锁对应的缓存锁;将所述缓存锁存储至当前节点的所述本地缓存中。
在一个实施例中,所述成功加锁后的资源锁的锁结构为键值对结构;所述键值对结构中的键,为所述目标资源的资源标识;所述键值对结构中的值,包括所述当前节点的节点标识、所述成功加锁后的资源锁的锁有效期以及所述成功加锁后的资源锁的锁版本信息;所述锁缓存模块还用于复制所述成功加锁后的资源锁,并将复制的所述成功加锁后的资源锁的锁结构中的锁有效期更新为所述缓存锁的锁有效期,得到与成功加锁后的资源锁对应的缓存锁。
在一个实施例中,所述装置还包括续锁处理模块,用于若满足续锁条件,则向所述数据库发送针对所述目标资源的续锁请求;若所述数据库中存在当前节点对所述目标资源占用的资源锁,则根据所述续锁请求携带的锁版本信息,对占用的所述资源锁的锁有效期进行更新,以对所述目标资源进行续锁。
在一个实施例中,所述装置还包括解锁处理模块,用于若满足解锁条件,则向所述数据库发送针对所述目标资源的解锁请求;若所述数据库中存在当前节点对所述目标资源占用的资源锁,则根据所述解锁请求的锁版本信息删除占用的所述资源锁,以进行解锁。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现本申请各实施例的数据处理方法中的步骤。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现本申请各实施例的数据处理方法中的步骤。
一种计算机程序产品或计算机程序,所述计算机程序产品或计算机程序包括计算机指令,所述计算机指令存储在计算机可读存储介质中;所述计算机设备的处理器从所述计算机可读存储介质读取所述计算机指令,所述处理器执行所述计算机指令时实现本申请各实施例的数据处理方法中的步骤。
上述数据处理方法、装置、计算机设备和存储介质,响应于访问目标资源的第一请求后,则从本地缓存中查找与目标资源对应的缓存锁;由于在本地缓存了与数据库中的资源锁对应的缓存锁,通过在响应第一请求后,首先查找本地缓存中的缓存锁,若本地缓存中存在与目标资源对应的有效的缓存锁,表示数据库中的目标资源已经被占用,则不向数据库发起针对目标资源的第二请求,由此能够先通过缓存锁过滤掉部分第二请求,以减少向数据库发起第二请求的次数,从而能够有效减轻数据库的请求压力和降低网络消耗。若本地缓存中不存在有效的缓存锁,则向数据库发起第二请求。若数据库中存在与目标资源对应的资源锁,则基于资源锁的锁有效期以及第二请求对应的锁版本信息,对资源锁进行更新以对目标资源进行加锁。通过资源锁的锁有效期判断出这个资源锁已过期时,其他节点则可以进行加锁抢占,从而能够避免服务阻塞。当多个服务器同时争用一个分布式锁时,通过资源锁的锁版本信息能够保证只有一个服务器加锁成功。由此,在有效保证对目标资源进行加锁处理的精准度的同时,能够有效缓解数据库压力以提高数据处理性能。
附图说明
图1为一个实施例中数据处理方法的应用环境图;
图2为另一个实施例中数据处理方法的流程示意图;
图3为一个实施例中数据处理方法的流程示意图;
图4为一个实施例中对目标资源申请加锁的系统框架图;
图5为一个实施例中数据库中的一个资源锁的锁结构的示意图;
图6为另一个实施例中数据处理方法的流程示意图;
图7为一个实施例中对数据库中的目标资源进行加锁处理的时序图;
图8为一个实施例中对数据库中的目标资源进行加锁的流程框图;
图9为一个实施例中对数据库中的目标资源进行续锁的流程框图;
图10为一个实施例中对数据库中的目标资源进行解锁的流程框图;
图11为一个实施例中数据处理装置的结构框图;
图12为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的数据处理方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与业务系统中的锁服务器集群104进行通信,锁服务器集群104通过网络与数据库106进行通信。终端102可以发起访问目标资源的第一请求至业务系统中的锁服务器集群104,锁服务器集群104中的其中一个锁服务器节点接收到终端102发送的第一请求后,则响应于访问目标资源的第一请求,从本地缓存中查找与目标资源对应的缓存锁;若在本地缓存中存在与目标资源对应的有效的缓存锁,则不向数据库106发起针对目标资源的第二请求;若本地缓存中不存在有效的缓存锁,向数据库106发起第二请求;若数据库106中存在与目标资源对应的资源锁,则基于资源锁的锁有效期以及第二请求对应的锁版本信息,对资源锁进行更新,以对目标资源进行加锁。
本申请提供的数据处理方法,可以应用于如图2所示的应用环境中。其中,终端202通过网络与路由服务器204进行通信,路由服务器节点204通过网络与锁服务器集群206进行通信,锁服务器集群206通过网络与数据库208进行通信。多个终端202可以同时向路由服务器204发起访问目标资源的第一请求,路由服务器204接收到终端202发送的第一请求后,将第一请求转发至锁服务器集群206中的锁服务器节点。锁服务器节点则响应于访问目标资源的第一请求,从本地缓存中查找与目标资源对应的缓存锁;若在本地缓存中存在与目标资源对应的有效的缓存锁,则不向数据库208发起针对目标资源的第二请求;若本地缓存中不存在有效的缓存锁,向数据库208发起第二请求;若数据库108中存在与目标资源对应的资源锁,则基于资源锁的锁有效期以及第二请求对应的锁版本信息,对资源锁进行更新,以对目标资源进行加锁。
其中,路由服务器以及锁服务器集群中的锁服务器节点可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。终端102可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
云计算(Cloud Computing)是指IT(Internet Technology,互联网技术)基础设施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需资源;广义云计算指服务的交付和使用模式,指通过网络以按需、易扩展的方式获得所需服务。这种服务可以是IT和软件、互联网相关,也可是其他服务。云计算是网格计算(Grid Computing)、分布式计算(DistributedComputing)、并行计算(Parallel Computing)、效用计算(UtilityComputing)、网络存储(Network Storage Technologies)、虚拟化(Virtualization)、负载均衡(Load Balance)等传统计算机和网络技术发展融合的产物。随着互联网、实时数据流、连接设备多样化的发展,以及搜索服务、社会网络、移动商务和开放协作等需求的推动,云计算迅速发展起来。不同于以往的并行分布式计算,云计算的产生从理念上将推动整个互联网模式、企业管理模式发生革命性的变革。
在其中一个实施例中,数据库中的共享资源,可以采用基于区块链的数据共享系统存储。区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层。
在一个实施例中,如图3所示,提供了一种数据处理方法,以该方法应用于图1中的锁服务器节点为例进行说明,包括以下步骤:
步骤S302,响应于访问目标资源的第一请求,从本地缓存中查找与目标资源对应的缓存锁。
其中,目标资源是指分布式系统的数据库中的共享资源,共享资源是指支持被共享访问的资源。共享资源可以包括文件、数据结构、磁盘设备、可执行程序等中的任意一种。本申请实施例中的共享资源,在同一时刻只能被一个访问端所访问。
可以理解,在访问端对数据库中的共享资源进行访问的过程中,采用分布式锁机制,对访问目标资源的请求进行加锁处理。其中,分布式锁是控制分布式系统之间互斥访问共享资源的一种方式,保证共享资源在同一时刻只能被一个处理者所处理。在分布式系统中,若不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,在访问这些资源时,则需要访问互斥来防止彼此干扰以保证资源的一致性。
其中,第一请求是指访问端发起的用于访问目标资源的请求,例如,第一请求包括对目标资源进行查询、修改、更新、删除等请求。访问端可以是用户对应的客户端,也可以是业务服务器端,本申请中不作限定。
在其中一个实施例中,上述数据处理方法中部署有用于管理分布式锁的系统,该系统中包括锁服务器集群,锁服务器集群中包括多个锁服务器节点,锁服务器集群中的锁服务器节点采用分布式平行部署。其中,多个是指至少两个。
例如,如图4所示,为一个实施例中对目标资源申请加锁的系统框架图。该系统中包括客户端402,即用户终端、路由服务器404,即接入层服务器、锁服务器节点406以及数据库408。其中,客户端402用于触发访问目标资源的第一请求;路由服务器404用于接收客户端发起的第一请求,并将第一请求转发至特定的锁服务器节点406进行处理,具体可以按照预设的转发策略进行转发,例如转发策略包括按照业务类型转发、按照用户标识转发等。锁服务器集群中的锁服务器节点406,用于接收第一请求后,向数据库408发起针对目标资源的第二请求,即加锁请求。数据库可以为数据库集群,用于存储数据库中资源的资源锁,以及对锁服务器节点发起的加锁请求进行处理。
其中,锁服务器集群中接收到第一请求的锁服务器节点,即为当前节点,也就是当前需要对访问目标资源的第一请求进行响应的锁服务器节点。
可以理解的是,本地缓存是当前节点的本地缓存,是指将当前节点本地的内存用于存储缓存信息的空间,可以用于存储与数据库中针对目标资源的资源锁对应的缓存锁。例如,本地缓存可以采用静态字典,根据唯一准确描述缓存的键标识来将对应的值存入内存中。
其中,数据库中针对目标资源的资源锁,是指对数据库中的目标资源进行加锁占用的分布式锁。资源锁包括对应的锁有效期和锁版本信息。其中,锁有效期,表示一个锁服务器节点对目标资源加锁成功后,多久后该资源锁会自动失效。锁版本信息,表示一个分布式的资源锁当前经过多少次数据更新,数据更新包括锁有效期、持有锁的锁服务器节点变更等。
可以理解,当前节点可以接收多个访问端发送的访问目标资源的请求,当前节点可以调用线程分别对每个访问目标资源的请求进行处理,并根据接收到每个请求的时间,通过相应线程依次对每个访问目标资源的请求进行排队处理。也就是当有多个访问目标资源的请求对目标资源进行抢占时,当前节点则需要通过控制线程对目标资源进行争抢操作,以实现线程高效并发,同时保证对目标资源的操作正确。
具体地,当前节点获取访问目标资源的第一请求后,则对第一请求进行响应,从本地缓存中查找与目标资源对应的缓存锁,以确定本地缓存中是否已经存在针对目标资源的有效的缓存锁。
步骤S304,若在本地缓存中存在与目标资源对应的有效的缓存锁,则不向数据库发起针对目标资源的第二请求。
可以理解,有效的缓存锁,可以是指锁有效期还未过期的缓存锁。第二请求,是用于当前节点对目标资源进行加锁的请求,以向数据库中的目标资源申请占用的资源锁。
若当前节点检测到本地缓存中存在与目标资源对应的有效的缓存锁,则表征数据库中已经存在了对目标资源有效占用的资源锁。当前节点则暂不向数据库发起针对目标资源的第二请求。
在其中一个实施例中,在若在本地缓存中存在与目标资源对应的有效的缓存锁,则不向数据库发起针对目标资源的第二请求之后,还包括:持续检测缓存锁的锁有效期;当检测到缓存锁的锁有效期为过期时,则向数据库发起针对目标资源的第二请求。
当前节点若检测到本地缓存中存在与目标资源对应的有效的缓存锁后,当前节点还可以持续对本地缓存中与目标资源对应的缓存锁进行检测。具体地,当前节点通过检测缓存锁的锁有效期,以确定与目标资源对应的缓存锁是否有效,具体可以按照预设频率持续检测缓存锁的锁有效期,并等待本地缓存中与目标资源对应的缓存锁过期。
直到检测到缓存锁的锁有效期为过期时,表示本地缓存中与目标资源对应的缓存锁已经无效了,当前节点则向数据库发起针对目标资源的第二请求。
在其中一个实施例中,若在本地缓存中存在与目标资源对应的有效的缓存锁,则不向数据库发起针对目标资源的第二请求,包括:若在本地缓存中存在与目标资源对应的有效的缓存锁,则不向数据库发起针对目标资源的第二请求、并拦截第一请求,向发起第一请求的访问端反馈访问失败结果。
可以理解,第一请求可以是访问端发起的用于操作目标资源的请求。
当前节点检测到在本地缓存中存在与目标资源对应的有效的缓存锁时,则不向数据库发起针对目标资源的第二请求,并且直接拦截第一请求,即拒绝对第一请求进行处理,并直接向访问端反馈访问失败结果。
步骤S306,若本地缓存中不存在有效的缓存锁,向数据库发起第二请求。
可以理解,本地缓存中不存在有效的缓存锁,则表示本地缓存中的缓存锁已经过期或者无效。
当前节点检测出本地缓存中不存在有效的缓存锁时,则直接向数据库发起第二请求,并在数据库中查找与目标资源对应的已存在的资源锁。
步骤S308,若数据库中存在与目标资源对应的资源锁,则基于资源锁的锁有效期以及第二请求对应的锁版本信息,对资源锁进行更新,以对目标资源进行加锁。
可以理解,数据库中与目标资源对应的资源锁,包括对应的锁有效期和锁版本信息。若数据库中存在与目标资源对应的资源锁,则表示数据库中的目标资源以及被锁住。
其中,第二请求对应的版本信息,是指当前节点所查找到的与目标资源对应的资源锁的锁版本信息。所查找到的锁版本信息,可以是当前节点向数据库发起第二请求时,在数据库中查找与目标资源对应的资源锁,若数据库中存在与目标资源对应的资源锁,数据库则向当前节点返回该资源锁的锁版本信息。然后再根据第二请求向数据库申请对目标资源进行加锁,此时第二请求则可以携带所返回的查找到的资源锁的锁版本信息。
当查询到数据库中存在与目标资源对应的资源锁时,当前节点则根据资源锁的锁有效期,确定是否需要对资源锁进行更新。若需要对资源锁进行更新时,则根据第二请求对应的版本信息对该资源锁进行更新,以使得当前节点对目标资源进行加锁。
在一个实施例中,上述数据处理方法还包括:若数据库中不存在对目标资源占用的资源锁,则根据第二请求对应的锁版本信息,在数据库中插入当前节点用于占用目标资源的资源锁,以对目标资源进行加锁。
可以理解,数据库中不存在对目标资源占用的资源锁,则表示数据库中的目标资源当前未被占用,当前节点可以直接对目标资源进行加锁。
具体地,当检测到数据库中不存在对目标资源占用的资源锁时,当前节点则基于第二请求对应的锁版本信息对目标资源请求加锁。其中,目标资源对应的资源锁包括资源标识和锁版本信息。当前节点在对目标资源进行加锁时,则将第二请求携带的资源标识和锁版本信息,添加至目标资源对应的资源锁的锁结构中,从而使得当前节点对目标资源成功加锁。
在其中一个实施例中,目标资源对应的资源锁的锁结构为键值对结构;键值对结构中的键,为目标资源的资源标识;键值对结构中的值,包括锁服务器节点的节点标识、资源锁的锁有效期以及资源锁的锁版本信息。
当前节点在对目标资源进行加锁时,则根据第二请求携带的资源标识,将当前节点的节点标识、第二请求对应的资源锁的锁有效期以及第二请求对应的锁版本信息,写入与目标资源对应的资源锁的锁结构中,从而使得当前节点对目标资源成功加锁。
上述数据处理方法中,响应于访问目标资源的第一请求后,则从本地缓存中查找与目标资源对应的缓存锁;由于在本地缓存了与数据库中的资源锁对应的缓存锁,通过在响应第一请求后,首先查找本地缓存中的缓存锁,若本地缓存中存在与目标资源对应的有效的缓存锁,表示数据库中的目标资源已经被占用,则不向数据库发起针对目标资源的第二请求,由此能够先通过缓存锁过滤掉部分第二请求,以减少向数据库发起第二请求的次数,从而能够有效减轻数据库的请求压力和降低网络消耗。若本地缓存中不存在有效的缓存锁,则向数据库发起第二请求。若数据库中存在与目标资源对应的资源锁,则基于资源锁的锁有效期以及第二请求对应的锁版本信息,对资源锁进行更新以对目标资源进行加锁。通过资源锁的锁有效期判断出这个资源锁已过期时,其他节点则可以进行加锁抢占,从而能够避免服务阻塞。当多个服务器同时争用一个分布式锁时,通过资源锁的锁版本信息能够保证只有一个服务器加锁成功。由此,在有效保证对目标资源的加锁处理的精准度的同时,能够有效缓解数据库压力以提高数据处理性能。
在一个实施例中,从本地缓存中查找与目标资源对应的缓存锁,包括:根据第一请求中携带的目标资源的资源标识,从本地缓存中查找目标资源对应的缓存锁。
其中,当前节点,是响应于第一请求的锁服务器节点。缓存锁,是在当前节点向数据库请求加锁成功得到资源锁后,将资源锁在本地进行缓存得到的锁。资源标识,是用于区分不同资源的标识,具有唯一性,数据库中的每个资源都具有唯一的资源标识。
访问端发起访问目标资源的第一请求时,该第一请求中携带了目标资源的资源标识。当前节点接收到访问目标资源的请求后,在对第一请求进行响应时,则首先根据该第一请求中携带的资源标识,从本地缓存中查找与资源标识对应的缓存锁,以查找与目标资源对应的缓存锁。
当前节点若查找到本地缓存中存在与目标资源对应的缓存锁,则进一步检测缓存锁的有效性,以确定是否立即向数据库发起针对目标资源的第二请求,还是暂不发送第二请求。
本实施例中,通过在本地缓存与数据库中的资源锁对应的缓存锁,通过在响应第一请求后,首先查找本地缓存中的缓存锁,若本地缓存中存在对应有效的缓存锁,则不向数据库发起针对目标资源的第二请求,由此能够先通过缓存锁过滤掉部分第二请求,以减少向数据库发起第二请求的次数,从而能够有效减轻数据库的请求压力和降低网络消耗。
在一个实施例中,上述数据处理方法还包括:当本地缓存中存在与目标资源对应的缓存锁时,则根据缓存锁的锁有效期,检测缓存锁的有效性。其中,缓存锁的锁有效期,小于数据库中用于占用目标资源的资源锁的锁有效期。
其中,本地缓存中与资源锁对应的缓存锁,包括锁有效期。可以理解,缓存锁,是在当前节点向数据库请求加锁成功得到资源锁后,将资源锁在本地进行缓存得到的锁。
当前节点接收到访问目标资源的请求后,在对第一请求进行响应时,首先在本地缓存中检测是否存在针对目标资源的缓存锁,以及缓存锁的有效性。
本地缓存中的缓存锁包括对应的锁有效期。缓存锁的锁有效期,可以与数据库中相对应的资源锁的锁有效期相同,也可以不同。
在一个实施例中,当前节点若在本地缓存中查找到与目标资源对应的缓存锁,则检测缓存锁的有效性。
具体地,当前节点在本地缓存中查找到与目标资源对应的缓存锁时,则根据该缓存锁的锁有效期,确定该缓存锁是否有效。若锁有效期未过期,则表示该缓存锁仍有效。若锁有效期已过期,则表示该缓存锁无效。
其中,当前节点在本地缓存了向数据库中的资源请求加锁成功得到资源锁后,与资源锁对应的缓存锁,例如,当前节点在本地缓存了上一次向数据库中的资源请求加锁成功后的缓存锁。并设置了缓存锁的锁有效期,且缓存锁的锁有效期会被设置为比数据库中对应的资源锁的锁过期时间小,以保证内存锁先于数据库中的锁过期,从而保证不会让服务器误认为仍然处于加锁状态。
例如,若数据库中与目标资源对应的资源锁的锁有效期为T秒,则本地缓存中与该资源锁对应的缓存锁的锁有效期则可以为(T-1)秒。
假设数据库中的资源为N个,每个资源对应的锁服务器节点的数量为M,数据库中针对每个资源的资源锁的锁过期时间为T秒,假设每秒各锁服务器节点均向数据库请求锁数据,则未在每个锁服务器节点的本地存储缓存锁时,数据库加锁的最大QPS(Queries PerSecond,每秒查询率)压力为M*N/s。
本实施例中方案中,在每个锁服务器节点的本地存储缓存锁之后,缓存锁的过期时间为(T-1)秒,那么在缓存锁过期之前,每个锁服务器节点均会先检查本地缓存中的缓存锁,而不是立即向发起数据库加锁请求,由此,数据库QPS压力则降低为(M*N)/(T-1)s,能够将数据库压力降低T-1倍,从而能够有效减轻数据库的请求压力和降低网络消耗,缓解数据库性能,并且能够有效提高分布式锁系统的吞吐量,以有效提高对资源进行加锁处理的效率。
在一个实施例中,基于资源锁的锁有效期以及第二请求对应的锁版本信息,对资源锁进行更新,以对目标资源进行加锁,包括:根据资源锁对应的节点标识和锁有效期,确定是否对资源锁进行更新;当确定需对资源锁进行更新时,根据第二请求对应的锁版本信息,对资源锁的键值对结构中的锁有效期以及锁版本信息进行更新,得到与资源标识对应的更新后的资源锁。
其中,数据库中与目标资源对应的资源锁的锁结构为键值对结构;键值对结构中的键,为目标资源的资源标识;键值对结构中的值,包括锁服务器节点的节点标识、资源锁的锁有效期以及资源锁的锁版本信息。
可以理解,键值对(key-value),也称为名值对或属性值对,是一种基本的数据表示。键值对结构,是数据库存储数据的一种组织形式。键值对结构包括键和对应的值,可以根据键获得对应的值。例如,可以采用key-value存储系统,来存储资源锁的锁数据。
容易理解的是,分布式锁系统中包括多个锁服务器节点,每个锁服务器节点具有对应唯一的节点标识。分布式锁系统中各锁服务器节点向数据库中的资源申请加锁成功后,数据库则会存储与每个资源对应的加锁成功后的资源锁。资源锁的锁结构中的键为该资源对应唯一的资源标识,用于唯一区分每一个资源。资源锁的锁结构中的值,包括当前对该资源加锁成功的锁服务器节点的节点标识、锁有效期以及资源锁的锁版本信息。
如图5所示,为数据库52中的一个资源锁521的锁结构,锁结构包括键521a和值521b两部分,可以通过键定位到对应的值。其中,键521a为数据库中的资源对应的资源标识,资源标识可以是任意可区分资源的编号或字符串等,例如数据库中的资源可以包括但不限于虚拟商品、名称资源等。与键521a对应的值521b包括当前持有该资源的资源锁的锁服务器节点的节点标识、锁有效期以及资源锁的锁版本信息。
当前节点向数据库发起请求对目标资源进行加锁的第二请求后,则在数据库中查找与目标资源对应的资源锁。若数据库中存在与目标资源对应的资源锁时,则需要进一步根据资源锁对应的节点标识和锁有效期,确定是否对资源锁进行更新。具体地,可以仅根据资源锁对应的节点标识,确定是否对资源锁进行更新;也可以仅根据资源锁对应的锁有效期,确定是否对资源锁进行更新;还可以根据资源锁对应的节点标识和锁有效期结合起来,确定是否对资源锁进行更新。
当满足更新资源锁的条件时,即确定需对资源锁进行更新时,当前节点则根据第二请求对应的锁版本信息,对资源锁的键值对结构中的锁有效期以及锁版本信息进行更新,并根据当前节点的节点标识、更新后的锁有效期以及更新后的锁版本信息,得到与资源标识对应的更新后的资源锁,由此能够有效保证只有一个锁服务器节点对目标资源加锁成功,从而保证资源锁的互斥。
在一个实施例中,根据第二请求对应的锁版本信息,对资源锁的键值对结构中的锁有效期以及锁版本信息进行更新,得到与资源标识对应的更新后的资源锁,包括:对资源锁的锁结构中的锁有效期进行更新,得到更新后的锁有效期;根据第二请求对应的锁版本信息,对资源锁的锁结构中锁版本信息的值进行增加,得到更新后的锁版本信息;根据当前节点的节点标识、更新后的锁版本信息和更新后的锁有效期,得到与资源标识对应的更新后的资源锁。
可以理解,当多个锁服务器节点同时争用目标资源的资源锁时,通过资源锁的锁版本信息,来保证只有一个锁服务器节点加锁成功。锁版本信息可以通过原子性自增,以保证加锁的原子性。
其中,第二请求对应的锁版本信息,是在数据库中查询到的与目标资源对应的资源锁的锁版本信息。
当前节点确定需要对资源锁进行更新时,首先检查第二请求对应的锁版本信息,与数据库中目标资源对应的资源锁的当前锁版本信息是否一致,若不一致,则返回加锁失败的结果。若一致,则根据第二请求对应的锁版本信息,对资源锁的键值对结构中的锁有效期以及锁版本信息进行更新,得到与资源标识对应的更新后的资源锁。
当前节点对资源锁的键值对结构中的锁有效期以及锁版本信息进行更新时,基于第二请求,对资源锁的锁结构中的锁有效期进行更新,得到更新后的锁有效期。例如,第二请求携带有发起请求时的请求时间,当前节点在向数据库中的目标资源申请加锁时,则根据第二请求对应的请求时间,按照预设规则更新资源锁的锁有效期,例如可以在第二请求对应的请求时间的基础上增加预设时长,得到新的有效期,则利用这个新的有效期替换资源锁的锁结构中已有的锁有效期,从而得到更新后的锁有效期。
同时,若资源锁的锁结构中的节点标识,与当前节点的节点标识相同,则不对资源锁的锁结构中的节点标识进行更新;若不同,则将资源锁的锁结构中的节点标识,更新为当前节点的节点标识。
进一步地,当前节点还基于第二请求携带的锁版本信息,对资源锁的锁结构中的锁版本信息进行更新。具体地,对资源锁的锁有效期更新后,则对资源锁的锁结构中锁版本信息的值进行增加,具体可以为每一次对资源锁更新后,对锁版本信息的值进行自增,在自增后得到更新后的锁版本信息。
当前节点则根据当前节点的节点标识、更新后的锁版本信息和更新后的锁有效期,得到当前节点对目标资源加锁成功后的资源锁。
例如,若有两个锁服务器节点同时向数据库中查询与目标资源对应的资源锁,并分别向每个锁服务器节点返回该资源锁的锁版本信息,例如此时的资源锁的锁版本信息为101。然后这两个锁服务器节点同时都持有了锁版本信息101,两个锁服务器节点进而基于所持有的锁版本信息101,同时发送加锁请求至数据库,数据库同时收到两个加锁请求后,将其放入处理队列中逐个处理。数据库在处理加锁请求时,会校验加锁请求携带的锁版本信息,与数据库中与目标资源对应的资源锁的当前锁版本信息是否一致,若不一致则会返回失败;若一致则处理加锁请求。当数据库处理完两个加锁请求中的第一个加锁请求后,数据库中目标资源的资源锁的锁版本信息101,则更新为锁版本信息102。在处理第二个加锁请求时,则将会失败,由此保证了只有一个锁服务器节点对目标资源加锁成功,从而有效保证了资源锁的互斥。
在一个实施例中,若数据库中存在与目标资源对应的资源锁,则基于资源锁的锁有效期以及第二请求对应的锁版本信息,对资源锁进行更新,以对目标资源进行加锁,包括:若数据库中存在当前节点针对目标资源占用的资源锁,则根据锁版本信息,对资源锁的锁有效期进行更新,以对目标资源进行加锁;若数据库中存在非当前节点针对目标资源占用的资源锁,则基于资源锁的锁有效期检测资源锁的有效性,根据资源锁的有效性检测结果以及锁版本信息对资源锁进行更新,以对目标资源进行加锁。
其中,第二请求携带所查找到的、与目标资源对应的资源锁的锁版本信息。
可以理解,非当前节点,是指锁服务器集群中除当前节点外的锁服务器节点。数据库中与目标资源对应的资源锁,包括资源标识、节点标识、锁有效期以及锁版本信息。
当前节点基于资源锁的锁有效期以及第二请求对应的锁版本信息,对资源锁进行更新时,可以首先检测资源锁中的节点标识,与当前节点的节点标识是否一致,以确定是当前节点针对目标资源占用的资源锁,还是非当前节点针对目标资源占用的资源锁。
若数据库中存在的资源锁,为当前节点针对目标资源占用的资源锁,当前节点则直接基于第二请求对应的请求时间和锁版本信息,对资源锁的锁有效期进行更新,并对资源锁的锁版本信息进行更新,以使得当前节点继续对目标资源进行加锁占用。
若数据库中存在的资源锁,为非当前节点针对目标资源占用的资源锁,则需要进一步基于资源锁的锁有效期检测资源锁的有效性,根据资源锁的有效性检测结果以及第二请求对应的锁版本信息,确定是否对资源锁进行更新。具体地,当有效性检测结果表示锁有效期为无效、且第二请求对应的锁版本信息与数据库中对应的资源锁的当前锁版本信息一致时,则对目标资源进行加锁。否则,返回加锁失败的结果。
在一个实施例中,如图6所示,提供了另一种数据处理方法,具体包括以下步骤:
步骤S602,响应于访问目标资源的第一请求,从本地缓存中查找与目标资源对应的缓存锁。
步骤S604,若在本地缓存中存在与目标资源对应的有效的缓存锁,则不向数据库发起针对目标资源的第二请求。
步骤S606,若本地缓存中不存在有效的缓存锁,向数据库发起第二请求。
步骤S608,若数据库中存在当前节点针对目标资源占用的资源锁,则根据锁版本信息,对资源锁的锁有效期进行更新,以对目标资源进行加锁。
步骤S610,若有效性检测结果表征非当前节点针对目标资源占用的资源锁已过期,则删除过期的资源锁,并根据锁版本信息在数据库中插入当前节点用于占用目标资源的资源锁。
步骤S612,若有效性检测结果表征非当前节点针对目标资源占用的资源锁处于有效状态,则重新向数据库发起第二请求,直到非当前节点针对目标资源占用的资源锁已过期时,删除过期的资源锁,并根据锁版本信息,在数据库中插入当前节点用于占用目标资源的资源锁。
当前节点检测到数据库中存在于目标资源对应的资源锁后,若数据库中存在的资源锁为当前节点针对目标资源占用的资源锁,则直接基于第二请求对应的请求时间和锁版本信息,对资源锁的锁有效期进行更新。
若数据库中存在的资源锁,为非当前节点针对目标资源占用的资源锁,则进一步基于资源锁的锁有效期检测资源锁的有效性,根据资源锁的有效性检测结果以及第二请求对应的锁版本信息,确定是否对资源锁进行更新。
具体地,当有效性检测结果表示锁有效期为无效,即非当前节点针对目标资源占用的资源锁已过期、且第二请求对应的锁版本信息与数据库中对应的资源锁的当前锁版本信息一致时,当前节点则携带第二请求对应的锁版本信息,去删除数据库中已过期的资源锁的锁结构中的值,并根据当前节点的节点标识、第二请求的请求时间已经对应的锁版本信息,在数据库中插入当前节点用于占用目标资源的资源锁。也就是将当前节点的节点标识、根据第二请求的请求时间确定的锁有效期、以及对第二请求对应的锁版本信息更新后的锁版本信息,写入与目标资源对应的资源锁的锁结构中,从而使得当前节点对目标资源加锁成功。
若有效性检测结果,表征非当前节点针对目标资源占用的资源锁处于有效状态时,当前节点则重新向数据库发起第二请求,并查询数据库中针对目标资源的资源锁的有效性。例如,当前节点具体可以按照预设频率或定时重新向数据库发起第二请求。
直到有效性检测结果,表征非当前节点针对目标资源占用的资源锁已过期时,当前节点则携带第二请求对应的锁版本信息,去删除数据库中已过期的资源锁的锁结构中的值,并根据当前节点的节点标识、第二请求的请求时间已经对应的锁版本信息,在数据库中插入当前节点用于占用目标资源的资源锁。
本实施例中,通过检测数据库中针对目标资源的资源锁的节点标识、锁有效期以及锁版本信息,能够准确地判断当前节点在当前是否需要对针对目标资源的资源锁进行加锁更新,通过校验锁版本信息,能够有效防止资源锁被其他锁服务器节点释放,以保证只有一个锁服务器节点对目标资源加锁成功,从而有效保证了资源锁的互斥性,以及有效提高了加锁处理的精准度。
在一个实施例中,上述数据处理方法还包括:在当前节点对目标资源成功加锁后,得到成功加锁后的资源锁;根据成功加锁后的资源锁的锁有效期,确定资源锁对应的缓存锁的锁有效期;根据成功加锁后的资源锁对应的目标资源的资源标识、成功加锁后的资源锁的锁版本信息、以及缓存锁的锁有效期,生成与成功加锁后的资源锁对应的缓存锁;将缓存锁存储至当前节点的本地缓存中。
可以理解,当前节点向数据库中的目标资源申请加锁,在成功加锁后,数据库中目标资源对应的资源锁的锁结构中则存储有目标资源的资源标识,以及本次成功加锁后的资源锁的节点标识、锁有效期以及锁版本信息。数据库则会向当前节点返回本次成功加锁后的资源锁。
当前节点进而根据成功加锁后的资源锁的锁有效期,确定与资源锁对应的缓存锁的锁有效期。其中,可以直接将资源锁的锁有效期,作为缓存锁的锁有效期;也可以根据资源锁的锁有效期,在资源锁的锁有效期的基础上减去预设数据,得到缓存锁的锁有效期。即所确定的缓存锁的锁有效期,小于或等于资源锁的锁有效期。
当前节点则根据目标资源的资源标识,以及当前节点的节点标识、缓存锁的锁有效期和资源锁的锁版本信息,生成与成功加锁后的资源锁对应的缓存锁,并将缓存锁存储至当前节点的本地缓存中。
本实施例中,通过在本地缓存与数据库中的资源锁对应的缓存锁,通过在向数据库发起加锁请求之前,首先查找本地缓存中的缓存锁,若本地缓存中存在对应有效的缓存锁,则不向数据库发起针对目标资源的加锁请求,由此能够先通过缓存锁过滤掉部分加锁请求,以减少向数据库发起加锁请求的次数,从而能够有效减轻数据库的请求压力和降低网络消耗。
在一个实施例中,根据成功加锁后的资源锁对应的目标资源的资源标识、成功加锁后的资源锁的锁版本信息、以及缓存锁的锁有效期,生成与成功加锁后的资源锁对应的缓存锁,包括:复制成功加锁后的资源锁,并将复制的成功加锁后的资源锁的锁结构中的锁有效期更新为缓存锁的锁有效期,得到与成功加锁后的资源锁对应的缓存锁。
其中,成功加锁后的资源锁的锁结构为键值对结构;键值对结构中的键,为目标资源的资源标识;键值对结构中的值,包括当前节点的节点标识、成功加锁后的资源锁的锁有效期以及成功加锁后的资源锁的锁版本信息。
当前节点在生成缓存锁时,可以直接复制一份成功加锁后的资源锁,通过对资源锁的锁结构中的锁有效期进行更改,即可生成与该资源锁对应的缓存锁。具体地,在对资源锁的锁结构中的锁有效期进行更改,将锁结构中的锁有效期更新为所确定的缓存锁的锁有效期。其中,所确定的缓存锁的锁有效期,小于资源锁的锁有效期。从而能够有效生成与成功加锁后的资源锁对应的缓存锁。
本实施例中,通过将缓存锁的锁有效期,设置为比数据库中对应的资源锁的锁过期时间小,由此能够保证内存锁先于数据库中的锁过期,从而保证不会让服务器误认为仍然处于加锁状态。并且能够有效减少向数据库发起加锁请求的次数,从而能够有效减轻数据库的请求压力和降低网络消耗。
在一个实施例中,上述数据处理方法还包括:若满足续锁条件,则向数据库发送针对目标资源的续锁请求;若数据库中存在当前节点对目标资源占用的资源锁,则根据续锁请求携带的锁版本信息,对占用的资源锁的锁有效期进行更新,以对目标资源进行续锁。
可以理解的是,当前节点在对数据库中的目标资源成功加锁后,还可以向数据库申请对目标资源进行续锁。
当前节点向数据库中的目标资源申请加锁,在成功加锁后,当前节点还对访问目标资源的第一请求进行监控,以确定是否向数据库发送针对目标资源的续锁请求。例如,当资源锁的使用方处理目标资源需要较长时间,如超过资源锁的锁过期时间时,为了防止当前所占用的资源锁过期,当前节点则可以发起续锁请求。
在其中一个实施例中,当前节点可以对第一请求的处理时长以及目标资源对应的资源锁的锁有效期进行监控,确定第一请求的处理时长。当处理时长大于第二请求对应的当前锁的有效期时,即在资源锁的锁有效期即将过期时,表示访问目标资源的第一请求还未处理完成。此时则满足续锁条件,当前节点则可以自动向数据库发送针对目标资源的续锁请求。
在其中一个实施例中,当前节点可以接收多个访问端发送的访问目标资源的第一请求,当前阶段则调用多个线程分别对这些第一请求进行处理,在处理的过程中,将处理这些第一请求的线程放入线程队列中,依次排队对每一个第一请求进行处理。
当满足续锁条件时,当前节点则立即向数据库发送与当前锁对应的续锁请求,并在数据库中查找与目标资源对应的资源锁。
当查找到数据库中存在当前节点对目标资源占用的资源锁时,表示此时数据库中的目标资源仍然被当前节点有效占用,数据库还会向当前节点反馈所查找到的目标资源的资源锁的锁版本信息。当前节点则继续向数据库发起携带有所查找到的锁版本信息的续锁请求,并基于续锁请求和所携带的锁版本信息,对数据库中占用的资源锁进行更新。具体地,当前节点根据续锁请求的请求时间,更新该资源锁的锁有效期,然后对资源锁的锁版本信息进行自增,以更新该资源锁的锁版本信息,当对资源锁更新成功时,当前节点则对目标资源的资源锁成功续期。
当查找到数据库中存在非当前节点对目标资源占用的资源锁时,表示此时数据库中的目标资源已经被非当前节点的其他锁服务器节点所占用,当前节点则对目标资源的资源锁续锁失败。
本实施例中,在满足续锁条件时,通过向数据库申请续锁,能够有效对目标资源的资源锁继续占用,以保证发起第一请求的访问端对目标资源进行处理的流畅性,有效提高了对目标资源加锁访问的效率。
在一个实施例中,上述数据处理方法还包括:若满足解锁条件,则向数据库发送针对目标资源的解锁请求;若数据库中存在当前节点对目标资源占用的资源锁,则根据解锁请求的锁版本信息删除占用的资源锁,以进行解锁。
可以理解的是,当前节点在对数据库中的目标资源成功加锁后,还可以向数据库申请对目标资源进行解锁。
当前节点向数据库中的目标资源申请加锁,在成功加锁后,当前节点还对访问目标资源的第一请求以及目标资源对应的资源锁的锁有效期进行监控,以确定是否向数据库发送针对目标资源的解锁请求。
在其中一个实施例中,当前节点可以对访问目标资源的第一请求进行监控。当检测到第一请求中断或结束时,表示访问目标资源的第一请求结束处理,例如发起第一请求的访问端在访问的过程中中断访问,或在访问的过程中退出访问。此时则满足解锁条件,当前节点则可以自动向数据库发送针对目标资源的解锁请求。
在其中一个实施例中,当前节点可以对目标资源对应的资源锁的锁有效期进行监控。当检测到该资源锁的锁有效期为已过期时,此时则满足解锁条件,当前节点则可以自动向数据库发送针对目标资源的解锁请求。
当满足解锁条件时,当前节点则立即向数据库发送与当前锁对应的解锁请求,并在数据库中查找与目标资源对应的资源锁。
当查找到数据库中存在当前节点对目标资源占用的资源锁时,表示此时数据库中的目标资源仍然被当前节点有效占用,数据库还会向当前节点反馈所查找到的目标资源的资源锁的锁版本信息。当前节点则继续向数据库发起携带有所查找到的锁版本信息的解锁请求,并基于解锁请求所携带的锁版本信息,对数据库中占用的与所携带的锁版本信息一周的资源锁进行删除。当对该资源锁的锁结构中的值删除成功时,当前节点则对目标资源的资源锁成功解锁。以便其他访问端可以继续对目标资源进行加锁访问。
当查找到数据库中存在非当前节点对目标资源占用的资源锁、且该资源锁为已过期时,表示此时数据库中的目标资源对应的资源锁已经失效,当前节点则直接确定当前节点对目标资源占用的资源锁解锁成功。
本实施例中,在满足解锁条件时,通过向数据库申请解锁,能够有效减少数据库中对目标资源的无效占用的资源锁,由此不会影响其他锁服务器节点抢占目标资源的资源锁,从而能够有效保证资源锁的调用方不会出现阻塞的问题,有效提高了加锁处理的效率。
在一个实施例中,在一个实施例中,如图7所示,为一个实施例中对数据库中的目标资源进行加锁处理的时序图。用户终端可以发起访问目标资源的第一请求至路由服务器,路由服务器接收到第一请求后,将第一请求转发至锁服务器集群中的其中一个锁服务器节点。获取到第一请求的锁服务器节点,即当前节点,则对第一请求进行响应,并从本地缓存中查找与目标资源对应的缓存锁。若在本地缓存中存在与目标资源对应的有效的缓存锁,则不向数据库发起针对目标资源的第二请求。若本地缓存中不存在有效的缓存锁,向数据库发起第二请求,即加锁请求,并在数据库中查找与目标资源对应的已存在的资源锁。若不存在,则直接根据第二请求对数据库中的目标资源进行加锁。
若存在,数据库则向当前节点返回资源锁的锁版本信息。当前节点则使第二请求携带所返回的锁版本信息,以向数据库申请加锁。数据库则检测其中的资源锁的锁结构中的节点标识、锁有效期以及锁版本信息,并根据节点标识、锁有效期以及锁版本信息判断当前是否满足加锁条件。若不满足加锁条件,则向当前节点返回加锁失败的结果。若满足加锁条件,则根据当前节点的节点标识、第二请求的请求时间,对数据库中对应的资源锁进行更新,以目标资源进行加锁。在加锁成功后,数据库则向当前节点返回更新后的资源锁。当前节点则向路由服务器返回加锁成功后的目标资源,以将加锁成功后的目标资源发送至用户终端。同时当前节点还根据所返回的更新后的资源锁生成对应的缓存锁并缓存在本地。
如图8所示,为一个实施例中对数据库中的目标资源进行加锁的流程图。具体地,当前节点向数据库发起加锁请求,根据加锁请求尝试往数据库中插入一条锁记录,并查询数据库中目标资源对应的资源锁。
若数据库中当前无锁,即当前不存在目标资源对应的资源锁,则直接根据加锁请求在资源锁的锁结构中插入对应的锁记录,则成功加锁。其中,锁记录包括当前节点的节点标识、基于该加锁请求确定的锁有效期以及自动更新的锁版本信息。
若数据库中当前有锁,即当前存在目标资源对应的资源锁,则进一步检查该资源锁的锁结构。具体地,首先检测资源锁的节点标识和锁有效期,确定该节点标识是否为自身,即确定资源锁的节点标识与当前节点的节点标识是否一致。若一致,则节点标识为自身;若不一致,则节点标识不为自身。
若节点标识为自身,则表示当前的目标资源对应的资源锁,是被当前节点所占用的。当前节点则可以直接根据加锁请求携带的锁版本信息,以及加锁请求的请求时间,更新目标资源的资源锁的锁有效期和锁版本信息,以继续对目标资源进行加锁。
若节点标识为自身且该资源锁未过期,则表示当前的目标资源对应的资源锁,已经被其他的非当前节点所占用的。当前节点则继续等待,并定时重试,即按照预设频率重新向数据库发起加锁请求。
若节点标识为自身且该资源锁已过期,则非当前节点对目标资源占用的资源锁已失效。当前节点此时则可以根据加锁请求携带的锁版本信息,以及加锁请求的请求时间,更新目标资源的资源锁的锁有效期和锁版本信息,以继续对目标资源进行加锁。其中,若锁请求携带的锁版本信息,与资源锁当前的锁版本信息不同,则表示资源锁已经被提前抢占,数据库则向当前节点返回加锁失败的结果,并定时重试,即按照预设频率重新向数据库发起加锁请求,以继续向数据库申请加锁。
在一个实施例中,如图9所示,为一个实施例中对数据库中的目标资源进行续锁的流程框图。当前节点在对数据库中的目标资源成功加锁后,若满足续锁条件,则向数据库发送针对目标资源的续锁请求。首先查询数据库中已存在的目标资源对应的资源锁的锁结构,若存在对应的资源锁,数据库则向当前节点返回所查询到的资源锁的锁版本信息。如果资源锁的锁结构中的节点标识不为自身,表示资源锁已经被非当前节点所抢占,此时则禁止续期,返回续锁失败的结果,续锁请求所对应的资源锁则自动失效。
若如果资源锁的锁结构中的节点标识为自身,表示资源锁仍然被当前节点占用,此时则可进行续锁操作。当前节点则使续锁请求携带查询到的锁版本信息,去更新数据库中的资源锁的锁有效期和锁版本信息,以对资源锁进行续锁。若更新失败,数据库则向当前节点返回续锁失败的结果,并定时重试,即按照预设频率重新向数据库发起续锁请求,以继续向数据库申请续锁。
在一个实施例中,如图10所示,为一个实施例中对数据库中的目标资源进行解锁的流程框图。当前节点在对数据库中的目标资源成功加锁后,若满足解锁条件,则向数据库发送针对目标资源的解锁请求。首先查询数据库中已存在的目标资源对应的资源锁的锁结构,若存在对应的资源锁,数据库则向当前节点返回所查询到的资源锁的锁版本信息。如果资源锁的节点标识不为自身且锁已过期,表示解锁请求所对应的资源锁已经失效,则可以直接确定当前节点对目标资源占用的资源锁解锁成功。
若如果资源锁的锁结构中的节点标识为自身,表示资源锁仍然被当前节点占用,此时则可进行解锁操作。当前节点则使解锁请求携带查询到的锁版本信息,去删除数据库中对应的资源锁,以对资源锁进行解锁。若删除失败,数据库则向当前节点返回解锁失败的结果,并定时重试,即按照预设频率重新向数据库发起解锁请求,以继续向数据库申请解锁。
本申请还提供一种应用场景,该应用场景应用上述的数据处理方法。具体地,该应用场景为物品秒杀场景,应用于业务系统。业务系统中包括用户终端、业务层服务器、锁服务器集群和数据库,锁服务器集群中包括多个锁服务器节点。其中,共享资源即为物品,物品可以是虚拟物品,也可以是实体物品。数据库中存储了共享资源的资源信息,每个共享资源具有对应的资源锁。
用户终端可以发起访问目标资源的第一请求至业务层服务器,业务层服务器则按照预设的分发策略将第一请求转发至锁服务器集群中的其中一个锁服务器节点。锁服务器节点接收到访问目标资源的第一请求后,则从本地缓存中查找与目标资源对应的缓存锁。若在本地缓存中存在与目标资源对应的有效的缓存锁,则不向数据库发起针对目标资源的第二请求。若本地缓存中不存在有效的缓存锁,向数据库发起第二请求。若数据库中存在与目标资源对应的资源锁,则基于资源锁的锁有效期以及第二请求对应的锁版本信息,对资源锁进行更新,以对目标资源进行加锁,以实现高效精准地对目标物品进行秒杀抢占。
本申请还提供另一种应用场景,该应用场景应用上述的数据处理方法。该应用场景为游戏场景,应用于游戏系统。该游戏场景具体可以为网络游戏或大型多人在线角色扮演游戏。
具体地,游戏系统中包括游戏客户端,即用户终端、游戏业务层服务器、锁服务器集群和数据库,锁服务器集群中包括多个锁服务器节点。其中,共享资源可以包括游戏场景中的虚拟物品、角色名称以及团体群组的虚拟货币。数据库中存储了共享资源的资源信息,每个共享资源具有对应的资源锁。
以大型多人在线角色扮演游戏为例,游戏系统中存在大量共享资源的读写请求。例如游戏角色取名系统,游戏运行前大量玩家用户需要进行创角取名。为了避免取名冲突,需要维护一个已用名字池的共享资源。为了保证名字的唯一性,必须保证取名逻辑的原子性,即大量玩家取同一名字时只允许一个玩家成功。
玩家用户可以通过对应的用户终端可以发起访问目标资源的第一请求至游戏业务层服务器,游戏业务层服务器则按照预设的分发策略将第一请求转发至锁服务器集群中的其中一个锁服务器节点。锁服务器节点接收到访问目标资源的第一请求后,则从本地缓存中查找与目标资源对应的缓存锁。若在本地缓存中存在与目标资源对应的有效的缓存锁,则不向数据库发起针对目标资源的第二请求。若本地缓存中不存在有效的缓存锁,向数据库发起第二请求。若数据库中存在与目标资源对应的资源锁,则基于资源锁的锁有效期以及第二请求对应的锁版本信息,对资源锁进行更新,从而对目标资源进行加锁,以实现高效精准地对目标共享资源进行抢占。
应该理解的是,虽然图3、图6流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图3、图6中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图11所示,提供了一种数据处理装置1100,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:第一请求处理模块1102、第二请求处理模块1104和加锁处理模块1106,其中:
第一请求处理模块1102,用于响应于访问目标资源的第一请求,从本地缓存中查找与目标资源对应的缓存锁;若在本地缓存中存在与目标资源对应的有效的缓存锁,则不向数据库发起针对目标资源的第二请求;第二请求,是用于对目标资源进行加锁的请求。
第二请求处理模块1104,用于若本地缓存中不存在有效的缓存锁,向数据库发起第二请求。
加锁处理模块1106,用于若数据库中存在与目标资源对应的资源锁,则基于资源锁的锁有效期以及第二请求对应的锁版本信息,对资源锁进行更新,以对目标资源进行加锁。
在一个实施例中,第一请求处理模块1102还用于根据第一请求中携带的目标资源的资源标识,从本地缓存中查找目标资源对应的缓存锁;缓存锁,是在当前节点向数据库请求加锁成功得到资源锁后,将资源锁在本地进行缓存得到的锁;当前节点,是响应于第一请求的锁服务器节点。
在一个实施例中,第一请求处理模块1102还用于当本地缓存中存在与目标资源对应的缓存锁时,则根据缓存锁的锁有效期,检测缓存锁的有效性;其中,缓存锁的锁有效期,小于数据库中用于占用目标资源的资源锁的锁有效期。
在一个实施例中,数据库中与目标资源对应的资源锁的锁结构为键值对结构;键值对结构中的键,为目标资源的资源标识;键值对结构中的值,包括锁服务器节点的节点标识、资源锁的锁有效期以及资源锁的锁版本信息;加锁处理模块1106还用于根据资源锁对应的节点标识和锁有效期,确定是否对资源锁进行更新;当确定需对资源锁进行更新时,根据第二请求对应的锁版本信息,对资源锁的键值对结构中的锁有效期以及锁版本信息进行更新,得到与资源标识对应的更新后的资源锁。
在一个实施例中,加锁处理模块1106还用于对资源锁的锁结构中的锁有效期进行更新,得到更新后的锁有效期;根据第二请求对应的锁版本信息,对资源锁的锁结构中锁版本信息的值进行增加,得到更新后的锁版本信息;根据当前节点的节点标识、更新后的锁版本信息和更新后的锁有效期,得到与资源标识对应的更新后的资源锁。
在一个实施例中,第二请求携带查找到的与目标资源对应的资源锁的锁版本信息;加锁处理模块1106还用于若数据库中存在当前节点针对目标资源占用的资源锁,则根据锁版本信息,对资源锁的锁有效期进行更新,以对目标资源进行加锁;若数据库中存在非当前节点针对目标资源占用的资源锁,则基于资源锁的锁有效期检测资源锁的有效性,根据资源锁的有效性检测结果以及锁版本信息对资源锁进行更新,以对目标资源进行加锁。
在一个实施例中,加锁处理模块1106还用于若有效性检测结果表征非当前节点针对目标资源占用的资源锁已过期,则删除过期的资源锁,并根据锁版本信息在数据库中插入当前节点用于占用目标资源的资源锁;若有效性检测结果表征非当前节点针对目标资源占用的资源锁处于有效状态,则重新向数据库发起第二请求,直到非当前节点针对目标资源占用的资源锁已过期时,删除过期的资源锁,并根据锁版本信息,在数据库中插入当前节点用于占用目标资源的资源锁。
在一个实施例中,加锁处理模块1106还用于若数据库中不存在对目标资源占用的资源锁,则根据第二请求对应的锁版本信息,在数据库中插入当前节点用于占用目标资源的资源锁,以对目标资源进行加锁。
在一个实施例中,上述数据处理装置还包括锁缓存模块,用于在当前节点对目标资源成功加锁后,得到成功加锁后的资源锁;根据成功加锁后的资源锁的锁有效期,确定资源锁对应的缓存锁的锁有效期;根据成功加锁后的资源锁对应的目标资源的资源标识、成功加锁后的资源锁的锁版本信息、以及缓存锁的锁有效期,生成与成功加锁后的资源锁对应的缓存锁;将缓存锁存储至当前节点的本地缓存中。
在一个实施例中,成功加锁后的资源锁的锁结构为键值对结构;键值对结构中的键,为目标资源的资源标识;键值对结构中的值,包括当前节点的节点标识、成功加锁后的资源锁的锁有效期以及成功加锁后的资源锁的锁版本信息;锁缓存模块还用于复制成功加锁后的资源锁,并将复制的成功加锁后的资源锁的锁结构中的锁有效期更新为缓存锁的锁有效期,得到与成功加锁后的资源锁对应的缓存锁。
在一个实施例中,上述数据处理装置还包括续锁处理模块,用于若满足续锁条件,则向数据库发送针对目标资源的续锁请求;若数据库中存在当前节点对目标资源占用的资源锁,则根据续锁请求携带的锁版本信息,对占用的资源锁的锁有效期进行更新,以对目标资源进行续锁。
在一个实施例中,上述数据处理装置还包括解锁处理模块,用于若满足解锁条件,则向数据库发送针对目标资源的解锁请求;若数据库中存在当前节点对目标资源占用的资源锁,则根据解锁请求的锁版本信息删除占用的资源锁,以进行解锁。
关于数据处理装置的具体限定可以参见上文中对于数据处理方法的限定,在此不再赘述。上述数据处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图12所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种数据处理方法。
本领域技术人员可以理解,图12中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (15)
1.一种数据处理方法,其特征在于,所述方法包括:
响应于访问目标资源的第一请求,从本地缓存中查找与所述目标资源对应的缓存锁;
若在所述本地缓存中存在与所述目标资源对应的有效的缓存锁,则不向数据库发起针对所述目标资源的第二请求;所述第二请求,是用于对所述目标资源进行加锁的请求;
若本地缓存中不存在所述有效的缓存锁,向所述数据库发起所述第二请求;
若所述数据库中存在与所述目标资源对应的资源锁,则基于所述资源锁的锁有效期以及所述第二请求对应的锁版本信息,对所述资源锁进行更新,以对所述目标资源进行加锁。
2.根据权利要求1所述的方法,其特征在于,所述从本地缓存中查找与所述目标资源对应的缓存锁,包括:
根据所述第一请求中携带的目标资源的资源标识,从本地缓存中查找所述目标资源对应的缓存锁;所述缓存锁,是在当前节点向数据库请求加锁成功得到资源锁后,将所述资源锁在本地进行缓存得到的锁;所述当前节点,是响应于所述第一请求的锁服务器节点。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当所述本地缓存中存在与所述目标资源对应的缓存锁时,则
根据所述缓存锁的锁有效期,检测所述缓存锁的有效性;其中,所述缓存锁的锁有效期,小于数据库中用于占用所述目标资源的资源锁的锁有效期。
4.根据权利要求1所述的方法,其特征在于,所述数据库中与所述目标资源对应的资源锁的锁结构为键值对结构;所述键值对结构中的键,为所述目标资源的资源标识;所述键值对结构中的值,包括锁服务器节点的节点标识、所述资源锁的锁有效期以及所述资源锁的锁版本信息;
所述基于所述资源锁的锁有效期以及所述第二请求对应的锁版本信息,对所述资源锁进行更新,以对所述目标资源进行加锁,包括:
根据所述资源锁对应的节点标识和锁有效期,确定是否对所述资源锁进行更新;
当确定需对所述资源锁进行更新时,根据所述第二请求对应的锁版本信息,对所述资源锁的键值对结构中的锁有效期以及锁版本信息进行更新,得到与所述资源标识对应的更新后的资源锁。
5.根据权利要求4所述的方法,其特征在于,所述根据所述第二请求对应的锁版本信息,对所述资源锁的键值对结构中的锁有效期以及锁版本信息进行更新,得到与所述资源标识对应的更新后的资源锁,包括:
对所述资源锁的锁结构中的锁有效期进行更新,得到更新后的锁有效期;
根据所述第二请求对应的锁版本信息,对所述资源锁的锁结构中锁版本信息的值进行增加,得到更新后的锁版本信息;
根据当前节点的节点标识、更新后的锁版本信息和更新后的锁有效期,得到与所述资源标识对应的更新后的资源锁。
6.根据权利要求1所述的方法,其特征在于,所述第二请求携带查找到的与所述目标资源对应的资源锁的锁版本信息;所述若所述数据库中存在与所述目标资源对应的资源锁,则基于所述资源锁的锁有效期以及所述第二请求对应的锁版本信息,对所述资源锁进行更新,以对所述目标资源进行加锁,包括:
若所述数据库中存在当前节点针对所述目标资源占用的资源锁,则根据所述锁版本信息,对所述资源锁的锁有效期进行更新,以对所述目标资源进行加锁;
若所述数据库中存在非当前节点针对所述目标资源占用的资源锁,则基于所述资源锁的锁有效期检测所述资源锁的有效性,根据所述资源锁的有效性检测结果以及所述锁版本信息对所述资源锁进行更新,以对所述目标资源进行加锁。
7.根据权利要求6所述的方法,其特征在于,所述根据所述资源锁的有效性检测结果以及所述锁版本信息对所述资源锁进行更新,以对所述目标资源进行加锁,包括:
若所述有效性检测结果表征所述非当前节点针对所述目标资源占用的资源锁已过期,则删除过期的所述资源锁,并根据所述锁版本信息在所述数据库中插入所述当前节点用于占用所述目标资源的资源锁;
若所述有效性检测结果表征所述非当前节点针对所述目标资源占用的资源锁处于有效状态,则重新向所述数据库发起所述第二请求,直到所述非当前节点针对所述目标资源占用的资源锁已过期时,删除过期的所述资源锁,并根据所述锁版本信息,在所述数据库中插入所述当前节点用于占用所述目标资源的资源锁。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若所述数据库中不存在对所述目标资源占用的资源锁,则
根据所述第二请求对应的锁版本信息,在所述数据库中插入当前节点用于占用所述目标资源的资源锁,以对所述目标资源进行加锁。
9.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在当前节点对所述目标资源成功加锁后,得到成功加锁后的资源锁;
根据成功加锁后的资源锁的锁有效期,确定所述资源锁对应的缓存锁的锁有效期;
根据成功加锁后的资源锁对应的所述目标资源的资源标识、所述成功加锁后的资源锁的锁版本信息、以及所述缓存锁的锁有效期,生成与成功加锁后的资源锁对应的缓存锁;
将所述缓存锁存储至当前节点的所述本地缓存中。
10.根据权利要求9所述的方法,其特征在于,所述成功加锁后的资源锁的锁结构为键值对结构;所述键值对结构中的键,为所述目标资源的资源标识;所述键值对结构中的值,包括所述当前节点的节点标识、所述成功加锁后的资源锁的锁有效期以及所述成功加锁后的资源锁的锁版本信息;
所述根据成功加锁后的资源锁对应的所述目标资源的资源标识、所述成功加锁后的资源锁的锁版本信息、以及所述缓存锁的锁有效期,生成与成功加锁后的资源锁对应的缓存锁,包括:
复制所述成功加锁后的资源锁,并将复制的所述成功加锁后的资源锁的锁结构中的锁有效期更新为所述缓存锁的锁有效期,得到与成功加锁后的资源锁对应的缓存锁。
11.根据权利要求1至10任意一项所述的方法,其特征在于,所述方法还包括:
若满足续锁条件,则向所述数据库发送针对所述目标资源的续锁请求;
若所述数据库中存在当前节点对所述目标资源占用的资源锁,则根据所述续锁请求携带的锁版本信息,对占用的所述资源锁的锁有效期进行更新,以对所述目标资源进行续锁。
12.根据权利要求1至10任意一项所述的方法,其特征在于,所述方法还包括:
若满足解锁条件,则向所述数据库发送针对所述目标资源的解锁请求;
若所述数据库中存在当前节点对所述目标资源占用的资源锁,则根据所述解锁请求的锁版本信息删除占用的所述资源锁,以进行解锁。
13.一种数据处理装置,其特征在于,所述装置包括:
第一请求处理模块,用于响应于访问目标资源的第一请求,从本地缓存中查找与所述目标资源对应的缓存锁;若在所述本地缓存中存在与所述目标资源对应的有效的缓存锁,则不向数据库发起针对所述目标资源的第二请求;所述第二请求,是用于对所述目标资源进行加锁的请求;
第二请求处理模块,用于若本地缓存中不存在所述有效的缓存锁,向所述数据库发起所述第二请求;
加锁处理模块,用于若所述数据库中存在与所述目标资源对应的资源锁,则基于所述资源锁的锁有效期以及所述第二请求对应的锁版本信息,对所述资源锁进行更新,以对所述目标资源进行加锁。
14.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至12中任一项所述的方法的步骤。
15.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至12中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110739064.3A CN113448976B (zh) | 2021-06-30 | 2021-06-30 | 数据处理方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110739064.3A CN113448976B (zh) | 2021-06-30 | 2021-06-30 | 数据处理方法、装置、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113448976A true CN113448976A (zh) | 2021-09-28 |
CN113448976B CN113448976B (zh) | 2023-08-15 |
Family
ID=77814482
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110739064.3A Active CN113448976B (zh) | 2021-06-30 | 2021-06-30 | 数据处理方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113448976B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114327691A (zh) * | 2021-12-10 | 2022-04-12 | 北京五八信息技术有限公司 | 应用程序处理方法、装置、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150169497A1 (en) * | 2013-12-12 | 2015-06-18 | International Business Machines Corporation | Efficient Distributed Cache Consistency |
CN108319496A (zh) * | 2017-01-18 | 2018-07-24 | 阿里巴巴集团控股有限公司 | 资源访问方法、业务服务器、分布式系统及存储介质 |
CN112099961A (zh) * | 2020-09-21 | 2020-12-18 | 天津神舟通用数据技术有限公司 | 一种基于锁状态缓存的分布式锁管理器的实现方法 |
-
2021
- 2021-06-30 CN CN202110739064.3A patent/CN113448976B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150169497A1 (en) * | 2013-12-12 | 2015-06-18 | International Business Machines Corporation | Efficient Distributed Cache Consistency |
CN108319496A (zh) * | 2017-01-18 | 2018-07-24 | 阿里巴巴集团控股有限公司 | 资源访问方法、业务服务器、分布式系统及存储介质 |
CN112099961A (zh) * | 2020-09-21 | 2020-12-18 | 天津神舟通用数据技术有限公司 | 一种基于锁状态缓存的分布式锁管理器的实现方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114327691A (zh) * | 2021-12-10 | 2022-04-12 | 北京五八信息技术有限公司 | 应用程序处理方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113448976B (zh) | 2023-08-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9218299B2 (en) | Recovering data segment contents in a distributed shared memory | |
US11074661B2 (en) | Transaction processing method, apparatus, and electronic device using a blockchain having nonce records | |
CN109547512B (zh) | 一种基于NoSQL的分布式Session管理的方法及装置 | |
US7996360B2 (en) | Coordinating updates to replicated data | |
CN112162846B (zh) | 事务处理方法、设备及计算机可读存储介质 | |
US20060123121A1 (en) | System and method for service session management | |
CN112052264B (zh) | 业务数据查询方法、装置、电子设备及可读存储介质 | |
KR20140064850A (ko) | 클러스터화된 클라이언트 페일오버 | |
US10270759B1 (en) | Fine grained container security | |
KR102121157B1 (ko) | 동시 블록체인 트랜잭션 실패를 해결하기 위한 넌스 테이블의 이용 | |
US20090100436A1 (en) | Partitioning system including a generic partitioning manager for partitioning resources | |
CN113448976B (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
US11741081B2 (en) | Method and system for data handling | |
US11138231B2 (en) | Method and system for data handling | |
US11940976B2 (en) | Technique for concurrency control | |
EP3686751A1 (en) | Method and system for data handling | |
CN115185972B (zh) | 一种数字对象的存证副本的管理方法与装置 | |
CN111522649A (zh) | 一种分布式任务分配方法、装置和系统 | |
CN114579514B (zh) | 一种基于多计算节点的文件处理方法、装置及设备 | |
US20220004533A1 (en) | Technique for concurrency control | |
CN116132453A (zh) | 一种网络服务间的数据同步方法及设备 | |
CN111756578A (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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40052796 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |