redis做mysql的緩存,怎麼把redis數據和mysql數據同步?

一、爲什麼使用緩存?

      當網站的處理和訪問量非常大的時候,我們的數據庫的壓力就變大了,數據庫的連接池,數據庫同時處理數據的能力就會受到很大的挑戰,一旦數據庫承受了其最大承受能力,網站的數據處理效率就會大打折扣。此時就要使用高併發處理、負載均衡和分佈式數據庫,而這些技術既花費人力,又花費資金。

二、什麼是redis緩存到mysql?

Redis其實就是說把表中經常訪問的記錄放在了Redis中,然後用戶查詢時先去查詢Redis再去查詢MySQL,確實實現了讀寫
分離,也就是Redis只做讀操作。由於緩存在內存中,所以查詢會很快。對於一個sql語句格式的數據請求,首先計算該語句的MD5並據此得到結果集標識符,然後利用該標識符在Redis中查找該結果集。注意,結果集中的每一行都有一個相應的鍵,這些鍵都存儲在一個Redis集合結構中。如果Redis中不存在這樣一個集合,說明要找的結果集不在Redis中,所以需要執行相應的sql語句,在Mysql中查詢到相應的結果集,然後按照上面所說的辦法把結果集中的每一行以字符串或哈希的形式存入Redis。
三、爲什麼使用redis做mysql的緩存,還有其他緩存策略嗎?

Memcatched和Redis
1.性能上:
       性能上都很出色,具體到細節,由於Redis只使用單核,而Memcached可以使用多核,所以平均每一個核上Redis在存儲小數據時比Memcached性能更高。而在100k以上的數據中,Memcached性能要高於Redis,雖然Redis最近也在存儲大數據的性能上進行優化,但是比起 Memcached,還是稍有遜色。
2.內存空間和數據量大小:
      MemCached可以修改最大內存,採用LRU算法。Redis增加了VM的特性,突破了物理內存的限制。
3.操作便利上:
      MemCached數據結構單一,僅用來緩存數據,而Redis支持更加豐富的數據類型,也可以在服務器端直接對數據進行豐富的操作,這樣可以減少網絡IO次數和數據體積。
4.可靠性上:
       MemCached不支持數據持久化,斷電或重啓後數據消失,但其穩定性是有保證的。Redis支持數據持久化和數據恢復,允許單點故障,但是同時也會付出性能的代價。
5.應用場景:
       Memcached:動態系統中減輕數據庫負載,提升性能;做緩存,適合多讀少寫,大數據量的情況(如人人網大量查詢用戶信息、好友信息、文章信息等)。Redis:適用於對讀寫效率要求都很高,數據處理業務複雜和對安全性要求較高的系統(如新浪微博的計數和微博發佈部分系統,對數據安全性、讀寫要求都很高)。

參考文章:https://www.cnblogs.com/work115/p/5584646.html

四、如何redis數據和mysql數據同步?

      redis其讀取速度快,但是redis 怎麼和數據庫同步呢,怎麼能把數據庫的所有數據存到redis裏面,能使用戶更快速的查找。

方法1:mysql 同步到redis:解析mysql的binlog,然後做同步處理,可以使用的庫有:open-replicatorhttps://github.com/whitesock/open-replicator

方法2:同步redis數據到mysql:(https://github.com/leonchen83/redis-replicator

後來發現,redis讀取速度快,也沒有必要把所有的數據都放到redis裏面,redis裏面只放使用頻繁,用戶操作量較大的數據,或者用戶近期使用的數據。解決辦法: 
1:讀取數據的時候先從redis裏面查,若沒有,再去數據庫查,同時寫到redis裏面,並且要設置失效時間。 
2:存數據的時候要具體情況具體分析,可以選擇同時插到數據庫和redis(要是存放到redis中,最好設置失效時間),也可以選擇直接插到數據庫裏面,少考慮一些問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章