一、為什么使用緩存?
當網站的處理和訪問量非常大的時候,我們的數據庫的壓力就變大了,數據庫的連接池,數據庫同時處理數據的能力就會受到很大的挑戰,一旦數據庫承受了其最大承受能力,網站的數據處理效率就會大打折扣。此時就要使用高并發處理、負載均衡和分布式數據庫,而這些技術既花費人力,又花費資金。
二、什么是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:適用于對讀寫效率要求都很高,數據處理業務復雜和對安全性要求較高的系統(如新浪微博的計數和微博發布部分系統,對數據安全性、讀寫要求都很高)。
四、如何redis數據和mysql數據同步?
redis其讀取速度快,但是redis 怎么和數據庫同步呢,怎么能把數據庫的所有數據存到redis里面,能使用戶更快速的查找。
方法1:mysql 同步到redis:解析mysql的binlog,然后做同步處理,可以使用的庫有:open-replicator(https://Github.com/whitesock/open-replicator)
方法2:同步redis數據到mysql:(https://github.com/leonchen83/redis-replicator)
后來發現,redis讀取速度快,也沒有必要把所有的數據都放到redis里面,redis里面只放使用頻繁,用戶操作量較大的數據,或者用戶近期使用的數據。解決辦法:
1、讀取數據的時候先從redis里面查,若沒有,再去數據庫查,同時寫到redis里面,并且要設置失效時間。
2、存數據的時候要具體情況具體分析,可以選擇同時插到數據庫和redis(要是存放到redis中,最好設置失效時間),也可以選擇直接插到數據庫里面,少考慮一些問題。