分布式锁的实现方法和装置
技术领域
本说明书一个或多个实施例涉及计算机技术领域,尤其涉及通过计算机在分布式系统中对数据库进行加锁的方法和装置。
背景技术
分布式架构是分布在多个处理器运行或分布在多个存储器存储的架构方式。许多大型服务器都通过分布式架构实现。分布式系统之间的数据一致性,是一个重要问题。通常,通过保证在同一时间一个方法只能被一个线程执行来保证数据的一致性。
为了保证同一时间一个方法只能被一个线程执行,常规技术提供了分布式锁的方法,用于保证同一个方法在同一时间被一个线程锁定。常用的分布式锁有基于数据库锁表、基于数据库排他锁、基于缓存分布式锁等。这些技术有的可能不能适应高并发的情况、有的可能因为解锁失败或分布式锁时效影响业务、有的可能将行级锁变成表锁而存在高风险。
因此,希望能有改进的方案,提供稳定的分布式锁方式,能够适应高并发情况,提高分布式系统的有效性。
发明内容
本说明书一个或多个实施例描述了一种分布式锁的实现方法和装置,针对多个用户的业务请求,先通过分布的虚拟机锁在锁定对象的维度上对业务请求进行过滤,针对虚拟机锁过滤后的业务请求,再进一步通过数据库锁从锁定对象的维度保证在同一时间,针对锁定对象的业务只能被一个线程执行,既能适应高并发的业务请求,又能保证系统的稳定性,从而可以提高分布式系统的有效性。
根据第一方面,提供了一种分布式锁的实现方法,所述方法包括:接收第一用户针对第一业务发起的业务请求;根据所述业务请求获取第一虚拟机锁,其中,所述第一虚拟机锁与预设的锁定对象唯一对应,所述锁定对象包括以下一项或多项:所述第一用户、所述第一业务;在获取到所述第一虚拟机锁的情况下,针对所述锁定对象创建数据库锁,以根据所述业务请求对所述数据库进行与所述锁定对象相关的数据操作。
在一些实施例中,根据所述业务请求获取第一虚拟机锁包括:从第一线程的线程变量中查询第一虚拟机锁对应的第一锁变量,其中,所述第一线程是基于所述业务请求而创建,用于完成所述第一业务,所述第一线程维护至少一个线程变量,所述第一锁变量是与所述锁定对象唯一对应的、至多允许一个线程获取的互斥量,所述第一锁变量在加锁成功的情况下,被添加到所述第一线程的线程变量;在从所述线程变量中查询到所述第一锁变量的情况下,确定获取到所述第一虚拟机锁。
在一些实施例中,所述根据所述业务请求获取第一虚拟机锁还包括:在从所述线程变量中查询不到所述第一锁变量的情况下,查询锁变量集中是否记录有所述第一锁变量,其中,所述锁变量集用于记录当前存在的各个锁变量以及各个锁变量的使用状态;在所述锁变量集记录有所述第一锁变量的情况下,检测所述第一锁变量是否被第二线程锁定;在所述第一锁变量没有被第二线程锁定的情况下,对所述第一锁变量加锁以获取所述第一虚拟机锁,并响应于加锁成功,将所述第一锁变量添加到所述第一线程的线程变量,以及确定获取到所述第一虚拟机锁。
在一些实施例中,在所述第一锁变量被第二线程锁定的情况下,确定获取所述第一锁变量失败,从而确定获取所述第一虚拟机锁失败。
在一些实施例中,在从所述锁变量集查询不到所述第一锁变量的情况下,创建所述第一锁变量,并将所述第一锁变量添加到所述锁变量集;对所述第一锁变量加锁以获取所述第一虚拟机锁;在对所述第一锁变量加锁成功的情况下,更新所述锁变量集中所述第一锁变量的使用状态,并将所述第一锁变量添加到所述第一线程的线程变量,以及确定获取到所述第一虚拟机锁。
在一些实施例中,在获取所述第一虚拟机锁失败的情况下:释放所述第一线程;或者,将所述第一线程确定为所述第一虚拟机锁的等待线程。
在一些实施例中,在所述第一线程结束时,从所述第一线程的线程变量中获取所述第一锁变量以进行解锁,并将所述第一锁变量从所述第一线程的线程变量中移除。
在一些实施例中,所述将所述第一锁变量从所述线程变量中移除包括:将所述第一锁变量从所述第一线程的线程变量中移入所述锁变量集。
在一些实施例中,所述针对所述锁定对象创建数据库锁包括:向数据库插入第一锁数据,所述第一锁数据包含所述锁定对象的目标标识,以锁定与所述锁定对象对应的第一数据,并基于所述第一数据进行与所述锁定对象相关的数据操作。
在一些实施例中,所述方法还包括:在所述数据操作完成的情况下,删除所述第一锁数据。
在一些实施例中,所述方法还包括:在删除所述第一锁数据失败的情况下,通过按照预定时间间隔执行的定时任务对所述第一锁数据进行清理,其中,所述定时任务用于清理所述数据库中超过预定时长的锁数据记录。
根据第二方面,提供一种分布式锁的实现装置,所述装置包括:接收单元,配置为接收第一用户针对第一业务发起的业务请求;第一加锁单元,配置为根据所述业务请求获取第一虚拟机锁,其中,所述第一虚拟机锁与预设的锁定对象唯一对应,所述锁定对象包括以下一项或多项:所述第一用户、所述第一业务;第二加锁单元,配置为在获取到所述第一虚拟机锁的情况下,针对所述锁定对象创建数据库锁,以根据所述业务请求对所述数据库进行与所述锁定对象相关的数据操作。
根据第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面的方法。
根据第四方面,提供了一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面的方法。
通过本说明书实施例提供的分布式锁的实现方法、装置及系统,在分布式锁的实现中,一方面,对于多个用户针对各个业务的业务请求,先将业务和/或用户作为锁定对象,通过第一虚拟机锁进行过滤,且在每个虚拟机内部,锁定对象与虚拟机锁唯一对应,从而通过分布的虚拟机锁从各个业务请求中针对一个锁定对象过滤出至多一个业务请求,大大减少竞争数据库锁的并发量;另一方面,对多个虚拟机过滤出的业务请求,进一步通过数据库锁竞争机制,保证在同一时间针对同一个锁定对象只能有一个业务请求进行数据库操作,满足预定的业务规则。如此,既能适应高并发的业务请求,又能保证系统的稳定性,从而可以提高分布式系统的有效性。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1示出本说明书实施例的实施架构示意图;
图2示出根据一个实施例的分布式锁的实现方法的流程图;
图3示出一个具体例子中一个业务请求获取第一虚拟机锁的流程图;
图4示出一个具体例子中,针对一个业务请求获取数据库锁的流程图;
图5示出根据一个实施例的分布式锁的实现装置的示意性框图。
具体实施方式
下面结合附图,对本说明书提供的方案进行描述。
图1是本说明书实施例的一个实施架构示意图。在该实施架构中,服务在n台虚拟机上分布式部署。这n台虚拟机可以运行在相同的物理设备上,也可以分别运行在不同的设备上。多个用户的业务请求被随机分配至n台虚拟机。如图1所示,每台虚拟机被分配不同数量的业务请求。对每台虚拟机而言,可以针对不同的锁定对象设定不同的虚拟机锁,并且每个虚拟机锁唯一对应一个锁定对象。其中的锁定对象可以根据具体业务场景下预设的业务需求确定,其可以是用户(一个用户对应一个虚拟机锁),也可以是业务(一个业务对应一个虚拟机锁),还可以是用户和业务(一个用户的一个业务对应一个虚拟机锁)。例如,在用户与金融服务器签约,签约协议有多个(对应多个业务)的场景下,锁定对象可以是用户,这样,一个用户同一时间只能与服务器进行一个签约协议的签约,锁定对象也可以是业务(如一个业务对应其中一个签约协议),这样,服务器同一时间对一个签约协议只能与一个用户进行签约。
如此,对于每台虚拟机接收的业务请求,针对每个锁定对象只发放一个虚拟机锁,也就是说,相同的锁定对象只有一个业务线程可以得到虚拟机锁,通过虚拟机锁进入下一步骤。这样,对于一个锁定对象而言,在同一时刻,每个虚拟机至多过滤出一个业务请求(业务线程),n台虚拟机至多过滤出n个业务请求(对应n个业务线程)。
进一步地,在同一时刻,对于同一个锁定对象而言,至多n个业务线程向数据库请求数据库锁,且有一个业务线程请求数据库锁成功,保证在同一时间只能有一个线程锁定上述锁定对象对应的数据。这样使得同一数据库锁的最大并发数量为n,大大减少了数据库锁的并发请求。再者,由于虚拟机锁分布在多个虚拟机上,也保证了系统的稳定性,可更好地适应高并发情况。下面具体描述分布式锁的实现过程。
图2示出根据一个实施例的分布式锁的实现方法流程图。其中,图2示出的方法的执行主体例如是图1中的虚拟机。该虚拟机可以是提供分布式服务的n台虚拟机中的任意一台。如图2所示,分布式锁的实现方法包括以下步骤:步骤21,接收第一用户针对第一业务发起的业务请求;步骤22,根据业务请求获取第一虚拟机锁,其中,第一虚拟机锁与预设的锁定对象唯一对应,锁定对象包括以下一项或多项:第一用户、第一业务;步骤23,在获取到第一虚拟机锁的情况下,针对锁定对象创建数据库锁,以根据业务请求对数据库进行与锁定对象相关的数据操作。
首先,在步骤21中,接收第一用户针对第一业务发起的业务请求。可以理解,这里的第一用户、第一业务中的“第一”并不表示特指,而是泛指某一、任一。第一用户和第一业务也不表示对应关系,也就是说,第一用户请求的可以是第一业务,也可以是第二业务,等等。同理,第一用户可以请求第一业务,第二用户、第三用户……也可以请求第一业务。用户可以是虚拟机所服务的客户端用户,不同的用户通过登录设备、账户(user ID)等进行区分。在前述的用户与金融服务器签约的例子中,第一业务例如可以是与金融服务器中某个签约协议进行签约等等业务中的任一业务,在此不做限定。
如图1所示,多个用户向服务端发送业务请求时,业务请求可能被随机分配至各个虚拟机。在本步骤中,某个用户(第一用户)针对某个业务(第一业务)的业务请求被分配至作为本实施例执行主体的虚拟机。虚拟机可以直接接收第一用户的该业务请求,也可以经过设在n台虚拟机之前的分配服务器接收第一用户的该业务请求,在此不做限定。
接着,通过步骤22,根据业务请求获取第一虚拟机锁。这是为了过滤出针对预设的锁定对象的唯一业务请求,其中,第一虚拟机锁与预设的锁定对象唯一对应。也就是说,一台虚拟机针对同一锁定对象,至多给出一把虚拟机锁,获得这把虚拟机锁的业务请求才能继续后续操作。这样,可以保证同一时间,一台虚拟机对一个锁定对象至多允许一个业务请求通过。其中,锁定对象可以理解为虚拟机锁锁定数据时所针对的对象。在本实施例中,锁定对象可以是上述第一用户,也可以是第一业务,在此不做限定。
实际应用中,虚拟机在接收到业务请求时,可以创建一个线程,用于处理对应的业务。其中,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程只拥有在运行中必不可少的少量资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。在对应的业务处理完毕的情况下,线程就会结束。针对任一个业务请求,都可以创建相应的线程。例如,在当前时刻,用户A针对第一业务发起业务请求,可以根据用户A的业务请求创建第一业务的线程a,用户B也针对第一业务发起业务请求,可以根据用户B的业务请求创建第一业务的线程b,且线程a和线程b相互独立。
相应地,在一个实施例中,针对第一用户的第一业务创建的第一线程,可以基于相应的业务请求而创建,用于完成该第一用户的第一业务。第一进程可以维护至少一个线程变量,作为必要资源。第一锁变量可以是预先指定的互斥量,该互斥量与锁定对象唯一对应,且至多允许一个线程获取。举例而言:如果锁定对象为用户,那么同一个用户的业务线程中,在一台虚拟机内部同一时刻只有一个线程可以获取虚拟机锁;如果锁定对象为业务,那么同一个业务的业务线程中,在一台虚拟机内部同一时刻只有一个线程可以获取虚拟机锁;等等。
可以理解,虚拟机锁是个形象的说法,其实际可能是通过变量实现的。例如针对一个业务可以指定一个锁变量,获取虚拟机锁就意味着获取相应的锁变量。而获取锁变量,可以通过诸如在被允许使用锁变量的情况下,将锁变量加锁的方法实现。锁变量被加锁成功之后,还可以被添加到相应的业务线程,以供该业务线程重复使用该虚拟机锁时,可以从业务线程中确定当前线程是否拥有相应的虚拟机锁,或者释放虚拟机锁(对锁变量进行解锁)时,从当前业务线程中获取锁变量并进行解锁。
具体地,为了使锁变量同一时间至多允许一个线程获取,一台虚拟机可以通过一个统一的锁变量集来管理各个业务对应的锁变量。该锁变量集可以记录各个业务对应的锁变量是否创建,以及已创建的锁变量的使用状态,即是否被其他线程获取。锁变量集可以通过各种锁变量标识(ID)来记录锁变量。该使用状态例如可以通过标志位等来记录,例如1表示被其他线程锁定,0表示未被其他线程锁定。锁变量集可以通过列表、集合等各种合理方式实现,在此不做限定。可选地,锁变量集可以利用虚拟机的公共容器“ConcurrentReferenceHashMap”实现。“ConcurrentReferenceHashMap”中,各个锁变量对应的接口“Entry”,在实现过程中可以通过“Weak Reference”(弱引用)的方式,以便锁变量在预定时间内没有被任何线程使用时及时被清理掉。
在这样的前提下,根据一个可能的设计,针对第一用户关于第一业务的业务请求,可以在针对第一虚拟机锁对应的锁变量加锁成功后,将第一锁变量作为第一线程的线程变量记录,以便下次使用时从第一线程获取第一虚拟机锁,用于在一次业务中重复使用或进行解锁。第一锁变量被解锁之后,还可以重新将第一锁变量释放到锁变量集,以供其他线程使用。例如前述的用户与金融服务器签约的例子中,锁定对象为用户,第一用户与X签约协议的业务请求对应的线程对针对第一用户的第一虚拟机锁使用完毕后,放入锁变量集,之后第一用户与Y签约协议的业务请求对应的线程可以获取该第一虚拟机锁,完成第一用户与Y签约协议的签约业务。
如此,在实际使用时,如图3所示,在第一线程需要虚拟机锁时,可以先从第一线程的线程变量中查询第一虚拟机锁的第一锁变量,如果第一线程的线程变量中存在第一锁变量,则表明第一线程已成功获取第一虚拟机锁。
继续参考图3。另一方面,在第一线程的线程变量中不存在第一锁变量的情况下,根据一个实施例,还可以进一步查询锁变量集中是否记录有该第一锁变量。如果锁变量集记录有该第一锁变量,再进一步检测其是否被其他线程,例如第二线程锁定。如果没有,则获取第一锁变量对其加锁。在一个具体实现中,该加锁过程例如可以通过“TryLock”方法实现,并可以具体为诸如synchronized、reentrantlock之类的形式,在此不再赘述。响应于对第一锁变量加锁成功,可以进一步将第一锁变量添加到第一线程的线程变量中,并确定为第一线程获取到第一虚拟机锁。
可以理解,在锁变量集记录有第一锁变量的情况下,第一锁变量还可能被第二线程锁定。因此,在另一个实施例中,如图3所示,如果第一锁变量的使用状态为被第二线程锁定,则可以确定获取第一锁变量失败,从而确定为第一用户获取第一虚拟机锁失败。此时,可以让第一线程继续等待获取第一虚拟机锁,也可以将第一线程“挂起”,等待被唤醒,还可以将第一线程释放,在此不做限定。
如图3所示,在一些实施例中,还可能在锁变量集中查询不到第一锁变量。也就是说,针对该锁定对象,暂时没有线程使用第一虚拟机锁。此时,可以针对该锁定对象创建第一锁变量,并加入锁变量集。接着,还可以令当前线程,即第一线程,试图将第一锁变量加锁。如果加锁成功,则可以在锁变量集中更新第一锁变量的使用状态,如更新为被锁定。另外,还可以将第一锁变量添加到第一线程的线程变量,并确定第一线程获取第一虚拟机锁。也可以理解为,针对第一用户的业务请求,将第一虚拟机锁分配给第一业务。如果加锁失败,则确定获取第一虚拟机锁失败,可以让第一线程继续等待获取第一虚拟机锁,也可以将第一线程“挂起”,等待被唤醒,还可以将第一线程释放,在此不做限定。
进一步地,如果获取第一虚拟机锁成功,在第一线程结束时,即上述业务请求处理完毕的情况下,可以再次从第一线程的线程变量中获取第一锁变量,对第一锁变量解锁,并将第一锁变量从线程变量中移除。从而,完成第一线程对第一虚拟机锁的解锁过程。如此,可以及时释放第一锁变量,以供其他线程获取。可选地,可以将第一锁变量放回锁变量集,并将锁变量集中第一锁变量的使用状态修改为“未锁定”。
如图1所示,本说明书实施例的实施架构中,为各个业务请求分配虚拟机锁,是为了对同一锁定对象的各个业务请求进行初步过滤,允许有限数量的业务请求继续后续流程,降低数据库的高并发度,以及高并发导致的各种风险,保持系统的稳定性。那么,在接下来的步骤23中,在获取到第一虚拟机锁的情况下,还可以针对锁定对象创建数据库锁,以根据业务请求对数据库进行与锁定对象相关的数据操作。如果将步骤22中获取虚拟机锁的过程理解为本实施例的执行主体(如图1示出的任一台虚拟机),内部的资源分配或竞争,那么本步骤23中获取数据库锁的过程则可以理解为各个执行主体(如图1所示的各台虚拟机)之间的资源分配或竞争。
如图4所示,根据一个实施方式,可以针对第一用户向数据库插入一条锁数据。这里,称该所数据为第一锁数据。其中,该第一锁数据可以包含与锁定对象(第一用户或第一业务)唯一对应的目标标识,如用户标识(user ID)等。如此,可以锁定数据库中与该第一用户相关的第一数据。以便基于第一数据进行与锁定对象相关的操作,例如,前述的用户与金融服务器签约的例子中,与锁定对象用户A相关的数据操作——用户A与金融服务器进行的签约协议签约操作。
进一步地,在一个实施例中,数据操作完成,可以删除该第一锁数据。在具体实现中,第一锁数据还可能删除失败。因此,还可以设定与业务请求无关的定时任务,按照预定时间间隔清理插入数据库超过预定时长的锁数据。例如,定时任务每分钟执行一次,清理插入数据库超过1分钟的锁数据,也就是说,每次定时任务清理在上次定时任务进行之前插入数据库的锁数据。如此,可以避免解锁失败导致的数据丢失或后续业务的失败。
回顾以上过程,在分布式锁的实现中,一方面,对于多个用户针对第一业务的业务请求,先针对锁定对象获取第一虚拟机锁,且在每个虚拟机内部,锁定对象与第一虚拟机锁唯一对应,可以通过分布的虚拟机锁在锁定对象维度对业务请求进行过滤,从而减少数据库的并发量;另一方面,对多个虚拟机过滤出的业务请求,进一步通过数据库锁竞争机制,从锁定对象维度进行过滤,以保证在同一时间针对同一个锁定对象只能有一个业务请求进行数据库操作。如此,既能适应高并发的业务请求,又能保证系统的稳定性,从而可以提高分布式系统的有效性。
根据另一方面的实施例,还提供一种分布式锁的实现装置,适用于图1所示的各个虚拟机。图5示出根据一个实施例的分布式锁的实现示意性框图。如图5所示,分布式锁的实现装置500包括:接收单元51,配置为接收第一用户针对第一业务发起的业务请求;第一加锁单元52,配置为根据业务请求获取第一虚拟机锁,其中,第一虚拟机锁与预设的锁定对象唯一对应,锁定对象包括以下一项或多项:第一用户、第一业务;第二加锁单元53,配置为在获取到第一虚拟机锁的情况下,针对锁定对象创建数据库锁,以根据业务请求对数据库进行与锁定对象相关的数据操作。
根据一个实施方式,第一加锁单元52进一步可以配置为:
从第一线程的线程变量中查询第一虚拟机锁对应的第一锁变量,在从线程变量中查询到第一锁变量的情况下,确定获取到第一虚拟机锁。
其中,第一线程是基于业务请求而创建,用于完成上述第一业务。第一线程可以维护至少一个线程变量。第一锁变量是与锁定对象唯一对应的、至多允许一个线程获取的互斥量。第一锁变量在加锁成功的情况下,被添加到第一线程的线程变量。一个线程对该第一锁变量加锁成功,意味着获取到第一虚拟机锁。
进一步地,在一个实施例中,第一加锁单元52还可以配置为:
在从线程变量中查询不到第一锁变量的情况下,查询锁变量集中是否记录有第一锁变量,若是,检测第一锁变量是否被第二线程锁定,并在第一锁变量没有被第二线程锁定的情况下,对第一锁变量加锁以获取第一虚拟机锁。响应于对第一锁变量加锁成功,可以将第一锁变量添加到第一线程的线程变量,并确定获取到第一虚拟机锁。
其中,上述锁变量集用于记录当前存在的各个锁变量以及各个锁变量的使用状态。
在另一方面的实施例中,在第一锁变量被第二线程锁定的情况下,第一加锁单元52还可以确定获取第一锁变量失败,从而获取第一虚拟机锁失败。
在又一方面的实施例中,在从锁变量集查询不到第一锁变量的情况下,第一加锁单元52还可以创建第一锁变量,并将第一锁变量添加到锁变量集,然后对锁变量加锁以获取第一虚拟机锁。在对第一锁变量加锁成功的情况下,第一加锁单元52还可以更新锁变量集中第一锁变量的使用状态,并将第一锁变量添加到第一线程的线程变量。这也意味着,第一线程获取到所述第一虚拟机锁。
在进一步的实施例中,如果获取第一虚拟机锁失败,第一加锁单元52还可以:释放第一线程,或者将第一线程确定为第一虚拟机锁的等待线程,在此不做限定。
在一个可能的设计中,在所述第一线程结束时,第一加锁单元52还可以从第一线程的线程变量中获取第一锁变量进行解锁,并将第一锁变量从第一线程的线程变量中移除。可选地,第一加锁单元52可以将第一锁变量从第一线程的线程变量中移入锁变量集。
根据一种实施方式,第二加锁单元53还可以配置为:向数据库插入第一锁数据,其中,第一锁数据包含锁定对象的目标标识,以锁定与锁定对象对应的第一数据,并基于第一数据进行与锁定对象相关的数据操作。
在一个实施例中,在数据操作完成的情况下,第二加锁单元53可以删除第一锁数据,已完成数据锁的解锁。
在进一步的实施例中,装置500还可以包括清理单元(未示出),可以配置为:按照预定时间间隔执行的定时任务对数据库中的、超过预定时长的锁数据记录进行清理。如此,在删除第一锁数据失败的情况下,还可以通过定时任务清理第一锁数据。
值得说明的是,图5所示的装置500是与图2示出的方法实施例相对应的装置实施例,图2示出的方法实施例中的相应描述同样适用于装置500,在此不再赘述。
通过以上装置,针对多个用户的业务请求,先通过分布的虚拟机锁对业务请求进行过滤,针对虚拟机锁过滤后的业务请求,再进一步通过数据库锁保证在同一时间同一个锁定对象的数据只能被一个业务请求进行操作,既能适应高并发的业务请求,又能保证系统的稳定性,从而可以提高分布式系统的有效性。
如此,根据本说明书的实施例,可以提供一种分布式锁的实现系统。该分布式锁的实现系统请参考图1所示。该系统可以包括多个图5示出的装置,每个装置可以设于图1所示的一台虚拟机中。各个装置可以分别配置为:接收多个用户针对各个业务发起的业务请求;根据业务请求确定获取到虚拟机锁的各个业务请求,其中,各个虚拟机锁与各个预设的锁定对象唯一对应,所述锁定对象包括,各个用户和/或各个业务;针对获取到虚拟机锁的各个业务请求,分别获取针对各个锁定对象的数据库锁,以根据获取到数据库锁的业务请求对数据库进行相关的数据操作。其中,各个数据库锁与各个锁定对象唯一对应。如此,对于同一锁定对象,在同一时间只能获取一把数据库锁。
根据另一方面的实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行结合图2所描述的方法。
根据再一方面的实施例,还提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现结合图2所述的方法。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。