Redis常見問題

2021-10-08 19:47:42 字數 2018 閱讀 8019

1.官方答案

因為redis是基於記憶體的操作,cpu不是redis的瓶頸,redis的瓶頸最有可能是機器記憶體的大小或者網路頻寬。既然單執行緒容易實現,而且cpu不會成為瓶頸,那就順理成章地採用單執行緒的方案了。

redis採用的是多路io復用技術,多路指的是多個網路連線,復用指的是乙個執行緒,多路io復用技術可以讓單個執行緒高效的處理多個請求。

多路io復用技術:epoll

rdb 是 redis 預設的持久化方案。在指定的時間間隔內,執行指定次數的寫操作,則會將記憶體中的資料寫入到磁碟中。預設是 900秒內修改1次,或者300秒修改十次,獲取60秒修改10000次。會在指定目錄下生成乙個dump.rdb檔案。適合資料量大,一致性要求不高的場景。

aof :redis 預設不開啟。它的出現是為了彌補rdb的不足(資料的不一致性),所以它採用日誌的形式來記錄每個寫操作,並追加到檔案中。有兩種持久化策略,第一種是每次更新資料立即進行持久化,第二種是每秒進行一次持久化。

互斥鎖

public string get(key)  else 

} else 

}

設定邏輯永不過期

(1) 從redis上看,確實沒有設定過期時間,這就保證了,不會出現熱點key過期問題,也就是「物理」不過期。

(2) 從功能上看,如果不過期,那不就成靜態的了嗎?所以我們把過期時間存在key對應的value裡,如果發現要過期了,通過乙個後台的非同步執行緒進行快取的構建,也就是「邏輯」過期

從實戰看,這種方法對於效能非常友好,唯一不足的就是構建快取時候,其餘執行緒(非構建快取的執行緒)可能訪問的是老資料,但是對於一般的網際網路功能來說這個還是可以忍受。

string get(final string key)   

}  });  

}  return value;  

}

從快取取不到的資料,在資料庫中也沒有取到,這時也可以將key-value對寫為key-null,那麼就把這個key設定要給空值,設定較短的過期時間。

快取雪崩是指快取中資料大批量到過期時間,而查詢資料量巨大,引起資料庫壓力過大甚至down機。和快取擊穿不同的是,        快取擊穿指併發查同一條資料,快取雪崩是不同資料都過期了,很多資料都查不到從而查資料庫。

解決方案

快取資料的過期時間設定隨機,防止同一時間大量資料過期現象發生。

1)、儲存方式 memecache把資料全部存在記憶體之中,斷電後會掛掉,資料不能超過記憶體大小。 redis有部份存在硬碟上,redis可以持久化其資料

2)、資料支援型別 memcached所有的值均是簡單的字串,redis作為其替代者,支援更為豐富的資料型別 ,提供list,set,zset,hash等資料結構的儲存

3). value 值大小不同:redis 最大可以達到 512m;memcache 只有 1mb。

4)redis的速度比memcached快很多

redis採用的是定期刪除+惰性刪除策略

定期刪除+惰性刪除是如何工作的呢?

定期刪除,redis預設每個100ms檢查,是否有過期的key,有過期key則刪除。需要說明的是,redis不是每個100ms將所有的key檢查一次,而是隨機抽取進行檢查(如果每隔100ms,全部key進行檢查,redis豈不是卡死)。因此,如果只採用定期刪除策略,會導致很多key到時間沒有刪除。

於是,惰性刪除派上用場。也就是說在你獲取某個key的時候,redis會檢查一下,這個key如果設定了過期時間那麼是否過期了?如果過期了此時就會刪除。

redis儲存的資料達到最大記憶體限制時(maxmemory), redis 根據maxmemory-policy配置的策略, 來決定具體的行為。

當前版本,redis 3.0 支援的策略包括:

redis常見問題

在redis命令列執行info clients 得到類似下面的結果 connected clients 357 client longest output list 0client biggest input buf 0blocked clients 0redis連線數過多的問題可以參考 處理red...

redis常見問題

redis使用中可能出現的一些問題 1.快取穿透 快取穿透是指查詢乙個一定不存在的資料,由於快取是不命中時需要從db查詢,查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到資料庫查詢,從而造成快取穿透。解決辦法 持久層查詢不到就快取空結果,查詢時先判斷快取中是否exists key 如果...

Redis常見問題

1.如何解決快取雪崩?2.如何解決快取穿透?3.如何保證快取與資料庫雙寫時一致的問題?1.1 什麼是快取雪崩?回顧一下我們為什麼要用快取 redis 現在有個問題,如果我們的快取掛掉了,這意味著我們的全部請求都跑去資料庫了。我們都知道redis不可能把所有的資料都快取起來 記憶體昂貴且有限 所以re...