什麼是快取穿透解決方案:有人惡意請求快取中存在的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快...