CN112988812B - 库存数据的处理方法、装置、设备及存储介质 - Google Patents
库存数据的处理方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN112988812B CN112988812B CN202110261492.XA CN202110261492A CN112988812B CN 112988812 B CN112988812 B CN 112988812B CN 202110261492 A CN202110261492 A CN 202110261492A CN 112988812 B CN112988812 B CN 112988812B
- Authority
- CN
- China
- Prior art keywords
- inventory
- value
- redis
- operation request
- data
- 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
Links
- 238000003672 processing method Methods 0.000 title description 2
- 239000012634 fragment Substances 0.000 claims abstract description 74
- 238000000034 method Methods 0.000 claims abstract description 60
- 238000005192 partition Methods 0.000 claims description 30
- 238000004590 computer program Methods 0.000 claims description 9
- 238000004891 communication Methods 0.000 claims description 8
- 238000011084 recovery Methods 0.000 claims description 8
- 230000006870 function Effects 0.000 description 33
- 230000008569 process Effects 0.000 description 15
- 230000009471 action Effects 0.000 description 11
- 238000010586 diagram Methods 0.000 description 7
- 230000003247 decreasing effect Effects 0.000 description 3
- 230000002147 killing effect Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 206010033799 Paralysis Diseases 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
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/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
- G06F16/278—Data partitioning, e.g. horizontal or vertical partitioning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q10/00—Administration; Management
- G06Q10/08—Logistics, e.g. warehousing, loading or distribution; Inventory or stock management
- G06Q10/087—Inventory or stock management, e.g. order filling, procurement or balancing against orders
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Business, Economics & Management (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Economics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Accounting & Taxation (AREA)
- Marketing (AREA)
- Finance (AREA)
- Development Economics (AREA)
- Computational Linguistics (AREA)
- Entrepreneurship & Innovation (AREA)
- Human Resources & Organizations (AREA)
- Computing Systems (AREA)
- Operations Research (AREA)
- Quality & Reliability (AREA)
- Strategic Management (AREA)
- Tourism & Hospitality (AREA)
- General Business, Economics & Management (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本申请涉及一种库存数据的处理方法、装置、设备及存储介质,方法包括:获取预设时间段内客户端发送的至少一个库存操作请求;将至少一个库存操作请求发送至各自对应的键值对存储库Redis分片中,从Redis分片中获得与每个产品唯一标识对应的缓存值;分别判断获取的每个缓存值是否超过各自对应的第一库存门限值,若缓存值未超过第一库存门限值,在对应的Redis分片中减少与库存扣减指令对应的库存值;将减少后的库存值返回至客户端。本申请用以在高并发的情况下保证发出的产品不会超过库存限制,同时提高用户获取产品信息的及时性。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种库存数据的处理方法、装置、设备及存储介质。
背景技术
在互联网业务中的许多业务场景是需要使用库存的,比如,各种秒杀、抢购业务。这些业务场景都有一个共同点,即瞬间流量峰值特别大,但是产品的库存是有限的。因此,如何在高并发的情况下保证发出的产品不会超过库存限制是急需解决的问题。
针对该问题,现有的技术方案主要通过限流的方式来解决问题,即,每次只允许业务控制范围内的流量进入到后台服务器。但是,采用限流的方式,只能保证业务控制范围内的流量对应的用户能够及时的查看产品信息,对于没有进入后台服务器的流量对应的用户无法及时查看到产品信息,更无法根据产品信息及时进行购买等操作。
发明内容
本申请提供了一种库存数据的处理方法、装置、设备及存储介质,用以在高并发的情况下保证发出的产品不会超过库存限制,同时提高用户获取产品信息的及时性。
第一方面,本申请实施例提供了一种库存数据的处理方法,包括:
获取预设时间段内客户端发送的至少一个库存操作请求,所述库存操作请求包括:产品唯一标识和库存扣减指令;
将所述至少一个库存操作请求发送至各自对应的键值对存储库Redis分片中,从所述Redis分片中获得与每个所述产品唯一标识对应的缓存值;
分别判断获取的每个所述缓存值是否超过各自对应的第一库存门限值,若所述缓存值未超过所述第一库存门限值,在对应的所述Redis分片中减少与所述库存扣减指令对应的库存值;
将减少后的所述库存值返回至所述客户端。
可选地,所述库存操作请求还包括:用户唯一标识;
所述将所述至少一个库存操作请求发送至各自对应的键值对存储库Redis分片中,从所述Redis分片中获得与每个所述产品唯一标识对应的缓存值,包括:
将所述至少一个库存操作请求分为N组,所述N为所述Redis分片的数量的整数倍,具有相同所述用户唯一标识的各所述库存操作请求属于同一组;
为每组的所述库存操作请求添加同一标记;
将具有同一所述标记的库存操作请求发送至同一所述Redis分片,并从所述Redis分片中获得与每个所述产品唯一标识对应的缓存值。
可选地,所述获取预设时间段内的至少一个库存操作请求之前,还包括:
获取所述Redis分片的数量和同一所述产品唯一标识的产品总数量;
基于所述Redis分片的数量与所述产品总数量,确定每个所述Redis分片需要存储的库存数量;
分别选取所述库存数量的库存数据,存储在各自对应的所述Redis分片上,所述库存数据包括:所述产品唯一标识、与所述产品唯一标识对应的库存值。
可选地,所述若所述缓存值未超过所述第一库存门限值,在对应的所述Redis分片中减少与所述库存操作指令对应的库存值之后,还包括:
计算所述缓存值和第一预设值之和;
当所述缓存值和所述第一预设值之和,未超过所述第一库存门限值时,生成扣减成功标识,确定库存扣减成功。
可选地,所述库存操作请求还包括:库存恢复指令;
所述方法,还包括:
分别判断获取的每个所述缓存值是否超过第二库存门限值,若所述缓存值超过所述第二库存门限值,在对应的所述Redis分片中增加与所述库存恢复指令对应的库存值;
将增加后的所述库存值返回至所述客户端。
可选地,所述若所述缓存值超过所述第二库存门限值,在对应的所述Redis分片中增加与所述库存恢复指令对应的库存值之后,还包括:
计算所述缓存值与第二预设值之差;
当所述缓存值与所述第二预设值之差,超过所述第二库存门限值时,生成库存恢复成功指令,确定库存恢复成功。
可选地,所述库存数据包括:总库存数据和日库存数据,所述总库存数据包括:所述产品总数量,所述日库存数据包括:当天可处理的产品的数量;
所述将所述至少一个库存操作请求发送至各自对应的键值对存储库Redis分片中,包括:
将具有同一所述用户唯一标识和同一所述产品唯一标识的所述库存请求发送至同一所述Redis分片中;
所述将减少后的所述库存值返回至所述客户端之前,还包括:
根据所述库存扣减指令,在所述同一Redis分片中,减少所述总库存数据和所述日库存数据中,与所述库存扣减指令对应的所述库存值;
所述将增加后的所述库存值返回至所述客户端之前,还包括:
根据所述库存恢复指令,在所述同一Redis分片中,增加所述总库存数据和所述日库存数据中,与所述库存恢复指令对应的所述库存值。
第二方面,本申请提供了一种库存数据的处理装置,包括:
第一获取模块,用于获取预设时间段内客户端发送的至少一个库存操作请求,所述库存操作请求包括:产品唯一标识和库存扣减指令;
第二获取模块,用于将所述至少一个库存操作请求发送至各自对应的键值对存储库Redis分片中,从所述Redis分片中获得与每个所述产品唯一标识对应的缓存值;
判断模块,用于分别判断获取的每个所述缓存值是否超过各自对应的第一库存门限值,若所述缓存值未超过所述第一库存门限值,在对应的所述Redis分片中减少与所述库存扣减指令对应的库存值;
返回模块,用于将减少后的所述库存值返回至所述客户端。
第三方面,本申请实施例提供了一种电子设备,包括:处理器、存储器和通信总线,其中,处理器和存储器通过通信总线完成相互间的通信;所述存储器,用于存储计算机程序;所述处理器,用于执行所述存储器中所存储的程序,实现第一方面所述的库存数据的处理方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现第一方面所述的库存数据的处理方法。
本申请实施例提供的上述技术方案与现有技术相比具有如下优点:本申请实施例提供的该方法,应用在高并发的场景下,获取预设时间段内客户端发送的至少一个库存操作请求,该库存操作请求包括:产品唯一标识和库存扣减指令;将获取的多个库存操作请求发送至各自对应的键值对存储库(Remote Dictionary Server,简称Redis)分片中,从Redis分片中获得与每个产品唯一标识对应的缓存值,本申请通过采用多个Redis分片,并将众多库存操作请求发送至不同的Redis分片中,解决了单个分片无法承受高并发的问题,并利用Redis能够支持高并发、高吞吐量的性能,使得众多请求能够在很短的时间内完成请求操作,提高了用户获取产品信息的及时性。
进一步地,分别判断获取的每个缓存值是否超过各自对应的第一库存门限值,若缓存值未超过第一库存门限值,在对应的Redis分片中减少与库存扣减指令对应的库存值;最后,将减少后的库存值返回至客户端,本申请在确定库存操作请求对应的产品唯一标识还存在库存的情况下,将库存值返回至客户端,使得用户能够在很短时间内得到自己想要得到的产品信息,提高了用户体验。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例中库存数据的处理方法流程示意图;
图2为本申请实施例中Redis分片存储库存数据的流程示意图;
图3为本申请实施例中从Redis分片中获得缓存值的流程示意图;
图4为本申请实施例中商品详情显示流程示意图;
图5A为本申请实施例中扣减前库存值及商品详情展示图;
图5B为本申请实施例中扣减后库存值及商品详情展示图;
图6为本申请实施例中库存扣减流程示意图;
图7为本申请实施例中库存恢复流程示意图;
图8为本申请实施例中库存数据的处理装置结构示意图;
图9为本申请实施例中电子设备结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例中提供了一种库存数据的处理方法,该方法应用在高并发的场景中,例如,商品秒杀活动场景、抢火车票场景等。本申请实施例以该方法应用在商品秒杀活动场景为例进行说明,此处仅是举例说明,并不用于对本申请的保护范围进行限制。在以下的实施例中的举例说明,也仅限于举例说明,不用于对保护范围进行限定,便不再一一说明。其中,该方法的具体实现如图1所示:
步骤101,获取预设时间段内客户端发送的至少一个库存操作请求。
库存操作请求包括:产品唯一标识和库存扣减指令。
其中,产品唯一标识可以为产品编号。
具体地,本申请利用键值对存储库(Remote Dictionary Server,简称Redis)存储库存数据,其中,库存数据包括:产品唯一标识,和,与产品唯一标识对应的库存值。另外,Redis较现有的数据库,例如,数据库(Date Base,简称DB)能够支持高并发、高吞吐量的性能,能够更好的应对具有超高吞吐量的秒杀活动。
一个具体实施例中,预先根据购物***注册的用户量,确定Redis分片的数量,再将现有的所有库存数据对应性的存储在各个Redis分片上,具体实现如图2所示:
步骤201,获取Redis分片的数量和同一产品唯一标识的产品总数量。
例如,根据注册的用户量确定的Redis分片的数量为40个,统计产品编号为0001的产品总数量为100万个。则获取到Redis分片的数量为40,产品编号为0001的产品总数量为100万。
步骤202,基于Redis分片的数量与产品总数量,确定每个Redis分片需要存储的库存数量。
具体地,基于Redis分片的数量和产品总数量,将该产品编号为0001的产品划分为M份,M为Redis分片的数量,即40份。可以采用均分的方式进行划分,即每个Redis分片的库存数量为2.5万,当然,也可以采用不均分的方式进行划分,但是为了避免出现极端的情况,需要限定具有最多库存数量的Redis分片的库存值,与具有最少库存数量的Redis分片的库存值之差,需要小于限定值。
其中,每个Redis分片开始存储的库存数量为初始库存值,该初始库存值会随着用户的购买、退回等操作进行变化。当然,初始库存值也等同于库存值。
其中,库存数据还可以包括产品名称、产品详情等。
步骤203,分别选取库存数量的库存数据,存储在各自对应的Redis分片上。
下面,以均分为例进行说明,即,分别选取2.5万的库存数量的库存数据,存储在各自对应的Redis分片上。
例如,每个Redis分片上存储有0001+2.5万。其中,该2.5万即为初始库存值。
本申请采用多个Redis分片,并将产品根据产品总数量进行划分,分别存储在多个Redis分片上,解决了单个分片无法承受高并发的问题,避免了可能出现的服务瘫痪的情况,提高了用户体验。
步骤102,将至少一个库存操作请求发送至各自对应的键值对存储库Redis分片中,从Redis分片中获得与每个产品唯一标识对应的缓存值。
一个具体实施例中从Redis分片中获得缓存值的具体说明如图3所示:
步骤301,将至少一个库存操作请求分为N组。
其中,N为Redis分片的数量的整数倍,具有相同用户唯一标识的各库存操作请求属于同一组。
具体地,将具有相同用户唯一标识的各库存操作请求划分为一组,使得同一用户的库存操作请求在一个Redis分片中进行。
例如,当用户进行商品秒杀抢购时,在客户端一种点击购买按钮,比如在显示商品被抢完之前,用户点击了20下购买按钮,则会生成20条库存操作请求。当存在该用户唯一标识成功命中产品时,在Redis分片上直接滤除后面19条库存操作请求,提高了数据处理效率。
步骤302,为每组的库存操作请求添加同一标记。
例如,为第一组库存操作请求添加数字1,第二组库存操作请求添加数字2,以此类推,直至最后一组库存操作请求。
步骤303,将具有同一标记的库存操作请求发送至同一Redis分片,并从Redis分片中获得与每个产品唯一标识对应的缓存值。
具体地,利用Redis提供的get函数,获取与每个产品唯一标识对应的缓存值。
步骤103,分别判断获取的每个缓存值是否超过各自对应的第一库存门限值,若缓存值未超过第一库存门限值,在对应的Redis分片中减少与库存扣减指令对应的库存值。
其中,不同的Redis分片可以对应不同的第一库存门限值,也可以对应相同的第一库存门限值,第一门限值根据每个Redis分片开始存储的库存数量来确定。
具体地,第一库存门限值为初始库存值。
一个具体实施例中,若缓存值未超过第一库存门限值,在对应的Redis分片中减少与库存操作指令对应的库存值之后,计算缓存值和第一预设值之和;当缓存值和第一预设值之和,未超过第一库存门限值时,生成扣减成功标识,确定库存扣减成功。
本申请在进行库存扣减前先进行一次判断操作,只有缓存值小于第一库存门限值时,才进行库存扣减操作。库存扣减操作之后再次将结果值和第一库存门限值进行比较,只有当结果值小于等于库存限制值时才确定库存扣除成功,生成扣减标识,并向客户端返回成功标识。客户端可以根据成功标识,减少客户端的库存值显示。本申请还可以直接向客户端返回扣减后的库存值,客户端接收该库存值,并进行显示。
具体地,商品详情显示流程具体如图4所示:
步骤401,获取预设时间段内客户端发送的至少一个库存操作请求,库存操作请求还包括:商品查询指令。
步骤402,根据商品查询指令,调用第一数据处理函数。
具体地,该第一数据处理函数包括get函数。
步骤403,利用第一数据处理函数,从redis分片中获取与唯一标识对应的缓存值。
具体地,通过get函数获取当前用户唯一标识对应的缓存值。
步骤404,判断缓存值是否超过第一库存门限值,若是,执行步骤405,否则,执行步骤406。
步骤405,判定不向客户端返回库存值。
步骤406,判定向客户端返回库存值。
另外,通过图5A展示扣减前库存值及商品详情,图5B展示扣减后库存值及商品详情。
例如,用户通过搜索产品名称找到该产品,进入产品详情页5A,可以看到此时该产品的库存值为500。此时,用户通过【立即购买】按钮,购买了2个产品。
在购买完成后,用户再次通过搜索产品名称找到该产品,进入产品详情页5B,可以看到此时该产品的库存值为498。
具体地,库存扣减流程具体如图6所示:
其中,该库存扣减流程可以在商品详情显示流程的基础上进行说明,需要说明的是,在该流程中的库存操作请求包括库存扣减指令。
步骤601,根据库存扣减指令,调用第一数据处理函数。
步骤602,利用第一数据处理函数,从redis分片中获取与唯一标识对应的缓存值。
步骤603,判断缓存值是否超过第一库存门限值,若是,执行步骤604,否则,执行步骤605。
步骤604,判定不进行库存扣减操作。
步骤605,调用并执行第二数据处理函数,得到执行结果。
具体地,第二数据处理函数包括incr函数。
本申请采用加法的方式,每当有一笔库存操作请求为库存扣减时,将缓存值通过incr函数进行加1,该incr函数会返回执行加1后的值。若加1后的值小于等于第一库存门限值,则确定库存扣减成功。
其中,本申请采用递增的方式,应为采用递减的方式,需要对缓存值进行初始化,初始化成第一库存门限值。比如,第一库存门限值是1000,需要预先对缓存值初始化成1000;当库存发生变更时,需要对缓存值进行相应的增加或者减少,这种递减的方式比较麻烦。而采用递增的方式,incr函数在操作时,若缓存值为空,则会默认初始化为0,然后在0的基础上加1,每次执行库存扣减后都加1的,就省去了手动将库存缓存初始化的操作,为数据处理提高了便利性。
另外,递增的方式不仅使用简单,而且更加安全。例如,如果将库存值从100增加到1000,增加值为900。在将900更新到redis中时,redis操作返回失败时,是无法确定到底是写入成功了还是失败了。因为可能写入成功了,但将成功标识返回时,由于超时等原因确显示失败。这种情况我们又无法进行二次写入,因为可能会产生重复操作。而递增的方式可以有效的避免这种情况的发生,因为首先通过get函数确定缓存值小于第一库存门限值的情况下,才进行incr函数操作,只有在进行incr函数操作后的结果值,依旧小于等于第一库存门限值,才确定库存扣减成功,保证了数据的安全性。
步骤606,判断执行结果是否超过第一库存门限值,若是,执行步骤604,否则,执行步骤607。
步骤607,生成扣减成功标识,确定库存扣减成功。
步骤104,将减少后的库存值返回至客户端。
一个具体实施例中,库存操作请求还包括:库存恢复指令。当用户发生退款操作时,需要进行库存恢复操作。库存恢复的操作和上面讲述的扣减操作类似,但是采用的是递减的方式,使用decr函数。通过分别判断获取的每个所述缓存值是否超过第二库存门限值,若所述缓存值超过所述第二库存门限值,在对应的所述Redis分片中增加与所述库存恢复指令对应的库存值;将增加后的所述库存值返回至所述客户端。
一个具体实施例中,若缓存值超过第二库存门限值,在对应的Redis分片中增加与库存恢复指令对应的库存值之后,计算缓存值与第二预设值之差;当缓存值与第二预设值之差,超过第二库存门限值时,生成库存恢复成功指令,确定库存恢复成功。
其中,第二库存门限值可以为0。
执行库存恢复操作之前通过get函数获得缓存值,当缓存值大于0时,执行decr函数。本申请通过判断缓存值是否大于0的原因,是因为在进行库存扣减时采用的是递增的方式,库存初始化状态是0,当库存恢复时也就要进行相应的递增操作。
另外,本申请采用的incr和decr函数都属于原子操作,在执行函数期间不会存在值的中间状态,两个函数的返回值都是当前操作执行成功后的最新结果,能够保证数据的准确性。
具体地,库存恢复流程具体如图7所示:
其中,该库存恢复流程可以在商品详情显示流程的基础上进行说明,需要说明的是,在该流程中的库存操作请求包括库存恢复指令。
步骤701,根据库存恢复指令,调用第一数据处理函数。
步骤702,利用第一数据处理函数,从redis分片中获取与唯一标识对应的缓存值。
步骤703,判断缓存值是否超过第二库存门限值,若是,执行步骤704,否则,执行步骤705。
步骤704,调用并执行第三数据处理函数,得到执行结果。
步骤705,判定不进行库存恢复操作。
步骤706,判定执行结果是否超过第二库存门限值,若是,执行步骤707,否则,执行步骤705。
步骤707,生成恢复成功标识,确定库存恢复成功。
一个具体实施例中,库存数据包括:总库存数据和日库存数据,总库存数据包括:产品总数量,日库存数据包括:当天可处理的产品的数量。
当库存操作请求包括库存扣减指令时,将具有同一用户唯一标识和同一产品唯一标识的库存请求发送至同一Redis分片中;根据库存扣减指令,在同一Redis分片中,减少总库存数据和日库存数据中,与库存扣减指令对应的库存值。
当库存扣操作请求包括库存恢复指令时,将具有同一用户唯一标识和同一产品唯一标识的库存请求发送至同一Redis分片中;根据库存恢复指令,在同一Redis分片中,增加总库存数据和日库存数据中,与库存恢复指令对应的库存值。
本申请通过将操作总库存数据和操作日库存的操作在一个分片中进行操作,能够减少Redis访问多个Redis分片时的网络开销,有效的提高了工作效率。
具体地,当需要对总库存数据和日库存数据同时进行扣减时,由于Redis本身不支持事物,可能会导致总库存数据和日库存数据一个扣减成功,一个扣减失败。例如总库存数据扣减成功,日库存数据扣减失败。这种情况会造成数据不一致。未解决可能会造成数据不一致的问题,采用以下解决措施。
利用用户唯一标识作为哈希函数(hashtag函数)的主键(key),例如,使用每个用户的身份证号码,或者手机号码。由于身份证和手机号是不会重复的,可以唯一的标识出某个用户。下面以用户唯一标识为手机号码为例进行说明。
正常情况下,库存数据的存储形式为:
总库存数据的key:产品编号+手机号码
日库存数据的key:产品编号+手机号码+日期
采用hashtag后的存储形式为:
总库存数据的key:产品编号+”{”+手机号码+”}”
日库存数据的key:产品编号+”{”+手机号码+”}”+日期
根据hashtag函数的用法,我们使用手机号码作为切分键,将手机号码分离出来,能够有效识别到手机号码和产品编号。然后,确定同一手机号码的用户的库存操作请求发送至同一Redis分片中。同时,同一手机号码和同一产品编号的库存操作请求发送至同一Redis分片中。
另外,为了使Redis能够支持事务,利用lua语言。lua是一种轻量级的脚本语言,Redis会将通过lua编写的整体脚本语言,作为一个整体执行,该操作与事务类似。
其中,库存扣减指令中携带需扣减的产品唯一标识的个数。
执行库存扣减流程的脚本如下:
local decrVal=ARGV[1]//从库存扣减指令中获取要扣减的产品唯一标识的个数;
local key=KEYS[1]//从库存操作请求中获取产品唯一标识;
local realVal=redis.call('get',key)//从redis分片中获取产品唯一标识对应的库存值;
if realVal>=decrVal//如果库存值的值大于或等于要扣减的产品唯一标识的个数;
then redis.call('decrby',key,decrVal)//执行decr函数,将库存值减少要扣减的产品唯一标识的个数;
return decrVal//若执行成功,则返回要扣减的产品唯一标识的个数;
else
return'0'//若执行失败,则返回0;
end
执行库存恢复流程的脚本如下:
"local key=KEYS[1]"//从库存恢复指令中获取产品唯一标识;
"local expected=ARGV[1]"//从库存恢复指令中获取产品唯一标识对应的希望缓存值(下面的if里面只有当获取的缓存值和期望缓存值相同时才进行计算);
"local value=ARGV[2]"//从库存恢复指令中获取要替换成的新值;
"local current=redis.call('get',key)"//获取redis分片中产品唯一标识对应的缓存值;
"if current==expected then"//如果获取的缓存值是期望缓存值;
"redis.call('set',key,value)"//执行redis的set函数,将期望缓存值赋给产品唯一标识;
"return 1"//若执行成功,返回1;
"end"
"return 0"//若执行失败,返回0;
本申请实施例提供的该方法,应用在高并发的场景下,获取预设时间段内客户端发送的至少一个库存操作请求,该库存操作请求包括:产品唯一标识和库存扣减指令;将获取的多个库存操作请求发送至各Redis分片中,从Redis分片中获得与每个产品唯一标识对应的缓存值,本申请通过采用多个Redis分片,并将众多库存操作请求发送至不同的Redis分片中,解决了单个分片无法承受高并发的问题,并利用Redis能够支持高并发、高吞吐量的性能,使得众多请求能够在很短的时间内完成请求操作,提高了用户获取产品信息的及时性。
进一步地,分别判断获取的每个缓存值是否超过各自对应的第一库存门限值,若缓存值未超过第一库存门限值,在对应的Redis分片中减少与库存扣减指令对应的库存值;最后,将减少后的库存值返回至客户端,本申请在确定库存操作请求对应的产品唯一标识还存在库存的情况下,将库存值返回至客户端,使得用户能够在很短时间内得到自己想要得到的产品信息,提高了用户体验。
基于同一构思,本申请实施例中提供了一种库存数据的处理装置,该装置的具体实施可参见方法实施例部分的描述,重复之处不再赘述,如图8所示,该装置主要包括:
第一获取模块801,用于获取预设时间段内客户端发送的至少一个库存操作请求,库存操作请求包括:产品唯一标识和库存扣减指令;
第二获取模块802,用于将至少一个库存操作请求发送至各自对应的键值对存储库Redis分片中,从Redis分片中获得与每个产品唯一标识对应的缓存值;
判断模块803,用于分别判断获取的每个缓存值是否超过各自对应的第一库存门限值,若缓存值未超过第一库存门限值,在对应的Redis分片中减少与库存扣减指令对应的库存值;
返回模块804,用于将减少后的库存值返回至客户端。
一个具体实施例中,库存操作请求还包括:用户唯一标识;
第二获取模块802,具体用于将至少一个库存操作请求分为N组,N为Redis分片的数量的整数倍,具有相同用户唯一标识的各库存操作请求属于同一组;为每组的库存操作请求添加同一标记;将具有同一标记的库存操作请求发送至同一Redis分片,并从Redis分片中获得与每个产品唯一标识对应的缓存值。
一个具体实施例中,第一获取模块801,还用于获取Redis分片的数量和同一产品唯一标识的产品总数量;基于Redis分片的数量与产品总数量,确定每个Redis分片需要存储的库存数量;分别选取库存数量的库存数据,存储在各自对应的Redis分片上,库存数据包括:产品唯一标识、与产品唯一标识对应的库存值。
一个具体实施例中,判断模块803,还用于计算缓存值和第一预设值之和;当缓存值和第一预设值之和,未超过第一库存门限值时,生成扣减成功标识,确定库存扣减成功。
一个具体实施例中,库存操作请求还包括:库存恢复指令;该装置还包括:判断恢复模块,判断恢复模块还包括:判断恢复库存模块和恢复返回模块,判断恢复库存模块,用于分别判断获取的每个缓存值是否超过第二库存门限值,若缓存值超过第二库存门限值,在对应的Redis分片中增加与库存恢复指令对应的库存值;恢复返回模块,用于将增加后的库存值返回至客户端。
一个具体实施例中,判断恢复模块,还用于计算缓存值与第二预设值之差;当缓存值与第二预设值之差,超过第二库存门限值时,生成库存恢复成功指令,确定库存恢复成功。
一个具体实施例中,库存数据包括:总库存数据和日库存数据,总库存数据包括:产品总数量,日库存数据包括:当天可处理的产品的数量;第二获取模块802具体用于,将具有同一用户唯一标识和同一产品唯一标识的库存请求发送至同一Redis分片中;返回模块804还用于,根据库存扣减指令,在同一Redis分片中,减少总库存数据和日库存数据中,与库存扣减指令对应的库存值;恢复返回模块还用于,根据库存恢复指令,在同一Redis分片中,增加总库存数据和日库存数据中,与库存恢复指令对应的库存值。
基于同一构思,本申请实施例中还提供了一种电子设备,如图9所示,该电子设备主要包括:处理器901、存储器902和通信总线903,其中,处理器901和存储器902通过通信总线903完成相互间的通信。其中,存储器902中存储有可被至处理器901执行的程序,处理器901执行存储器902中存储的程序,实现如下步骤:获取预设时间段内客户端发送的至少一个库存操作请求;将至少一个库存操作请求发送至各自对应的键值对存储库Redis分片中,从Redis分片中获得与每个产品唯一标识对应的缓存值;分别判断获取的每个缓存值是否超过各自对应的第一库存门限值,若缓存值未超过第一库存门限值,在对应的Redis分片中减少与库存扣减指令对应的库存值;将减少后的库存值返回至客户端。
上述电子设备中提到的通信总线903可以是外设部件互连标准(PeripheralComponent Interconnect,简称PCI)总线或扩展工业标准结构(Extended IndustryStandard Architecture,简称EISA)总线等。该通信总线903可以分为地址总线、数据总线、控制总线等。为便于表示,图9中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器902可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选地,存储器还可以是至少一个位于远离前述处理器901的存储装置。
上述的处理器901可以是通用处理器,包括中央处理器(Central ProcessingUnit,简称CPU)、网络处理器(Network Processor,简称NP)等,还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本申请的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,当该计算机程序在计算机上运行时,使得计算机执行上述实施例中所描述的库存数据的处理方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行该计算机指令时,全部或部分地产生按照本申请实施例所述的流程或功能。该计算机可以时通用计算机、专用计算机、计算机网络或者其他可编程装置。该计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、微波等)方式向另外一个网站站点、计算机、服务器或数据中心进行传输。该计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。该可用介质可以是磁性介质(例如软盘、硬盘、磁带等)、光介质(例如DVD)或者半导体介质(例如固态硬盘)等。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。
Claims (9)
1.一种库存数据的处理方法,其特征在于,包括:
获取预设时间段内客户端发送的至少一个库存操作请求,所述库存操作请求包括:产品唯一标识和库存扣减指令;
将所述至少一个库存操作请求发送至各自对应的键值对存储库Redis分片中,从所述Redis分片中获得与每个所述产品唯一标识对应的缓存值;
分别判断获取的每个所述缓存值是否超过各自对应的第一库存门限值,若所述缓存值未超过所述第一库存门限值,在对应的所述Redis分片中减少与所述库存扣减指令对应的库存值;
将减少后的所述库存值返回至所述客户端;
其中,所述库存操作请求还包括:用户唯一标识;
所述将所述至少一个库存操作请求发送至各自对应的键值对存储库Redis分片中,从所述Redis分片中获得与每个所述产品唯一标识对应的缓存值,包括:
将所述至少一个库存操作请求分为N组,所述N为所述Redis分片的数量的整数倍,具有相同所述用户唯一标识的各所述库存操作请求属于同一组;
为每组的所述库存操作请求添加同一标记;
将具有同一所述标记的库存操作请求发送至同一所述Redis分片,并从所述Redis分片中获得与每个所述产品唯一标识对应的缓存值。
2.根据权利要求1所述的库存数据的处理方法,其特征在于,所述获取预设时间段内的至少一个库存操作请求之前,还包括:
获取所述Redis分片的数量和同一所述产品唯一标识的产品总数量;
基于所述Redis分片的数量与所述产品总数量,确定每个所述Redis分片需要存储的库存数量;
分别选取所述库存数量的库存数据,存储在各自对应的所述Redis分片上,所述库存数据包括:所述产品唯一标识、与所述产品唯一标识对应的库存值。
3.根据权利要求1或2所述的库存数据的处理方法,其特征在于,所述若所述缓存值未超过所述第一库存门限值,在对应的所述Redis分片中减少与所述库存操作指令对应的库存值之后,还包括:
计算所述缓存值和第一预设值之和;
当所述缓存值和所述第一预设值之和,未超过所述第一库存门限值时,生成扣减成功标识,确定库存扣减成功。
4.根据权利要求1所述的库存数据的处理方法,其特征在于,所述库存操作请求还包括:库存恢复指令;
所述方法,还包括:
分别判断获取的每个所述缓存值是否超过第二库存门限值,若所述缓存值超过所述第二库存门限值,在对应的所述Redis分片中增加与所述库存恢复指令对应的库存值;
将增加后的所述库存值返回至所述客户端。
5.根据权利要求4所述的库存数据的处理方法,其特征在于,所述若所述缓存值超过所述第二库存门限值,在对应的所述Redis分片中增加与所述库存恢复指令对应的库存值之后,还包括:
计算所述缓存值与第二预设值之差;
当所述缓存值与所述第二预设值之差,超过所述第二库存门限值时,生成库存恢复成功指令,确定库存恢复成功。
6.根据权利要求4所述的库存数据的处理方法,其特征在于,所述库存数据包括:总库存数据和日库存数据,所述总库存数据包括:产品总数量,所述日库存数据包括:当天可处理的产品的数量;
所述将所述至少一个库存操作请求发送至各自对应的键值对存储库Redis分片中,包括:
将具有同一所述用户唯一标识和同一所述产品唯一标识的所述库存操作请求发送至同一所述Redis分片中;
所述将减少后的所述库存值返回至所述客户端之前,还包括:
根据所述库存扣减指令,在同一所述Redis分片中,减少所述总库存数据和所述日库存数据中,与所述库存扣减指令对应的所述库存值;
所述将增加后的所述库存值返回至所述客户端之前,还包括:
根据所述库存恢复指令,在同一所述Redis分片中,增加所述总库存数据和所述日库存数据中,与所述库存恢复指令对应的所述库存值。
7.一种库存数据的处理装置,其特征在于,包括:
第一获取模块,用于获取预设时间段内客户端发送的至少一个库存操作请求,所述库存操作请求包括:产品唯一标识和库存扣减指令;
第二获取模块,用于将所述至少一个库存操作请求发送至各自对应的键值对存储库Redis分片中,从所述Redis分片中获得与每个所述产品唯一标识对应的缓存值;
判断模块,用于分别判断获取的每个所述缓存值是否超过各自对应的第一库存门限值,若所述缓存值未超过所述第一库存门限值,在对应的所述Redis分片中减少与所述库存扣减指令对应的库存值;
返回模块,用于将减少后的所述库存值返回至所述客户端;
其中,所述库存操作请求还包括:用户唯一标识;
第二获取模块,具体用于将所述至少一个库存操作请求分为N组,所述N为所述Redis分片的数量的整数倍,具有相同所述用户唯一标识的各所述库存操作请求属于同一组;为每组的所述库存操作请求添加同一标记;将具有同一所述标记的库存操作请求发送至同一所述Redis分片,并从所述Redis分片中获得与每个所述产品唯一标识对应的缓存值。
8.一种电子设备,其特征在于,包括:处理器、存储器和通信总线,其中,处理器和存储器通过通信总线完成相互间的通信;
所述存储器,用于存储计算机程序;
所述处理器,用于执行所述存储器中所存储的程序,实现权利要求1-6任一项所述的库存数据的处理方法。
9.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-6任一项所述的库存数据的处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110261492.XA CN112988812B (zh) | 2021-03-10 | 2021-03-10 | 库存数据的处理方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110261492.XA CN112988812B (zh) | 2021-03-10 | 2021-03-10 | 库存数据的处理方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112988812A CN112988812A (zh) | 2021-06-18 |
CN112988812B true CN112988812B (zh) | 2024-02-06 |
Family
ID=76334776
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110261492.XA Active CN112988812B (zh) | 2021-03-10 | 2021-03-10 | 库存数据的处理方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112988812B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114331576A (zh) * | 2021-12-30 | 2022-04-12 | 福建博思软件股份有限公司 | 基于高并发场景下的电子票号快速取票方法及存储介质 |
CN114386904A (zh) * | 2022-01-05 | 2022-04-22 | 北京京东振世信息技术有限公司 | 一种库存预占方法、装置、服务器及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9629928B1 (en) * | 2008-03-31 | 2017-04-25 | Symantec Corporation | Hash-based inventory identification |
CN108133399A (zh) * | 2016-11-30 | 2018-06-08 | 北京京东尚科信息技术有限公司 | 高并发快响应的秒杀库存精准扣减的方法、装置及*** |
CN108665335A (zh) * | 2017-04-01 | 2018-10-16 | 北京京东尚科信息技术有限公司 | 处理购物网站的购物车数据的方法 |
CN110310060A (zh) * | 2019-05-27 | 2019-10-08 | 阿里巴巴集团控股有限公司 | 基于分片的库存管理方法以及装置 |
CN110333951A (zh) * | 2019-07-09 | 2019-10-15 | 北京首汽智行科技有限公司 | 一种商品抢购请求分配方法 |
CN110796401A (zh) * | 2018-08-03 | 2020-02-14 | 京东数字科技控股有限公司 | 库存扣减方法、***和服务器 |
CN111597057A (zh) * | 2020-04-08 | 2020-08-28 | 视联动力信息技术股份有限公司 | 数据处理方法、装置及计算机可读存储介质 |
CN112069253A (zh) * | 2020-08-20 | 2020-12-11 | 上海钧正网络科技有限公司 | 适用于多场景的库存项管理方法、***、终端及存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10410169B2 (en) * | 2014-05-30 | 2019-09-10 | Walmart Apollo, Llc | Smart inventory management and database sharding |
US9760944B2 (en) * | 2014-06-13 | 2017-09-12 | Lisa J. Kleinhandler | Systems, methods, servers, and clients for inventory exchange |
-
2021
- 2021-03-10 CN CN202110261492.XA patent/CN112988812B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9629928B1 (en) * | 2008-03-31 | 2017-04-25 | Symantec Corporation | Hash-based inventory identification |
CN108133399A (zh) * | 2016-11-30 | 2018-06-08 | 北京京东尚科信息技术有限公司 | 高并发快响应的秒杀库存精准扣减的方法、装置及*** |
CN108665335A (zh) * | 2017-04-01 | 2018-10-16 | 北京京东尚科信息技术有限公司 | 处理购物网站的购物车数据的方法 |
CN110796401A (zh) * | 2018-08-03 | 2020-02-14 | 京东数字科技控股有限公司 | 库存扣减方法、***和服务器 |
CN110310060A (zh) * | 2019-05-27 | 2019-10-08 | 阿里巴巴集团控股有限公司 | 基于分片的库存管理方法以及装置 |
CN110333951A (zh) * | 2019-07-09 | 2019-10-15 | 北京首汽智行科技有限公司 | 一种商品抢购请求分配方法 |
CN111597057A (zh) * | 2020-04-08 | 2020-08-28 | 视联动力信息技术股份有限公司 | 数据处理方法、装置及计算机可读存储介质 |
CN112069253A (zh) * | 2020-08-20 | 2020-12-11 | 上海钧正网络科技有限公司 | 适用于多场景的库存项管理方法、***、终端及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112988812A (zh) | 2021-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11036713B2 (en) | Sending notifications in a multi-client database environment | |
CN109922132B (zh) | 表单请求处理的方法、装置、电子设备及存储介质 | |
US8825798B1 (en) | Business event tracking system | |
CN107766080B (zh) | 事务消息处理方法、装置、设备及*** | |
CN112988812B (zh) | 库存数据的处理方法、装置、设备及存储介质 | |
CA3088580C (en) | Translating transaction descriptions using machine learning | |
CN108388512B (zh) | 数据处理方法和服务器 | |
CN112434015B (zh) | 数据存储的方法、装置、电子设备及介质 | |
CN111381986A (zh) | 消息传输方法、***、装置、电子设备及可读存储介质 | |
CN110659971B (zh) | 一种交易数据处理方法及装置 | |
US20200234350A1 (en) | Predicting delay in a process | |
US11941611B2 (en) | Shareable and nested transactions on hash chains | |
CN113360210A (zh) | 数据对账方法、装置、计算机设备和存储介质 | |
CN111125240A (zh) | 一种分布式事务实现方法、装置、电子设备及存储介质 | |
CN113761565A (zh) | 数据脱敏方法和装置 | |
CN111367694A (zh) | 事件处理方法、服务器及计算机存储介质 | |
CN110716911A (zh) | 数据处理方法及装置、电子设备、存储介质 | |
CN115793924A (zh) | 一种银行前端动态菜单的维护方法、装置及设备 | |
CN114218471A (zh) | 数据查询方法、装置、***、电子设备及存储介质 | |
CN114253675A (zh) | 事务处理方法、装置、设备及存储介质 | |
CN114265633A (zh) | 自助设备的应用参数配置、查询方法、设备和存储介质 | |
CN111881149A (zh) | 一种基于Java的大规模并发解决方法及*** | |
US11928423B1 (en) | Transaction entity prediction through learned embeddings | |
CN108256989B (zh) | 准备金***的数据显示方法及*** | |
US12026508B2 (en) | Methods for automated configuration management in platform-as-a-service environments and devices thereof |
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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: Room 221, 2 / F, block C, 18 Kechuang 11th Street, Daxing District, Beijing, 100176 Applicant after: Jingdong Technology Holding Co.,Ltd. Address before: Room 221, 2 / F, block C, 18 Kechuang 11th Street, Daxing District, Beijing, 100176 Applicant before: Jingdong Digital Technology Holding Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |