redis mysql完美結(jié)合 php redis做mysql的緩存,怎么異步redis同步到mysql數(shù)據(jù)庫?
php redis做mysql的緩存,怎么異步redis同步到mysql數(shù)據(jù)庫?正常情況下,沒有問題,但有人使用惡意腳本刷獎,即同一個人發(fā)起大量請求,一秒鐘可能是一兩百個請求甚至更多,而且多人刷獎。問
php redis做mysql的緩存,怎么異步redis同步到mysql數(shù)據(jù)庫?
正常情況下,沒有問題,
但有人使用惡意腳本刷獎,即同一個人發(fā)起大量請求,一秒鐘可能是一兩百個請求甚至更多,而且多人刷獎。
問題出在步驟1
例如,假設每個人只能抽一次獎,因為請求太快,同一個人的a和B請求幾乎同時出現(xiàn),a完成抽獎邏輯,在抽獎表中插入記錄時,由于MySQL的性能,B無法讀取表中的記錄,因為a的插入根本沒有完成。所以B請求將再次通過抽獎邏輯。讓同一個人畫兩次,然后插入繪圖表。
我關(guān)心的是,在a插入抽獎表的那一刻,B是否能判斷抽獎表中有數(shù)據(jù)。
所以我覺得問題是MySQL寫得不夠快,讀得不夠快,所以我想用redis作為緩存層。
我們100%抽獎,而且只限制獎品的數(shù)量,所以我們一定要保證每個人只能抽獎一次,盡量在程序?qū)用娼鉀Q。
php redis做mysql的緩存,怎么異步redis同步到mysql數(shù)據(jù)庫?
如果你這樣問,你可能不了解redis在實際工作中的使用場景。
Redis是一個開放源碼(BSD許可)內(nèi)存數(shù)據(jù)結(jié)構(gòu)存儲系統(tǒng),可用作數(shù)據(jù)庫、緩存和消息中間件。
主要用于以下場景:
從上面我們可以看出,在實際工作中,redis并不是像MySQL等關(guān)系型數(shù)據(jù)庫那樣用來保存數(shù)據(jù),而是作為中間件或緩存服務器,在MySQL數(shù)據(jù)之前保護MySQL等關(guān)系型數(shù)據(jù)庫。
事實上,許多大型互聯(lián)網(wǎng)項目都會使用MySQL(或任何關(guān)系數(shù)據(jù)庫)NoSQL組合方案。
NoSQL適合存儲非結(jié)構(gòu)化數(shù)據(jù),如文章和評論:
通過鍵獲取數(shù)據(jù)的效率非常高,但對連接或其他結(jié)構(gòu)化查詢的支持相對較差
此時,一位it編碼人員路過并發(fā)表了個人意見。
要與redis異步同步MySQL數(shù)據(jù),大多數(shù)時候都是以隊列的形式。例如,PHP使用resque包進行部署,實現(xiàn)自動隊列的形式,打開一些額外的線程監(jiān)控,將一些操作推送到隊列中,然后在被監(jiān)控后執(zhí)行相關(guān)操作(一個控制器和一個方法)同步到MySQL表。
也可以通過spoole擴展,它封裝了redis的異步操作。它可以方便地實現(xiàn)redis的異步操作,然后將數(shù)據(jù)同步到MySQL。
最后,喜歡的小伙伴可以給我表揚或者關(guān)注我哦。