redis做快取的問題
阿新 • • 發佈:2021-01-11
Redis存在的問題
1. 快取穿透
快取穿透是查詢一個數據庫一定不存在的資料
例如主鍵,主鍵id是自增的,都大於0,如果傳入了負數,就一定查不到這個資料,這個時候快取發揮不了作用。
如果有人惡意攻擊,所有請求都會直接打在資料庫上。
解決辦法:將資料庫查詢不到的資料也儲存下來,儲存為null
,快取時間設定較短,這樣可以解決一部分問題。
2. 快取雪崩
快取雪崩指的一個時間段內快取集中失效,在這個時間段內查詢就都會去查詢資料庫。
解決辦法:快取設定不同的失效的時間,熱門資料快取時間設定長一點。
3. 快取擊穿
對於一個非常熱點的key,扛著非常大的併發量,如果這個key突然失效,所有的請求會請求到資料庫上。
可以將熱點key設定不過期
Redis叢集
1. 主從複製
在redis.conf
檔案中加入slaveof ip port
即可。
是讀寫分離模型,只有主節點才可以寫,所有的都可讀
2. 哨兵sentinel
主從複製一旦master宕機就無法實現寫操作了
所以要用哨兵
修改sentinel.conf
檔案,新增如下
bind 0.0.0.0 sentinel monitor mymaster 127.0.0.1 6379 1 主結點ip port 為主伺服器判斷為失效投票,至少需要一個sentinel通用 sentinel down-after-milliseconds mymaster 10000 認為伺服器斷開所需的毫秒數 sentinel failover-timeout mymaster 60000 sentinel parallel-syncs mymaster 1
啟動:redis-sentinel sentinel.conf