java - mySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?
ringa_lee
ringa_lee 2017-04-18 09:06:49
0
4
981

mySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?

ringa_lee
ringa_lee

ringa_lee

全部回覆(4)
洪涛

以 @ybak 的答案為基礎,我說一個比較簡單實用的方案。

限定 Redis 佔用的內存,Redis 會根據自身資料淘汰策略,載入熱資料到記憶體。
所以,計算一下 20W 資料大約佔用的內存,然後設定一下 Redis 內存限制即可。

小葫芦

問題是什麼數據?

比如使用者資料。資料庫有2000w條。
活躍用戶:
redis sortSet裡 放兩天內(為方便取一天內活躍用戶)登入過的用戶,登入一次ZADD一次,如set已存在則覆蓋其分數(登入時間)。鍵:login:users,值:分數 時間戳記、value userid。設定一個週期任務,例如每天03:00:00點刪除sort set中前一天3點前的資料(保證set不無序成長、留近一天內活躍用戶)。

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

洪涛

看你的提問,應該只是把Redis當緩存來用.
提供一種簡單實現緩存失效的思路: LRU(最近少用的淘汰)
即redis的緩存每命中一次,就給命中的緩存增加一定ttl(過期時間)(根據具體情況來設定, 例如10分鐘).
一段時間後, 熱數據的ttl都會較大, 不會自動失效, 而冷數據基本上過了設定的ttl就馬上失效了.

黄舟

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

redis 提供 6種資料淘汰策略:

volatile-lru:從已設定過期時間的資料集中挑選最近最少使用的資料淘汰
volatile-ttl
volatile-random
allkeys-lru
allkeys-random
no-enviction

allkeys-lru🎜allkeys-random🎜no-enviction🎜-enviction
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板