redis 搭配 SQL 實踐問題
問題描述
團隊準備做一套系統,因為考慮到后期的高并發的問題,所以想在開始階段就將 NOSQL 設計進來。
不想把 redis 做的和memcached作用一樣,只是簡單的緩存。想將 redis 設計成數據的中間層。大概流程如下:
讀取數據,如果redis中沒有,從SQL讀取然后放到redis里面并設置過期時間。修改數據(更新、刪除、添加),先直接在redis操作,這里可能涉及到處于業務邏輯考慮,在redis里面使用list作為索引的情況,在redis里面刪除、更新、添加,然后使用一個例如redis的訂閱發布功能實現的隊列,“異步”的更新 mysql沒有太多的開發經驗,這樣做的目的就是為了讀取和寫入的分離,而且利用redis的優勢,降低熱數據的讀寫造成的損耗。
有類似經驗的希望提出需要改進的地方,或者這個整個就是個不好的方案。
- - - 3月12日更新內容 - - -
今天又看了百度數據庫中間層的PPT,于是特意去搜索了dbproxy的相關內容,思想中介紹說是通過sql語句的MD5值匹配進行緩存的選擇,這樣的問題是很容易造成數據更新的延時。于是我又想到了我自己的方案,將 redis 和 SQL 數據庫搭配做成數據庫中間層,這樣是不是就可以迎合對數據實時要求很高的應用了。
- - - 3月13日更新內容 - - -
和評論中的 @魚丸粗面 討論了下 http://www.oschina.net/p/mysql-syncer 這個項目,這個項目更多的是通過首先更新到 Mysql,然后再根據Mysql的更新內容去更新 其他數據庫例如redis。有一個問題很明顯,就是高并發下寫入Mysql是個可怕的事情,所以我之前想到的是直接更新redis然后異步更新Mysql,最后將redis作為緩沖層。如下圖(來自新浪某PPT)
問題解答
回答1:感覺更新redis時將sql入隊列然后再操作。控制好邏輯即可。
相關文章:
1. windows誤人子弟啊2. 冒昧問一下,我這php代碼哪里出錯了???3. MySQL主鍵沖突時的更新操作和替換操作在功能上有什么差別(如圖)4. python - linux怎么在每天的凌晨2點執行一次這個log.py文件5. 數據庫 - Mysql的存儲過程真的是個坑!求助下面的存儲過程哪里錯啦,實在是找不到哪里的問題了。6. 實現bing搜索工具urlAPI提交7. mysql優化 - MySQL如何為配置表建立索引?8. 如何用筆記本上的apache做微信開發的服務器9. 我在網址中輸入localhost/abc.php顯示的是not found是為什么呢?10. 關于mysql聯合查詢一對多的顯示結果問題
