關於Redis快取

2021-09-03 08:12:16 字數 1101 閱讀 3331

什麼是快取穿透

有人惡意請求快取中存在的key,或者key集體過期,導致大量流量直接打到資料庫,資料庫肯定扛不住

解決方案:

用布隆過濾器

什麼是快取雪崩

快取掛了,導致大量流量直接打到資料庫,資料庫肯定扛不住

解決方案

事前:redis主從+哨兵+集群部署

事中:mysql做限速和降級處理,超過處理能力的請求直接返回空資料。

事後:redis備份,用於快讀恢復快取

經典的快取+資料庫讀寫模式是:cache aside pattern

讀的時候先讀快取,沒有再度資料庫,讀到結果先重新整理快取再返回

寫的時候先寫資料庫,再刪除快取/更新快取

寫完了資料庫,然後到底是刪除快取還是更新快取?

這要看你的業務,接下來是不是馬上要訪問剛才的寫入值,刪除快取其本質是快取lazy載入。

redis內部使用檔案事件處理器、這個處理其實單執行緒的,所以說redis是單執行緒的。

為什麼單執行緒還這麼快?

檔案事件 處理器包含4部分:

多個socket

io多路復用程式

檔案事件分派器

事件處理器

redis過期策略:定時刪除+惰性刪除+記憶體淘汰機制

定期刪除:redis100ms隨即抽查一些設定了過期時間的key,如果過期了就直接刪除。

惰性刪除:訪問設定了過期時間的key的時候先檢查該key是否已經過去,如果已經過期則刪除該key不返回任何值

記憶體淘汰機制:

noeviction:寫入報錯

allkeys-lru(最常用)

allkeys-random

volatile-lru

volatile-random

volatile-ttl:最早過期

手寫lru?

用hashmap+雙向鍊錶

關於Redis快取

業務場景 實時性要求不高的查詢 如果用redis做mysql的快取,key value中的值為乙個屬性 屬性值組成的hashmap,鍵的定義是個難點。鍵應該盡可能與mysql查詢的條件相關,請求呼叫的方法 controller裡分發 對應的查詢引數就可以唯一的確定查詢條件,如如 listusers....

關於redis清除快取

關於redis清除快取 linux 1.訪問redis根目錄 cd usr local redis 4.0.2。2.登入redis redis cli h 127.0.0.1 p 6379。3.檢視所有key值 keys 4.清空整個 redis 伺服器的資料 flushall 5.清空當前庫中的所...

關於用redis快取物件

我們知道redis可以儲存的資料結構比memcached多,它包含hash,list等等 但是如果,我有乙個person物件,裡面兩個變數,username,password,我想儲存乙個person物件呢?那很簡單呀,要麼使用pb把它序列化,要麼把物件轉成json字串 從速度上講pb要比json快...