1. 程式人生 > 資料庫 >redis做快取的問題

redis做快取的問題

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