目錄
微信搶紅包已經在我們生活中很常見的場景了,特別是年底公司開年會和春節2個時間段,長輩領導都發紅包,手都點抽筋了,也沒搶到多少。
在這段時間裡,對於單個群裡的單個紅包,qp也是上千的,對於整個微信紅包系統,高峰的併發量是上億的。
高峰的搶紅包有3大特點:
1.包紅包
先把金額拆解為小金額的紅包,例如 總金額1000元,發10個,使用者在點儲存的時候,就自動拆解為10個隨機小紅包。
這裡的儲存就是個難題,多個金額(例如10個小金額的紅包)如何儲存?
2.搶紅包
高併發的搶紅包時核心的關鍵技術,就是控制各個小紅包的操作的原子性。
例如 10個紅包在100人的群裡被搶,10個紅包被搶走乙個的同時要紅包的庫存減1,即剩下19個。在整個過程中搶走乙個和紅包庫存減1個是乙個原子操作。
list的pop操作彈出乙個元素的同時會自動從佇列裡面剔除該元素,它是乙個原子性操作。
包紅包/**
* 包紅包的介面
*/@getmapping(value = "/set")
public long setredpacket(int total, int count) ={}",key,packet);
return n;
}拆解紅包
/*** 拆解紅包
* 1.紅包金額要被全部拆解完
* 2.紅包金額不能差太離譜
* total 紅包金額
* count 紅包數量
*/public integer splitredpacket(int total, int count)
use = use + array[i];
}return array;
}搶紅包
www.cppcns.com /**
* 搶紅包介面
*/@getmapping(value = "/rob")
public int rob(long redid,long userid) 搶到{}",userid,obj);
//todo 非同步把資料落地到資料庫上
return (integer) obj;
}//-1 代表搶完
return -1;
}//-2 代表已搶
return -2;
}
微信搶紅包演算法實現
只討論金額隨機的情況,需要滿足規則 所有人搶到金額之和要等於紅包總金額1.每個人至少搶到一分錢1.要保證所有人搶到金額的機率相等方案一 每個人點進來領,金額隨機,隨機的上限是當前剩餘的紅包金額。每次搶到的金額 隨機區間 0,剩餘紅包金額 分析 這樣做的缺陷是越早領越有優勢,因為每次搶到的金額 隨機區...
微信搶紅包架構設計
實時性 為什麼明明搶到紅包,點開後發現沒有?答 2014年的紅包一點開就知道金額,分兩次操作,先搶到金額,然後再轉賬。2015年的紅包的拆和搶是分離的,需要點兩次,因此會出現搶到紅包了,但點開後告知紅包已經被領完的狀況。進入到第乙個頁面不代表搶到,只表示當時紅包還有。分配 紅包裡的金額怎麼算?為什麼...
Redis 分布式快取
1 官網 3 菜鳥教程 4 redis的集群教程 5 史上最全redis高可用技術解決方案大全 一 redis的特點?redis 本質上是乙個 key value 型別的記憶體資料庫,很像 memcached,整個 資料庫統統載入在記憶體當中進行操作,定期通過非同步操作把資料庫資料 flush 到硬...