Redis Redis快取 面試篇

2021-10-25 09:42:13 字數 1475 閱讀 6889

1、redis是乙個基於記憶體的高效能key-value資料庫,支援豐富的資料型別:string、list、set、zset(sorted set,有序集合)、hash。

2、最適合redis的場景有哪些?

(1)會話快取

(2)全頁快取

(3)佇列

(4)排行榜/計數器

(5)發布/訂閱

3、為什麼redis需要把所有資料都放到記憶體中去?

redis為了達到最快的讀寫速度將資料都讀取到記憶體中,並通過非同步的方式將資料寫入磁碟。(在記憶體越來越便宜的時代,redis將越來越受歡迎)

4、redis與memcache的區別:

(1)儲存方式不同。redis儲存在硬碟上,這樣可以保證資料的永續性。而memcache是將資料全部存在記憶體中,資料不能超過記憶體大小,並且斷電後資料庫會掛掉。

(2)支援的value大小不一樣。redis最大可以達到1gb,而memcache只有1mb。

(3)redis相較於memcache有豐富的資料型別。

(4)redis的速度比memcache快很多。

5、redis的缺點

由於redis是記憶體資料庫,所以單台機器儲存的資料量直接與機器本身的記憶體大小掛鉤。雖然redis本身有key過期策略,但是還是需要提前預估和節約記憶體。如果記憶體增長過快,需要定期刪除資料。

6、為什麼redis是單執行緒?

因為redis是記憶體資料庫,cpu不是redis的瓶頸,又因為單執行緒容易實現,相比多執行緒會減少很多麻煩。

7、redis是單執行緒,但redis為什麼還是這麼快?

(1)完全基於記憶體,非常快速。

(2)資料結構簡單,對資料操作也簡單。(redis中的資料結構是專門進行設計的)

(3)採用單執行緒,避免了多執行緒的麻煩。

(4)使用多路i/o復用模型,非阻塞io。

(5)redis自己構建了vm機制,呼叫函式時無需再浪費一定的時間去移動和請求。

8、快取雪崩問題:如果快取宕[dàng] 機了或者快取設定了相同的過期時間導致快取在同一時刻同時失效,請求全部直接落到資料庫導致崩潰。

解決方案:

(1)事前:redis高可用,主從+哨兵,redis cluster集群分布,避免全盤崩潰。

(2)事中:本地ehcache快取+hystrix限流和降級,避免mysql***。

(3)事後:redis持久化rdb+aof,快速恢復快取資料。

(4)快取的失效時間設定為隨機值,避免同時失效。

9、快取穿透問題:大量不合理請求引數,快取不起作用,從而直接打死資料庫。

解決方案:

(1)對請求引數j進行校驗,不合理直接返回。

(2)使用布隆過濾器,快速判斷key是否在資料庫中存在,不存在直接返回。

10、快取擊穿問題:熱點資料的快取失效。

解決方案:

(1)設定key永不過期,或者快過期時通過另乙個非同步執行緒重新設定key

(2)當從快取拿到的資料為null時,對重新從資料庫載入資料的過程上鎖。

redis redis做mysql的快取伺服器

實驗環境主機 角色server1 172.25.8.1 web前端 server2 172.25.8.2 redis伺服器 redis connect 127.25.8.2 6379 or die could net connect redis server redis主機 query select...

Redis Redis 快取熱點引發的思考

快取熱點 對於特別熱的資料,如果大部分甚至所有的業務都命中同乙份快取資料,則這份資料所在快取伺服器壓力就很大,例如,某明星微博發布 我們 來宣告戀愛了,則短時間內有成千上萬的使用者都來圍觀。快取熱點解決方案 解決思路是沒有問題的,是通過備份相同的資料到多台快取伺服器中,緩解分散單台伺服器的壓力,我的...

mysql快取機制 讀快取篇

最近進行了一系列mysql相關的研究,了解了一遍mysql的快取機制,在這裡集中總結一下。本文是基於mysql innodb的快取機制解析 快取機制是一種常用的機制,在作業系統中,因為不同儲存介質的讀寫效率天差地別,所以採取快取機制來加快系統的讀寫效率,將一些常用的資料放在讀寫效率較高的快取裡,避免...