真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

防止商品超賣的思路有哪些

本篇內(nèi)容介紹了“防止商品超賣的思路有哪些”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)建站主營順義網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,app軟件開發(fā)公司,順義h5微信小程序開發(fā)搭建,順義網(wǎng)站營銷推廣歡迎順義等地區(qū)企業(yè)咨詢

一、如何防止超賣

在防止超賣的邏輯編寫時(shí),加鎖這個(gè)思路是沒有問題的,但是要加什么鎖,鎖哪一段邏輯就成為了問題。

1、思路1

jvm提供了synchronized和reentrantlock。
這兩個(gè)鎖適合在減庫存的時(shí)候使用嗎?
理論上講,是可以使用的,但是服務(wù)必須是單機(jī)部署。如果是多臺服務(wù)器,就會變成如下場景,鎖根本沒有作用。

防止商品超賣的思路有哪些防止商品超賣的思路有哪些

3、思路3

我在網(wǎng)上曾看到有人列舉前面兩種實(shí)現(xiàn)方式,這里重點(diǎn)說明下,單機(jī)鎖和分布式鎖是不推薦的!
其實(shí)防超賣最終的目的是防止數(shù)據(jù)庫的庫存(goods_num)小于0。導(dǎo)致小于0的原因是多個(gè)線程在程序中計(jì)算庫存,然后在賦值給數(shù)據(jù)庫。這么多鎖要解決的問題,其實(shí)一條sql就可以實(shí)現(xiàn)。

update t_goods set goods_num=goods_num - 1 where goods_id=1 and goods_num>0

如上所示。例如賣了id為1的商品1件。這時(shí)庫存減一,重點(diǎn)是where條件中判斷了goods_num>0。這樣就間接的限制了只有庫存在大于1的時(shí)候該sql才會減一。直接就防止了超賣的現(xiàn)象。
其實(shí)這個(gè)時(shí)候應(yīng)該就會有人抬杠了,這是電商場景呀,直接連接數(shù)據(jù)庫壓力很大的。其實(shí)這個(gè)時(shí)候就要在減庫存之前進(jìn)行友好的限流了。
redis提供了幾個(gè)命令:

  • incr——加

  • decr——減

  • incrby——階梯加

  • decrby——階梯減
    這幾個(gè)都是原子操作,并且在執(zhí)行成功之后會返回結(jié)果。例如:

redis> SET failure_times 10OK
redis> DECR failure_times(integer) 9

這樣如果有場景數(shù)據(jù)庫減庫存壓力太大,可以雙重判斷,商品開賣之前,redis緩存商品的庫存,先通過DECR減少redis庫存,再減少數(shù)據(jù)庫庫存,當(dāng)redis庫存已經(jīng)為0的時(shí)候,就沒有必要再減少數(shù)據(jù)庫的數(shù)據(jù)了。

“防止商品超賣的思路有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


當(dāng)前文章:防止商品超賣的思路有哪些
本文地址:http://weahome.cn/article/pddpdo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部