CN114817287A - 电力数据访问冲突处理方法、装置和计算机设备 - Google Patents
电力数据访问冲突处理方法、装置和计算机设备 Download PDFInfo
- Publication number
- CN114817287A CN114817287A CN202210496289.5A CN202210496289A CN114817287A CN 114817287 A CN114817287 A CN 114817287A CN 202210496289 A CN202210496289 A CN 202210496289A CN 114817287 A CN114817287 A CN 114817287A
- Authority
- CN
- China
- Prior art keywords
- locking
- power data
- data table
- electric power
- lock
- 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.)
- Pending
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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/547—Messaging middleware
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Power Sources (AREA)
Abstract
本申请涉及一种电力数据访问冲突处理方法、装置、计算机设备和存储介质。通过电力系统中的执行器接收到对待处理电力数据表的处理指令时,若检测到基于待处理电力数据表的不包括执行器的第一标识的第二锁定密钥时,检测第二锁定密钥的释放信息;当检测到时向分布式缓存中间件发送请求信息包含第一标识、待处理电力数据表的表标识以及锁生存时间的第一加锁请求,从而分布式缓存中间件根据第一加锁请求生成包含第一标识、表标识和锁生存时间的第一锁定密钥并对待处理电力数据表加锁。相较于传统的无法对并发的电力数据表访问请求进行冲突处理,本方案利用分布式缓存中间件以及引入锁机制,实现防止多个进程访问同一电力数据时产生的冲突事件的效果。
Description
技术领域
本申请涉及数据处理技术领域,特别是涉及一种电力数据访问冲突处理方法、装置、计算机设备和存储介质。
背景技术
电力系统中会不断产生电力数据,电力数据具有数据量大、数据类型多、变更频繁和实时分析的时效性高等特征,而电力系统中的各个进程需要对电力数据进行访问,包括读写等操作。当多个进程对同一个电力数据进行访问时,会产生访问冲突事件。
因此,如何对多个进程访问同一个电力数据时产生的冲突事件进行处理成为了亟需解决的问题。
发明内容
基于此,有必要针对上述技术问题,提供一种能够防止多个进程访问同一电力数据时产生的冲突事件的电力数据访问冲突处理方法、装置、计算机设备和存储介质。
一种电力数据访问冲突处理方法,应用于设置在电力系统中的执行器,所述方法包括:
接收到基于待处理电力数据表的数据处理指令,在分布式缓存中间件中检测待处理电力数据表的锁定状态;
若在分布式缓存中间件中检测到基于所述待处理电力数据表的第二锁定密钥且所述第二锁定密钥中不包含所述执行器的第一标识,根据预设周期检测所述第二锁定密钥的释放信息;
若检测到所述第二锁定密钥的释放信息,向所述分布式缓存中间件发送请求信息包含所述第一标识、所述待处理电力数据表的表标识以及锁生存时间的第一加锁请求;所述分布式缓存中间件用于根据所述第一加锁请求生成包含所述第一标识、所述表标识以及所述锁生存时间的第一锁定密钥并对所述待处理电力数据表加锁。
在其中一个实施例中,所述若在分布式缓存中间件中检测到基于所述待处理电力数据表的第二锁定密钥且所述第二锁定密钥中不包含所述执行器的第一标识,根据预设周期检测所述第二锁定密钥的释放信息,包括:
若在所述分布式缓存中间件中检测到所述第二锁定密钥,获取所述第二锁定密钥的哈希数据结构;
检测所述哈希数据结构中是否存在所述执行器对应的进程标识,若否,则根据预设周期检测所述第二锁定密钥的释放信息。
在其中一个实施例中,所述检测所述哈希数据结构中是否存在所述执行器对应的进程标识之后,还包括:
若是,执行可重入锁逻辑,将所述第二锁定密钥的加锁次数增加一,并访问所述待处理电力数据表。
在其中一个实施例中,所述访问所述待处理电力数据表之后,还包括:
若对所述待处理电力数据表的处理完成,将所述第二锁定密钥的加锁次数减一,以解除所述执行器对所述待处理电力数据表的占用状态。
在其中一个实施例中,所述根据预设周期检测所述第二锁定密钥的释放信息,包括:
若检测到所述加锁次数为零,确定检测到所述第二锁定密钥的释放信息。
在其中一个实施例中,所述根据预设周期检测所述第二锁定密钥的释放信息,包括:
根据预设周期,检测所述执行器的进程所在的等待队列中,所述第二锁定密钥对应的信号量是否被释放,若是,确定检测到所述第二锁定密钥的释放信息。
在其中一个实施例中,所述向所述分布式缓存中间件发送请求信息包含所述第一标识、所述待处理电力数据表的表标识以及锁生存时间的第一加锁请求之后,还包括:
若检测到对所述待处理电力数据表的加锁成功信息,通过锁监控线程,按照预设时间间隔检测所述第一锁定密钥是否存在,若是,将所述第一锁定密钥的锁生存时间增加预设数值。
一种电力数据访问冲突处理装置,应用于设置在电力系统中的执行器,所述装置包括:
第一检测模块,用于接收到基于待处理电力数据表的数据处理指令,在分布式缓存中间件中检测待处理电力数据表的锁定状态;
第二检测模块,用于若在分布式缓存中间件中检测到基于所述待处理电力数据表的第二锁定密钥且所述第二锁定密钥中不包含所述执行器的第一标识,根据预设周期检测所述第二锁定密钥的释放信息;
处理模块,用于若检测到所述第二锁定密钥的释放信息,向所述分布式缓存中间件发送请求信息包含所述第一标识、所述待处理电力数据表的表标识以及锁生存时间的第一加锁请求;所述分布式缓存中间件用于根据所述第一加锁请求生成包含所述第一标识、所述表标识以及所述锁生存时间的第一锁定密钥并对所述待处理电力数据表加锁。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述的方法的步骤。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述的方法的步骤。
上述电力数据访问冲突处理方法、装置、计算机设备和存储介质,通过电力系统中的执行器接收到对待处理电力数据表的处理指令时,在分布式缓存中间件中检测待处理电力数据表的锁定状态,若检测到基于待处理电力数据表的第二锁定密钥,并且第二锁定密钥中不包括执行器的第一标识时,则根据预设周期检测第二锁定密钥的释放信息;当检测到第二锁定密钥的释放信息时,向分布式缓存中间件发送请求信息包含第一标识、待处理电力数据表的表标识以及锁生存时间的第一加锁请求,从而分布式缓存中间件根据第一加锁请求生成包含第一标识、表标识和锁生存时间的第一锁定密钥并对待处理电力数据表加锁。相较于传统的无法对并发的电力数据表访问请求进行冲突处理,本方案利用分布式缓存中间件以及引入锁机制,实现防止多个进程访问同一电力数据时产生的冲突事件的效果。
附图说明
图1为一个实施例中电力数据访问冲突处理方法的应用环境图;
图2为一个实施例中电力数据访问冲突处理方法的流程示意图;
图3为另一个实施例中电力数据访问冲突处理方法的流程示意图;
图4为一个实施例中电力数据访问冲突处理装置的结构框图;
图5为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的电力数据访问冲突处理方法,可以应用于如图1所示的应用环境中。其中,执行器102可以与分布式缓存中间件104进行通信。执行器102可以接收基于待处理电力数据表的数据处理指令,从而执行器102可以在分布式缓存中间件104中检测待处理电力数据表的锁定状态,若执行器102检测到该电力数据表处于锁定状态且其第二锁定密钥中不包含执行器的第一标识,则执行器102可以在等待第二锁定密钥释放后,向分布式缓存中间件104发送加锁请求,分布式缓存中间件104可以将待处理电力数据表进行加锁从而使得执行器102对待处理电力数据表进行访问。其中,执行器102和分布式缓存中间件104均可以是设置在电力系统中的设备。
在一个实施例中,如图2所示,提供了一种电力数据访问冲突处理方法,以该方法应用于图1中的执行器为例进行说明,包括以下步骤:
步骤S202,接收到基于待处理电力数据表的数据处理指令,在分布式缓存中间件中检测待处理电力数据表的锁定状态。
其中,待处理电力数据表可以是电力系统中由电力数据组成的表,电力系统中可以存储有多个电力数据表,各个电力数据表可以存储在电力系统中的数据库中。执行器102可以在接收到对待处理电力数据表的数据处理指令后,在分布式缓存中间件中检测待处理电力数据表的锁定状态。其中,执行器可以根据待处理电力数据表的锁定状态来确定相应的处理方式。例如,当在分布式缓存中间件中检测到待处理电力数据表存在对应的锁定密钥,则执行器102可以对该锁定密钥的信息进行相应的检测;当在分布式缓存中间件中没有检测到待处理电力数据表对应的锁定密钥时,执行器102可以直接向分布式缓存中间件104发送对待处理电力数据表的锁定请求。
其中,分布式缓存中间件可以是设置在电力系统中用于处理并发冲突的组件。例如,在电力系统中,上述执行器102可以包括多个,每个执行器102对电力系统中的各个电力数据表是并发操作,即同一时间可能会有多个执行器102对同一张表进行操作请求,此时分布式缓存中间件可以将执行器102正在处理的电力数据表进行加锁,从而避免写冲突而导致数据乱序入库的问题,忠实还原数据,另外,对于不同的表,分布式缓存中间件生成的锁不一样,从而多张不同表可以并发录入,保证了数据写入性能。
步骤S204,若在分布式缓存中间件中检测到基于待处理电力数据表的第二锁定密钥且第二锁定密钥中不包含执行器的第一标识,根据预设周期检测第二锁定密钥的释放信息。
其中,由于上述执行器102在电力系统中可以包括多个,在执行器102对待处理电力数据表进行处理之前,需要向分布式缓存中间件发送对待处理电力数据表的加锁请求,然而分布式缓存中间件中可能已经存在对待处理电力数据表的锁定密钥key,因此执行器102在分布式缓存中间件104中检测到待处理电力数据表对应的第二锁定密钥,并且该第二锁定密钥的信息中不包含执行器的第一标识时,执行器102可以根据预设周期检测第二锁定密钥的释放信息。例如,执行器102可以订阅锁释放事件,按照预设的周期频率检测释放锁的消息。另外,若执行器102在等待过程中一直未等到锁释放的事件通知,当检测时间超过最大等待时间时,执行器102可以确定获取锁失败,并生成相应的通知信息。其中,上述预设周期和最大等待时间可以根据实际情况设定。
步骤S206,若检测到第二锁定密钥的释放信息,向分布式缓存中间件发送请求信息包含第一标识、待处理电力数据表的表标识以及锁生存时间的第一加锁请求;分布式缓存中间件用于根据第一加锁请求生成包含第一标识、表标识以及锁生存时间的第一锁定密钥并对待处理电力数据表加锁。
其中,第二锁定密钥可以是在执行器102向分布式缓存中间件104发送加锁请求时在分布式缓存中间件104中检测到的已经存在的密钥,执行器102检测到第二锁定密钥存在时,可以订阅锁释放事件,检测第二锁定密钥的释放信息。当执行器102检测到第二锁定密钥的释放信息时,执行器102可以进入一个不断重试获取锁的循环。例如,当分布式缓存中间件104中待处理电力数据表的锁定密钥被释放后,执行器102可以向分布式缓存中间件发送第一加锁请求,而第一加锁请求的请求信息中包含执行器102对应的第一标识、待处理电力数据表的表标识以及本次锁定的锁生存时间信息;分布式缓存中间件104可以根据第一加锁请求生成包含上述第一标识、表标识以及锁生存时间的第一锁定密钥,并基于第一锁定密钥对待处理电力数据表加锁,从而在上述第一锁定密钥生效时间内,其他无关的执行器不能对待处理电力数据进行访问,上述执行器102可以对待处理电力数据表进行访问和处理。
其中,在执行器102对待处理电力数据表进行处理时,会遇上处理尚未完成但锁生存时间不足的情况,因此执行器102可以对锁生存时间进行延长。例如,在一个实施例中,向分布式缓存中间件发送请求信息包含第一标识、待处理电力数据表的表标识以及锁生存时间的第一加锁请求之后,还包括:若检测到对待处理电力数据表的加锁成功信息,通过锁监控线程,按照预设时间间隔检测第一锁定密钥是否存在,若是,将第一锁定密钥的锁生存时间增加预设数值。本实施例中,分布式缓存中间件104可以在生成第一锁定密钥并对待处理电力数据表加锁成功后,向执行器102发送加锁成功信息。执行器102可以在检测到分布式缓存中间件104对待处理电力数据表的加锁成功信息后,启动后台锁监控线程,从而执行器102可以通过锁监控线程,按照预设时间间隔检测第一锁定密钥是否存在,是则执行器102可以将第一锁定密钥的锁生存时间增加预设数值,从而延长第一锁定密钥的生效时间,保证执行器102可以完成对待处理电力数据表的处理。具体地,执行器102一旦检测到加锁成功,则会启动一个后台监控线程,例如上述的锁监控线程,并通过该锁监控线程每隔一段时间检查一下,如果持锁进程还持有锁定密钥key,则会不断延长锁定密钥key的生存时间,保证执行器102可以正常处理电力数据表而不被其他执行器的访问请求中断。其中,上述预设时间间隔可以根据实际情况进行设定。
上述电力数据访问冲突处理方法中,通过电力系统中的执行器接收到对待处理电力数据表的处理指令时,在分布式缓存中间件中检测待处理电力数据表的锁定状态,若检测到基于待处理电力数据表的第二锁定密钥,并且第二锁定密钥中不包括执行器的第一标识时,则根据预设周期检测第二锁定密钥的释放信息;当检测到第二锁定密钥的释放信息时,向分布式缓存中间件发送请求信息包含第一标识、待处理电力数据表的表标识以及锁生存时间的第一加锁请求,从而分布式缓存中间件根据第一加锁请求生成包含第一标识、表标识和锁生存时间的第一锁定密钥并对待处理电力数据表加锁。相较于传统的无法对并发的电力数据表访问请求进行冲突处理,本方案利用分布式缓存中间件以及引入锁机制,实现防止多个进程访问同一电力数据时产生的冲突事件的效果。
在一个实施例中,若在分布式缓存中间件中检测到基于待处理电力数据表的第二锁定密钥且第二锁定密钥中不包含执行器的第一标识,根据预设周期检测第二锁定密钥的释放信息,包括:若在分布式缓存中间件中检测到第二锁定密钥,获取第二锁定密钥的哈希数据结构;检测哈希数据结构中是否存在执行器对应的进程标识,若否,则根据预设周期检测第二锁定密钥的释放信息。
本实施例中,执行器102在请求对待处理电力数据表进行加锁时还可以检测待处理电力数据表是否已经被锁定。执行器102可以检测分布式缓存中间件104中是否存在待处理电力数据表对应的第二锁定密钥,若存在,则执行器102可以获取第二锁定密钥的哈希数据结构,从而获取第二锁定密钥中的数据,执行器102可以检测哈希数据结构中是否存在执行器102对应的进程标识,若检测不到,则执行器102可以订阅锁释放事件,根据预设周期检测第二锁定密钥的释放信息。
其中,执行器102可以是由进程驱动的执行器,即执行器102在电力系统中拥有对应的进程,该进程可以是唯一且与执行器102对应的,且拥有对应的进程标识。例如,上述待处理电力数据表已经被其他执行器占用处理,并且在分布式缓存中间件104中生成了对应的第二锁定密钥,执行器102此时如果对同一个表加锁,会发现分布式缓存中间件104中存在这个表对应的锁key,即上述第二锁定密钥,而此时执行器102可以接着判断这个key的哈希数据结构中是否包含执行器102自身进程的ID,若发现没有,即仅有当前正在处理上述待处理电力数据表的执行器的进程ID,则执行器102可以订阅锁释放事件,检测第二锁定密钥的释放信息。并且,若执行器102在等待过程中一直未等到锁的释放事件,当等待时间超过最大等待时间时,执行器102可以确定获取锁失败,并生成相应的失败信息。
通过本实施例,执行器102可以在待处理电力数据表被其他执行器处理时,可以在第二锁定密钥的哈希数据结构中检测不到本执行器102的进程标识时,通过订阅锁释放事件,在第二锁定密钥被释放时对待处理电力数据表进行加锁,实现防止多个进程访问同一电力数据时产生的冲突事件的效果。
在一个实施例中,检测哈希数据结构中是否存在执行器对应的进程标识之后,还包括:若是,执行可重入锁逻辑,将第二锁定密钥的加锁次数增加一,并访问待处理电力数据表。
本实施例中,上述执行器102可以通过检测第二锁定密钥中是否存在执行器102对应的进程标识来确定是否可以对待处理电力数据表进行处理。当执行器102在第二锁定密钥的哈希数据结构中检测到执行器102对应的进程标识后,执行器102可以确定自己可以访问待处理电力数据表,执行器102可以执行可重入锁逻辑,将第二锁定密钥的加锁次数增加一,并对待处理电力数据表进行访问和处理。其中,锁定密钥中可以包含该锁定密钥的加锁次数,加锁次数表征该锁定密钥对应的电力数据表正在被多少个进程访问和调用。例如,若上述执行器102发现第二锁定密钥中存在执行器102的进程标识,则执行器102可以执行可重入锁逻辑,对该第二锁定密钥的key锁值增加1,即执行器102可以将第二锁定密钥的加锁次数加1。
通过本实施例,执行器102可以在检测到第二锁定密钥中存在执行器102的进程标识时对待处理电力数据表进行访问和处理,避免了多个执行器的进程同时访问待处理电力数据表而造成的冲突事件。
在一个实施例中,访问待处理电力数据表之后,还包括:若对待处理电力数据表的处理完成,将第二锁定密钥的加锁次数减一,以解除执行器对待处理电力数据表的占用状态。
本实施例中,第二锁定密钥可以是存储在分布式缓存中间件104中的密钥,用于在有执行器访问待处理电力数据表时禁止其他不符合要求的执行器对该表的访问。例如禁止执行器的进程标识在第二锁定密钥的哈希数据结构中不存在的执行器对待处理电力数据表进行访问。上述执行器102对待处理电力数据表进行处理时,可以在分布式缓存中间件104中将第二锁定密钥的加锁次数加一,并且执行器102可以在对待处理电力数据表处理完成后,将第二锁定密钥的加锁次数减一,从而表征执行器102解除对待处理电力数据表的占用状态。例如,执行器102处理完对待处理电力数据表的业务逻辑,并对第二锁定密钥进行释放锁时,会对相应key锁的数据结构中的锁字数减一,具体可以是将上述第二锁定密钥的加锁次数减一,从而表征执行器102释放了对待处理电力数据表的锁定。
通过本实施例,执行器102可以在处理完电力数据表后,通过减少加锁次数和释放锁的方式解除对电力数据表的占用,从而其他执行器可以在电力数据表没有被占用时访问电力数据表,实现防止多个进程访问同一电力数据时产生的冲突事件的效果。
在一个实施例中,根据预设周期检测第二锁定密钥的释放信息,包括:若检测到加锁次数为零,确定检测到第二锁定密钥的释放信息。
本实施例中,执行器102可以在处理完上述待处理电力数据表后,将分布式缓存中间件104中对应的第二锁定密钥的加锁次数减一,从而表征执行器102解除对待处理电力数据表的占用。并且,当执行器102检测到第二锁定密钥的加锁次数为零时,可以确定第二锁定密钥被释放。例如,执行器102处理完业务逻辑后,可以对相应的key锁的数据结构中的锁字数减一,具体可以是将上述第二锁定密钥的加锁次数减一,若执行器102检测到加锁次数为零,则会释放分布式缓存中间件104中的该第二锁定密钥,从而其他执行器可以尝试对上述待处理电力数据表进行加锁。
通过本实施例,执行器102可以在第二锁定密钥的加锁次数为零时释放该密钥,从而其他执行器可以对待处理电力数据表进行访问和加锁,实现防止多个进程访问同一电力数据时产生的冲突事件的效果。
在一个实施例中,根据预设周期检测第二锁定密钥的释放信息,包括:根据预设周期,检测执行器的进程所在的等待队列中,第二锁定密钥对应的信号量是否被释放,若是,确定检测到第二锁定密钥的释放信息。
本实施例中,执行器102可以通过检测信号量的方式检测第二锁定密钥的释放信息。当执行器102检测到第二锁定密钥已存在分布式缓存中间件104中并且第二锁定密钥的数据结构中不包含执行器102的进程标识时,执行器102可以根据预设周期检测执行器102的进程所在的等待队列中,第二锁定密钥对应的信号是否被释放,若是,则执行器102确定检测到第二锁定密钥的释放信息。其中,等待队列可以是电力系统中需要对待处理电力数据表进行访问的进程形成的队列,即等待队列中可以包括多个进程,每个进程可以在第二锁定密钥被释放后按照先后顺序访问待处理电力数据表并进行加锁。例如,执行器102在订阅了锁释放事件后,会循环获取待处理电力数据表对应的锁,并得到已存在锁的剩余存活时间,如果锁当前还是被占用,则执行器102可以等待释放锁的消息,具体是通过JDK(javadevelopment kit,安卓开发工具包)的信号量(Semaphore)来阻塞线程,当锁释放并发布释放锁的消息后,信号量的release()方法会被调用,此时被信号量阻塞的等待队列中的一个进程就可以继续尝试获取锁了,若执行器102等到了锁释放事件的通知,则可以进入不断重试获取锁的循环,如果执行器102在重试中拿到了锁,则可以直接返回,进行对待处理电力数据表的访问。
通过本实施例,执行器102可以通过检测信号量的方式检测待处理电力数据表是否被释放,从而可以在释放时对待处理电力数据表进行加锁和访问,实现防止多个进程访问同一电力数据时产生的冲突事件的效果。
在一个实施例中,如图3所示,图3为另一个实施例中电力数据访问冲突处理方法的流程示意图。包括以下步骤:本实施例中,电力系统的执行器可以包括多个,例如执行器1和执行器2,执行器1在接收到数据变更通知后,可以分析通知消息得知将要处理哪张库表,并尝试基于表名作为key建锁,执行器1可以向分布式缓存中间件104发送一段加锁请求,加锁请求的请求信息可以包括要锁的电力数据表的表名key,当前执行器1的进程id以及锁生存时间。则分布式缓存中间件104可以根据这些信息生成相应的锁定密钥。一旦加锁成功,执行器1可以启动一个后台监控线程,即锁监控线程,每个一段时间检查一下,如果持锁进程还持有锁key,则会不断延长锁key的生存时间。
此时,若执行器2尝试对同一个表加锁,发现分布式缓存中间件104中锁key已经存在,则会判断这个key的哈希数据结构中是否包含执行器2自身进程的id,若否,例如只有执行器1对应的id,则执行器2会订阅锁释放事件,而如果执行器2在等待过程中一直未等到锁释放事件的通知,则在超过最大等待时间时确定获取锁失败。在订阅锁释放事件后,执行器2可以不断尝试获取锁,并得到已存在的锁的剩余存活时间,若执行器2在重试中拿到了锁,则可以直接返回,若该锁仍然被占用,则执行器2可以等待释放锁的消息,具体是使用了JDK的信号量Semaphore来阻塞线程,当锁释放并发布释放锁的消息后,信号量的release()方法会被调用,此时被信号量阻塞的等待队列中的一个进程就可以继续尝试获取锁了;如果等到了锁的释放事件的通知,则执行器2开始进入一个不断重试获取锁的循环。
若执行器2判断上述key的哈希数据结构中包含执行器2自身进程的id,则执行器2可以执行可重入锁逻辑,对该key锁值增加1,从而执行器2可以开始对上述表的访问。当执行器1处理完业务逻辑释放锁时,会对相应的key锁的数据结构中锁字数减一,例如将加锁次数减一,当加锁次数为0时,可以释放分布式缓存中间件104中的这个锁key,从而其他执行器可以尝试对该表进行加锁,例如执行器2可以尝试完成加锁。
通过上述实施例,通过利用分布式缓存中间件以及引入锁机制,保证同一时刻只有一张目标表被一个进程更新操作,保证数据接入的最终结果被正确重放至数据存储区,实现防止多个进程访问同一电力数据时产生的冲突事件的效果。
应该理解的是,虽然图2-图3的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-图3中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图4所示,提供了一种电力数据访问冲突处理装置,包括:第一检测模块500、第二检测模块502和处理模块504,其中:
第一检测模块500,用于接收到基于待处理电力数据表的数据处理指令,在分布式缓存中间件中检测待处理电力数据表的锁定状态。
第二检测模块502,用于若在分布式缓存中间件中检测到基于待处理电力数据表的第二锁定密钥且第二锁定密钥中不包含执行器的第一标识,根据预设周期检测第二锁定密钥的释放信息。
处理模块504,用于若检测到第二锁定密钥的释放信息,向分布式缓存中间件发送请求信息包含第一标识、待处理电力数据表的表标识以及锁生存时间的第一加锁请求;分布式缓存中间件用于根据第一加锁请求生成包含第一标识、表标识以及锁生存时间的第一锁定密钥并对待处理电力数据表加锁。
在一个实施例中,上述第二检测模块502,具体用于若在分布式缓存中间件中检测到第二锁定密钥,获取第二锁定密钥的哈希数据结构;检测哈希数据结构中是否存在执行器对应的进程标识,若否,则根据预设周期检测第二锁定密钥的释放信息。
在一个实施例中,上述第二检测模块502,具体用于若是,执行可重入锁逻辑,将第二锁定密钥的加锁次数增加一,并访问待处理电力数据表。
在一个实施例中,上述装置还包括:解除模块,用于若对待处理电力数据表的处理完成,将第二锁定密钥的加锁次数减一,以解除执行器对待处理电力数据表的占用状态。
在一个实施例中,上述第二检测模块502,具体用于若检测到加锁次数为零,确定检测到第二锁定密钥的释放信息。
在一个实施例中,上述第二检测模块502,具体用于根据预设周期,检测执行器的进程所在的等待队列中,第二锁定密钥对应的信号量是否被释放,若是,确定检测到第二锁定密钥的释放信息。
在一个实施例中,上述装置还包括:监控模块,用于若检测到对待处理电力数据表的加锁成功信息,通过锁监控线程,按照预设时间间隔检测第一锁定密钥是否存在,若是,将第一锁定密钥的锁生存时间增加预设数值。
关于电力数据访问冲突处理装置的具体限定可以参见上文中对于电力数据访问冲突处理方法的限定,在此不再赘述。上述电力数据访问冲突处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是执行器,其内部结构图可以如图5所示。该计算机设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种电力数据访问冲突处理方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图5中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述的电力数据访问冲突处理方法。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述的电力数据访问冲突处理方法。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种电力数据访问冲突处理方法,其特征在于,应用于设置在电力系统中的执行器,所述方法包括:
接收到基于待处理电力数据表的数据处理指令,在分布式缓存中间件中检测待处理电力数据表的锁定状态;
若在分布式缓存中间件中检测到基于所述待处理电力数据表的第二锁定密钥且所述第二锁定密钥中不包含所述执行器的第一标识,根据预设周期检测所述第二锁定密钥的释放信息;
若检测到所述第二锁定密钥的释放信息,向所述分布式缓存中间件发送请求信息包含所述第一标识、所述待处理电力数据表的表标识以及锁生存时间的第一加锁请求;所述分布式缓存中间件用于根据所述第一加锁请求生成包含所述第一标识、所述表标识以及所述锁生存时间的第一锁定密钥并对所述待处理电力数据表加锁。
2.根据权利要求1所述的方法,其特征在于,所述若在分布式缓存中间件中检测到基于所述待处理电力数据表的第二锁定密钥且所述第二锁定密钥中不包含所述执行器的第一标识,根据预设周期检测所述第二锁定密钥的释放信息,包括:
若在所述分布式缓存中间件中检测到所述第二锁定密钥,获取所述第二锁定密钥的哈希数据结构;
检测所述哈希数据结构中是否存在所述执行器对应的进程标识,若否,则根据预设周期检测所述第二锁定密钥的释放信息。
3.根据权利要求2所述的方法,其特征在于,所述检测所述哈希数据结构中是否存在所述执行器对应的进程标识之后,还包括:
若是,执行可重入锁逻辑,将所述第二锁定密钥的加锁次数增加一,并访问所述待处理电力数据表。
4.根据权利要求3所述的方法,其特征在于,所述访问所述待处理电力数据表之后,还包括:
若对所述待处理电力数据表的处理完成,将所述第二锁定密钥的加锁次数减一,以解除所述执行器对所述待处理电力数据表的占用状态。
5.根据权利要求4所述的方法,其特征在于,所述根据预设周期检测所述第二锁定密钥的释放信息,包括:
若检测到所述加锁次数为零,确定检测到所述第二锁定密钥的释放信息。
6.根据权利要求1所述的方法,其特征在于,所述根据预设周期检测所述第二锁定密钥的释放信息,包括:
根据预设周期,检测所述执行器的进程所在的等待队列中,所述第二锁定密钥对应的信号量是否被释放,若是,确定检测到所述第二锁定密钥的释放信息。
7.根据权利要求1所述的方法,其特征在于,所述向所述分布式缓存中间件发送请求信息包含所述第一标识、所述待处理电力数据表的表标识以及锁生存时间的第一加锁请求之后,还包括:
若检测到对所述待处理电力数据表的加锁成功信息,通过锁监控线程,按照预设时间间隔检测所述第一锁定密钥是否存在,若是,将所述第一锁定密钥的锁生存时间增加预设数值。
8.一种电力数据访问冲突处理装置,其特征在于,应用于设置在电力系统中的执行器,所述装置包括:
第一检测模块,用于接收到基于待处理电力数据表的数据处理指令,在分布式缓存中间件中检测待处理电力数据表的锁定状态;
第二检测模块,用于若在分布式缓存中间件中检测到基于所述待处理电力数据表的第二锁定密钥且所述第二锁定密钥中不包含所述执行器的第一标识,根据预设周期检测所述第二锁定密钥的释放信息;
处理模块,用于若检测到所述第二锁定密钥的释放信息,向所述分布式缓存中间件发送请求信息包含所述第一标识、所述待处理电力数据表的表标识以及锁生存时间的第一加锁请求;所述分布式缓存中间件用于根据所述第一加锁请求生成包含所述第一标识、所述表标识以及所述锁生存时间的第一锁定密钥并对所述待处理电力数据表加锁。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210496289.5A CN114817287A (zh) | 2022-05-09 | 2022-05-09 | 电力数据访问冲突处理方法、装置和计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210496289.5A CN114817287A (zh) | 2022-05-09 | 2022-05-09 | 电力数据访问冲突处理方法、装置和计算机设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114817287A true CN114817287A (zh) | 2022-07-29 |
Family
ID=82512459
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210496289.5A Pending CN114817287A (zh) | 2022-05-09 | 2022-05-09 | 电力数据访问冲突处理方法、装置和计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114817287A (zh) |
-
2022
- 2022-05-09 CN CN202210496289.5A patent/CN114817287A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108897628B (zh) | 一种分布式锁的实现方法、装置及电子设备 | |
CN109491928B (zh) | 缓存控制方法、装置、终端及存储介质 | |
US9778962B2 (en) | Method for minimizing lock contention among threads when tasks are distributed in multithreaded system and apparatus using the same | |
CN107402822B (zh) | 死锁处理方法及装置 | |
JPH07191944A (ja) | 多重プロセッサによる多数の資源への命令におけるデッドロックを防止するためのシステムおよび方法 | |
JPH1165863A (ja) | 共有資源管理方法 | |
CN112486694B (zh) | 一种基于Redis的网络锁处理方法及设备 | |
US7444634B2 (en) | Method and apparatus for providing dynamic locks for global resources | |
US8055855B2 (en) | Varying access parameters for processes to access memory addresses in response to detecting a condition related to a pattern of processes access to memory addresses | |
US5301311A (en) | Control method for preventing incorrect reset of common resource and multicomputer system executing the method | |
US20120158684A1 (en) | Performance enhanced synchronization mechanism with intensity-oriented reader api | |
US20080168447A1 (en) | Scheduling of Execution Units | |
CN111274214A (zh) | 一种文件锁处理方法、装置及电子设备和存储介质 | |
US7574439B2 (en) | Managing a nested request | |
CN113946427A (zh) | 用于多操作系统的任务处理方法、处理器及存储介质 | |
CN114817287A (zh) | 电力数据访问冲突处理方法、装置和计算机设备 | |
CN116662426A (zh) | 数据库连接的建立方法、装置、设备及介质 | |
US7539678B2 (en) | Systems and methods for controlling access to an object | |
CN114647663A (zh) | 一种资源处理方法、装置、系统、电子设备及存储介质 | |
CN117056363B (zh) | 数据缓存方法、系统、设备以及存储介质 | |
CN110879747B (zh) | 资源管理方法及装置 | |
US20230195523A1 (en) | Semiconductor device, control method for the same, and program | |
CN113704274B (zh) | 一种数据的读取方法及电子设备 | |
CN116128493A (zh) | 基于分布式锁的业务处理方法、系统、装置及介质 | |
CN114461410A (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 |