架構圖
發紅包
1.爲了減輕服務器端壓力,在客戶端對紅包金額數值進行拆分
2.用算法爲每個紅包加一個唯一標識id。此處我採用的是uuid(雪花算法)+ip+時間戳
3.請求通過nginx分發到各個服務器。
4.服務器把數據雙寫到數據庫中。
5.服務器同時也把數據雙寫寫入redis中。
搶紅包
1.搶紅包請求通過nginx分發到各個服務器。
2.雙寫到同一個消息隊列中一個個處理。
3.將數據雙寫入同一個redis中(此時,便已經會返回你搶到了多少錢,但是真正多少錢此時還沒有同步到數據庫中)
4.每過一段時間便會把redis中的數據同步到數據庫中。
5.返回發紅包時客戶端拆分成的一份金額。
如果沒有同步到數據庫那我查看到的金額是怎麼呢?
1.如果併發不高會很快同步到數據庫
2.如果併發高的情況下,會先在客戶端同步假數據顯示,但是這個金額依舊可以操作,客戶端會幫你進行相應的處理。
爲什麼使用nginx?
nginx用C++寫的,apache用java寫,會慢一點
爲什麼使用redis?
1.redis的抗併發能力比數據庫好很多倍。
2.存redis相當於存緩存,增刪改查都很快。
爲什麼雙寫?
有備份。如果有一個崩潰,另外一個可以繼續使用。