《MySQL與Redis緩衝架構》

來源:互聯網
上載者:User

標籤:

 

《如何使用redis做mysql的緩衝》

 

應用Redis實現資料的讀寫,同時利用隊列處理器定時將資料寫入mysql。

同時要注意避免衝突,在redis啟動時去mysql讀取所有表索引值存入redis中,往redis寫資料時,對redis主鍵自增並進行讀取,若mysql更新失敗,則需要及時清除緩衝及同步redis主鍵。

 

這樣處理,主要是即時讀寫redis,而mysql資料則通過隊列非同步處理,緩解mysql壓力,不過這種方法應用情境主要基於高並發,而且redis的高可用叢集架構相對更複雜,一般不是很推薦。

 

《記憶體資料庫和mysql的同步機制》

redis如何做到和mysql資料庫的同步

 

【方案一】http://www.zhihu.com/question/23401553?sort=created

程式實現mysql更新、添加、刪除就刪除redis資料。

程式查詢redis,不存在就查詢mysql並儲存redis

 

redis和mysql資料的同步,代碼層級大致可以這樣做:

讀: 讀redis->沒有,讀mysql->把mysql資料寫回redis

寫: 寫mysql->成功,寫redis(捕捉所有mysql的修改,寫入和刪除事件,對redis進行操作)

 

【方案二】http://www.linuxidc.com/Linux/2015-01/111380.htm

即時擷取mysql binlog進行解析,然後修改redis

MySQL到Redis資料複製方案

無論MySQL還是Redis,自身都帶有資料同步的機制,像比較常用的MySQL的Master/Slave模式,就是由Slave端分析Master的binlog來實現的,這樣的資料複製其實還是一個非同步過程,只不過當伺服器都在同一內網時,非同步延遲幾乎可以忽略。

 

那麼理論上我們也可以用同樣方式,分析MySQL的binlog檔案並將資料插入Redis。但是這需要對binlog檔案以及MySQL有非常深入的理解,同時由於binlog存在Statement/Row/Mixedlevel多種形式,分析binlog實現同步的工作量是非常大的。

 

因此這裡選擇了一種開發成本更加低廉的方式,借用已經比較成熟的MySQL UDF,將MySQL資料首先放入Gearman中,然後通過一個自己編寫的PHP Gearman Worker,將資料同步到Redis。比分析binlog的方式增加了不少流程,但是實現成本更低,更容易操作。

 

【方案三】

使用mysql的udf,詳情請看MySQL :: MySQL 5.1 Reference Manual :: 22.3 Adding New Functions to MySQL 然後通過trigger在表update和insert之後進行函數的調用,寫入到redis中去。大致是這個樣子。

 

【http://www.zhihu.com/question/27738066】

1.首先明確是不是一定要上緩衝,當前架構的瓶頸在哪裡,若瓶頸真是資料庫操作上,再繼續往下看。

2.明確memcached和redis的區別,到底要使用哪個。前者終究是個緩衝,不可能永久儲存資料(LRU機制),支援分布式,後者除了緩衝的同時也支援把資料持久化到磁碟等,redis要自己去實現分布式緩衝(貌似最新版本的已整合),自己去實現一致性hash。因為不知道你們的應用情境,不好說一定要用memcache還是redis,說不定用mongodb會更好,比如在儲存日誌方面。

3.緩衝量大但又不常變化的資料,比如評論。

4.你的思路是對的,清晰明了,讀DB前,先讀緩衝,如果有直接返回,如果沒有再讀DB,然後寫入緩衝層並返回。

5.考慮是否需要主從,讀寫分離,考慮是否分布式部署,考慮是否後續水平伸縮。

6.想要一勞永逸,後續維護和擴充方便,那就將現有的代碼架構最佳化,按你說的替換資料庫組件需要改動大量代碼,說明當前架構存在問題。可以利用現有的一些架構,比如SpringMVC,將你的應用程式層和業務層和資料庫層解耦。再上緩衝之前把這些做好。

7.把讀取緩衝等操作做成服務元件,對業務層提供服務,業務層對應用程式層提供服務。

8.保留未經處理資料庫組件,最佳化成服務元件,方便後續業務層靈活調用緩衝或者是資料庫。

9.不建議一次性全量上緩衝,最開始不動核心業務,可以將邊緣業務先換成緩衝組件,一步步換至核心業務。

10.重新整理記憶體,以memcached為例,新增,修改和刪除操作,一般採用lazy load的策略,即新增時唯寫入資料庫,並不會馬上更新Memcached,而是等到再次讀取時才會載入到Memcached中,修改和刪除操作也是更新資料庫,然後將Memcached中的資料標記為失效,等待下次讀取時再載入。

 

《MySQL與Redis緩衝架構》

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.