說 Redis 的緩存機制實現之前,我想先回顧一下 mysql
mysql 存儲在哪兒呢?
以 windows 為例,mysql 的表和數據,存儲在data 目錄下frm ibd 後綴的文件中
mysql存儲在機器/服務器的 硬盤中
所以 mysql 讀寫數據都需要從磁盤讀取 。磁盤的容量,帶寬的大小就影響了網站的訪問速度,讀取的方式,也就是 sql語句,次數和效率也會影響讀取效率。
當訪問量和併發很大的時候,mysql 就撐不住了,據統計,mysql的連接池併發數max為 500-1000
這時,我們可以通過 慢查詢優化 ,cdn ,頁面靜態化, nginx 負載均衡策略 ,甚至 分佈式數據庫 來進行 sql優化 ,當然也可以使用 高速緩存,比如 redis。
Redis - 高併發,內存高速cache ,處理讀寫io的高併發容忍。
redis 通常被使用來將那些經常被訪問的內容緩存在內存中。
很多人談到redis ,哦,k-v 存儲數據庫啊, 速度快啊!為什麼快啊? 人家存內存啊,能不快嗎?關鍵人家還支持複雜的數據結構,list 什麼的,很多高併發場景都可以使用。 比如:電商秒殺場景的解決策略與具體原理
remote dictionary server (遠程數據服務) 內存高速緩存數據庫 數據模型為 k-v 也就是redis 的一種最經常使用的數據類型 string
k-v 的算法時間複雜度 可是 0(1) 而mysql 的查詢是基於表關聯技術 ,這就是nosql的優勢所在。
附上redis 和memcahe 的比較
- Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
- Redis支持master-slave(主-從)模式應用,高可用的cache系統,支持集群服務器之間數據同步。
- Redis支持數據持久化,可以將內存中的數據保持在磁盤中,重啟的時候可以再次加載進行使用。
- Redis單個value的最大限制是1GB,(k-v),memcached只能保存1MB的數據。(k:250kb v:1mb)
redis 比sql 到底快多少呢?
1 從存儲媒介來看,內存比磁盤的讀取速度 hash查找是100w/s 的數量級
2 多路複用io (todo)
redis 和mysql 絕對不是競爭的關係,就好像你拿485和86去秋名山飆車,他們應該是一對好基友,在工作中合理運用兩者才能達到更好的效果。
閱讀更多 程序員小新人學習 的文章