久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

秒殺踩坑記:庫存超賣

本案例發(fā)生在別人身上,覺得有學習借鑒的意義特轉(zhuǎn)載過來記錄一下。

PM 說有一個類似于搶購的小需求,我們第一反應就想到是典型的防止庫存超賣場景,于是理所因當?shù)剡x用了 redis 方案。只要保證是原子操作,即可防止庫存超賣,自然想到使用 Incr/Decr 這類原子操作。

創(chuàng)新互聯(lián)建站是專業(yè)的利州網(wǎng)站建設公司,利州接單;提供網(wǎng)站設計制作、網(wǎng)站建設,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行利州網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

查看 PHP 的 Redis 擴展關于 Incr 方法的說明:

/**
 * Increment the number stored at key by one.
 *
 * @param   string $key
 * @return  int    the new value
 * @link    http://redis.io/commands/incr
 *      
 */
public function incr( $key ) {}

可見,Incr 方法返回的是 key 操作后的新值,即 ++1 后的值,于是我們寫出了如下代碼:

$num = $redis->incr($key);
if ($num < $max) {
    //入搶購成功隊列,異步去執(zhí)行搶購成功邏輯
} else {
    //不好意思呢,已經(jīng)被搶完了
}

不知道你有沒有聞到這段代碼的壞味道,在大部分情況下會如你所想地運行,但是特殊場景下會 出現(xiàn)判斷失效 的邏輯問題,例如:

1、key 由于某些原因失效了;
2、Incr 操作失敗了,不會拋異常并返回 false;

上述兩種情況,都會導致$num < $max條件成立,進而導致更嚴重的邏輯問題,最終超賣。

問題描述與分析

我們就搶購開始后就遇到了上述的第二種情況,下面描述整個過程。先通過 Cat 監(jiān)控平臺觀察到訪問量急劇上升,開始擔心應用服務坑不住,隨后日志平臺報警 Incr 操作存在異常幾率,再然后就出現(xiàn)超賣情況,緊急情況只能關閉業(yè)務開關。是什么原因?qū)е屡袛鄺l件成立?

通過日志定位到 Incr 操作問題,便 Telnet 連接到線上 Redis 服務,發(fā)現(xiàn)了異常情況:

\# 查看值
GET key
100
# 嘗試修改
INCR key
READONLY You can't write against a read only slave

INFO
# Replication
role:slave

可以看出來,該連接的機器目前處于從機狀態(tài),不可寫操作,所以 Incr 操作返回 false,同時 PHP 不同類型比較會存在隱式轉(zhuǎn)化,所以false < $num恒成立,導致計數(shù)器失效。而這一切又是由于 Redis 高可用不完善,當主從切換后,VIP 未能成功漂移,這部分是運維的鍋,研發(fā)代碼不夠健壯,這鍋同樣要背 >﹏<。

優(yōu)化方案

首先,修改代碼使其更加健壯,增加計數(shù)器容錯處理:

$num = $redis->incr($key);
if ($num > 0 && $num < $max) {
    //入搶購成功隊列,異步去執(zhí)行搶購成功邏輯
} else {
    //不好意思呢,已經(jīng)被搶完了
}

然后,切換 Redis 源到高可用集群(Codis),測試并重新上線,第二日的搶購已經(jīng)正常,看著 Cat 上流量逐漸平穩(wěn),心里也踏實了。

查看來源

網(wǎng)頁標題:秒殺踩坑記:庫存超賣
本文來源:http://sd-ha.com/article4/jgsjoe.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設靜態(tài)網(wǎng)站、移動網(wǎng)站建設品牌網(wǎng)站設計網(wǎng)站制作、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設