說 Redis
的緩存機制實現以前,我想先回顧一下 mysql
mysql
mysql
存儲在哪兒呢?nginx
以 windows
爲例,mysql
的表和數據,存儲在data 目錄下frm ibd 後綴的文件中redis
mysql存儲在機器/服務器的 硬盤中算法
因此 mysql
讀寫數據都須要從磁盤讀取 。磁盤的容量,帶寬的大小就影響了網站的訪問速度,讀取的方式,也就是 sql
語句,次數和效率也會影響讀取效率。sql
當訪問量和併發很大的時候,mysql
就撐不住了,據統計,mysql的鏈接池併發數max爲 500-1000數據庫
這時,咱們能夠經過 慢查詢優化
,cdn
,頁面靜態化
, nginx 負載均衡策略
,甚至 分佈式數據庫
來進行 sql優化 ,固然也可使用 高速緩存,好比 redis
。windows
Redis
- 高併發,內存高速cache ,處理讀寫io的高併發容忍。緩存
redis 一般被使用來將那些常常被訪問的內容緩存在內存中。服務器
不少人談到redis ,哦,k-v 存儲數據庫啊, 速度快啊!爲何快啊? 人家存內存啊,能不快嗎?關鍵人家還支持複雜的數據結構,list 什麼的,不少高併發場景均可以使用。 好比:電商秒殺場景的解決策略與具體原理數據結構
remote dictionary server (遠程數據服務) 內存高速緩存數據庫 數據模型爲 k-v 也就是redis 的一種最常常使用的數據類型 string
k-v 的算法時間複雜度 但是 0(1) 而mysql 的查詢是基於表關聯技術 ,這就是nosql的優點所在。
附上redis 和memcahe 的比較
Redis支持master-slave(主-從)模式應用,高可用的cache系統,支持集羣服務器之間數據同步。
Redis支持數據持久化,能夠將內存中的數據保持在磁盤中,重啓的時候能夠再次加載進行使用。
redis 比sql 到底快多少呢?
1 從存儲媒介來看,內存比磁盤的讀取速度 hash查找是100w/s 的數量級
2 多路複用io (todo)
redis 和mysql 絕對不是競爭的關係,在工做中合理運用二者才能達到更好的效果。