天天看點

如何保證redis資料都是熱點資料

mySQL裡有2000w資料,redis中隻存20w的資料,如何保證redis中的資料都是熱點資料?

1.限定 Redis 占用的記憶體,Redis 會根據自身資料淘汰政策,加載熱資料到記憶體。

是以,計算一下 20W 資料大約占用的記憶體,然後設定一下 Redis 記憶體限制即可。

2.問題是什麼資料?

比如使用者資料。資料庫有2000w條。

活躍使用者:

redis sortSet裡 放兩天内(為友善取一天内活躍使用者)登入過的使用者,登入一次ZADD一次,如set已存在則覆寫其分數(登入時間)。鍵:login:users,值:分數 時間戳、value userid。設定一個周期任務,比如每天03:00:00點删除sort set中前一天3點前的資料(保證set不無序增長、留近一天内活躍使用者)。

取時,拿到目前時間戳(int 10位),再減1天就可按分數範圍取過去24h活躍使用者。

3.看你的提問,應該隻是把Redis當緩存來用.

提供一種簡單實作緩存失效的思路: LRU(最近少用的淘汰)

即redis的緩存每命中一次,就給命中的緩存增加一定ttl(過期時間)(根據具體情況來設定, 比如10分鐘).

一段時間後, 熱資料的ttl都會較大, 不會自動失效, 而冷資料基本上過了設定的ttl就馬上失效了.

4.

redis 記憶體資料集大小上升到一定大小的時候,會施行資料淘汰政策。

繼續閱讀