redis緩存機制和底層實現

說 Redis 的緩存機制實現以前,我想先回顧一下 mysqlmysql

mysql 存儲在哪兒呢?nginx

以 windows 爲例,mysql 的表和數據,存儲在data 目錄下frm ibd 後綴的文件中redis

mysql存儲在機器/服務器的 硬盤中算法

因此 mysql 讀寫數據都須要從磁盤讀取 。磁盤的容量,帶寬的大小就影響了網站的訪問速度,讀取的方式,也就是 sql 語句,次數和效率也會影響讀取效率。sql

當訪問量和併發很大的時候,mysql 就撐不住了,據統計,mysql的鏈接池併發數max爲 500-1000數據庫

這時,咱們能夠經過 慢查詢優化 ,cdn ,頁面靜態化nginx 負載均衡策略 ,甚至 分佈式數據庫 來進行 sql優化 ,固然也可使用 高速緩存,好比 rediswindows


Redis - 高併發,內存高速cache ,處理讀寫io的高併發容忍。緩存

redis 一般被使用來將那些常常被訪問的內容緩存在內存中。服務器

不少人談到redis ,哦,k-v 存儲數據庫啊, 速度快啊!爲何快啊? 人家存內存啊,能不快嗎?關鍵人家還支持複雜的數據結構,list 什麼的,不少高併發場景均可以使用。 好比:電商秒殺場景的解決策略與具體原理數據結構

remote dictionary server (遠程數據服務) 內存高速緩存數據庫 數據模型爲 k-v 也就是redis 的一種最常常使用的數據類型 string

k-v 的算法時間複雜度 但是 0(1) 而mysql 的查詢是基於表關聯技術 ,這就是nosql的優點所在。

附上redis 和memcahe 的比較

  1. Redis不單單支持簡單的k/v類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
  2. Redis支持master-slave(主-從)模式應用,高可用的cache系統,支持集羣服務器之間數據同步。

  3. Redis支持數據持久化,能夠將內存中的數據保持在磁盤中,重啓的時候能夠再次加載進行使用。

  4. Redis單個value的最大限制是1GB,(k-v),memcached只能保存1MB的數據。(k:250kb v:1mb)

redis 比sql 到底快多少呢? 
1 從存儲媒介來看,內存比磁盤的讀取速度 hash查找是100w/s 的數量級

2 多路複用io (todo)


redis 和mysql 絕對不是競爭的關係,在工做中合理運用二者才能達到更好的效果。

相關文章
相關標籤/搜索