Redis 十三 一些問題

2022-06-27 15:36:10 字數 1173 閱讀 2574

redis刪除機制

1.定期刪除,每隔100ms去隨機查3個設定了生存時間的key,如果過期,就刪除;

2.惰性刪除,當有人檢視乙個設定了生存時間的key時,檢查是否過期,過期則刪除。

redis淘汰機制

在redis記憶體滿了的時候,如果再加入新的key,會開啟淘汰機制。

allkeys-lru:在所有的key中,乾掉乙個最近最少使用的。

allkeys-lfu:在設定了生存時間的key中,乾掉乙個最近最少頻次使用的,類似記錄使用頻率,頻率少的,哪怕最近剛用過,也可能被淘汰。

allkeys-lfu:在所有的key中,乾掉乙個最近最少頻次使用的。

volatile-random:在設定了生存時間的key中,隨機乾掉乙個,簡直離譜。

allkeys-random:在所有的key中,隨機乾掉乙個,更加離譜。

volatile-ttl:在設定了生存時間的key中,乾掉乙個剩餘時間最少的。

noeviction:直接報錯,預設的機制。

設定淘汰機制

maxmemory-policy noeviction

設定最大記憶體

maxmemory 1024000000

redis快取問題

快取穿透:查詢的資料,redis和資料庫中都沒有,這樣大量的查詢,會導致redis和資料庫都宕機。

1.如果是通過id查詢,id是自增的,可以首先在業務上排除小於0,然後將資料庫中id的最大值放到redis中,查詢時比較一下,超出這個值,根本不用查;

2.如果id不是整形,可以將全部的id放到set中,在查詢前去set中檢視一下,有才查;

3.限制某個高頻次訪問ip的訪問次數,甚至拉入黑名單。

快取擊穿:在乙個熱點快取正好過期的時候,大量訪問突然來訪,於是只能去訪問資料庫,造成資料庫宕機。

1.在訪問快取中沒有的時候,新增乙個鎖,只讓幾個請求去訪問資料庫,然後新增該快取,分布式鎖可以解決該問題;

2.去掉熱點快取的生存時間,不推薦。

快取雪崩:當大量快取(未必是熱點快取)同時到期時,大量請求同時訪問資料庫,導致宕機。

1.將快取的生存時間設定成不一樣的,避免同時到期。

快取傾斜:大量熱點資料都在一台redis節點上,導致無法承受。

1.給這個節點加主從。

redis佇列一些問題

將所有指定的值插入到存於 key 的列表的頭部。如果 key 不存在,那麼在進行 push 操作前會建立乙個空列表。如果 key 對應的值不是乙個 list 的話,那麼會返回乙個錯誤。php 示例 public function push k,value else 可以使用乙個命令把多個元素 pus...

redis的一些問題

一 redis的併發競爭問題如何解決?redis為單程序單執行緒模式,採用佇列模式將併發訪問變為序列訪問。redis本身沒有鎖的概念,redis對於多個客戶端連線並不存在競爭,但是在jedis客戶端對redis進行併發訪問時會發生連線超時 資料轉換錯誤 阻塞 客戶端關閉連線等問題,這些問題均是由於客...

Redis相關的一些問題

在高併發下,查詢乙個不存在的值時,快取不會被命中,導致大量請求直接落到資料庫上,如活動系統裡面查詢乙個不存在的活動。解決方案 布隆過濾器。首先也是對所有可能查詢的引數以hash形式儲存,當使用者想要查詢的時候,使用布隆過濾器發現不在集合中,就直接丟棄,不再對持久層查詢。快取空物件。當持久層不命中後,...