redis解決高並發問題,如商品秒殺,redis商品
做夢人 2017-08-04 10:56
http://www.toutiao.com/a6450243964058140941/?tt_from=weixin&utm_campaign=client_share&app=news_article&utm_source=weixin&iid=12675044243&utm_medium=toutiao_android&wxshare_count=1
redis真的是一個很好的技術,它可以很好的在一定程度上解決網站一瞬間的並發量,例如商品搶購秒殺等活動。。。
redis之所以能解決高並發的原因是它可以直接存取記憶體,而以往我們用的是資料庫(硬碟),提高了訪問效率,解決了資料庫伺服器壓力。
為什麼redis的地位越來越高,我們為何不選擇memcache,這是因為memcache只能儲存字串,而redis儲存類型很豐富(例如有字串、LIST、SET等),memcache每個值最大隻能儲存1M,儲存資源非常有限,十分消耗記憶體資源,而redis可以儲存1G,最重要的是memcache它不如redis安全,當伺服器發生故障或者意外關機等情況時,redsi會把記憶體中的資料備份到硬碟中,而memcache所儲存的東西全部丟失;這也說明了memcache不適合做資料庫來用,可以用來做緩衝。
下面用redis解決瞬間秒殺活動來說明:
下面這個程式類比了20w人一瞬間湧入這個頁面進行秒殺,能夠秒殺成功的只有500人,我們把先進來的使用者放入redis隊列中,當隊列中的使用者達到500時,後來使用者就轉到秒殺結束頁面。這裡用隨機數來表示不同的使用者。
這裡我們可以看到秒殺成功的第一個使用者的id是208522,秒殺成功的最後一個使用者是176260,參與秒殺人數總共是20w。(讓大家注意這些的原因是為了驗證下面的準確性)。
接下來我們依次從隊列中把秒殺成功的500個使用者取出來並觀察第一個使用者和最後一個使用者是否跟之前的記錄值一樣
我們可以看到從秒殺成功隊列中依次取出的第一個使用者id是208522,最後一個使用者是176260,可以看出結果是很準確的。
redis在解決高並發這方面的能力是真的挺不錯的。