redis 搭配 SQL 實踐問題
問題描述
團(tuán)隊準(zhǔn)備做一套系統(tǒng),因為考慮到后期的高并發(fā)的問題,所以想在開始階段就將 NOSQL 設(shè)計進(jìn)來。
不想把 redis 做的和memcached作用一樣,只是簡單的緩存。想將 redis 設(shè)計成數(shù)據(jù)的中間層。大概流程如下:
讀取數(shù)據(jù),如果redis中沒有,從SQL讀取然后放到redis里面并設(shè)置過期時間。修改數(shù)據(jù)(更新、刪除、添加),先直接在redis操作,這里可能涉及到處于業(yè)務(wù)邏輯考慮,在redis里面使用list作為索引的情況,在redis里面刪除、更新、添加,然后使用一個例如redis的訂閱發(fā)布功能實現(xiàn)的隊列,“異步”的更新 mysql沒有太多的開發(fā)經(jīng)驗,這樣做的目的就是為了讀取和寫入的分離,而且利用redis的優(yōu)勢,降低熱數(shù)據(jù)的讀寫造成的損耗。
有類似經(jīng)驗的希望提出需要改進(jìn)的地方,或者這個整個就是個不好的方案。
- - - 3月12日更新內(nèi)容 - - -
今天又看了百度數(shù)據(jù)庫中間層的PPT,于是特意去搜索了dbproxy的相關(guān)內(nèi)容,思想中介紹說是通過sql語句的MD5值匹配進(jìn)行緩存的選擇,這樣的問題是很容易造成數(shù)據(jù)更新的延時。于是我又想到了我自己的方案,將 redis 和 SQL 數(shù)據(jù)庫搭配做成數(shù)據(jù)庫中間層,這樣是不是就可以迎合對數(shù)據(jù)實時要求很高的應(yīng)用了。
- - - 3月13日更新內(nèi)容 - - -
和評論中的 @魚丸粗面 討論了下 http://www.oschina.net/p/mysql-syncer 這個項目,這個項目更多的是通過首先更新到 Mysql,然后再根據(jù)Mysql的更新內(nèi)容去更新 其他數(shù)據(jù)庫例如redis。有一個問題很明顯,就是高并發(fā)下寫入Mysql是個可怕的事情,所以我之前想到的是直接更新redis然后異步更新Mysql,最后將redis作為緩沖層。如下圖(來自新浪某PPT)
問題解答
回答1:感覺更新redis時將sql入隊列然后再操作。控制好邏輯即可。
相關(guān)文章:
1. 如何解決docker宿主機(jī)無法訪問容器中的服務(wù)?2. docker 下面創(chuàng)建的IMAGE 他們的 ID 一樣?這個是怎么回事????3. javascript - 請指條明路,angular的$event,在select中卻是undefined?4. 如何修改vim插件vimwiki中Vimwiki2HTML的一些細(xì)節(jié)5. javascript - JS事件委托問題6. javascript - 關(guān)于jquery的remove()方法7. JavaScript中怎么理解=、==和===8. java - Spring事務(wù)回滾問題9. javascript - vue.js如何遞歸渲染組件.10. mongodb - Mongo java驅(qū)動中,有沒有封裝好的函數(shù),可以直接取到文檔中的某個具體的值,而不是一個文檔?或者有沒有方法實現(xiàn)??
