redis中maxmemory和淘汰策略

在redis中,允許用戶設置最大使用內存大小maxmemory(需要配合maxmemory-policy使用),設置爲0表示不限制;當redis內存數據集快到達maxmemory時,redis會實行數據淘汰策略。Redis提供6種數據淘汰策略:

  1. volatile-lru:從已設置過期時間的內存數據集中挑選最近最少使用的數據 淘汰;
  2. volatile-ttl: 從已設置過期時間的內存數據集中挑選即將過期的數據 淘汰;
  3. volatile-random:從已設置過期時間的內存數據集中任意挑選數據 淘汰;
  4. allkeys-lru:從內存數據集中挑選最近最少使用的數據 淘汰;
  5. allkeys-random:從數據集中任意挑選數據 淘汰;
  6. no-enviction(驅逐):禁止驅逐數據。(默認淘汰策略。當redis內存數據達到maxmemory,在該策略下,直接返回OOM錯誤);
    關於maxmemory設置,通過在redis.conf中maxmemory參數設置,或者通過命令CONFIG SET動態修改
    關於數據淘汰策略的設置,通過在redis.conf中的maxmemory-policy參數設置,或者通過命令CONFIG SET動態修改

如127.0.0.1:6379>CONFIG GET maxmemory
1) 「maxmemory"
2) 「0」
127.0.0.1:6379>CONFIG SET maxmemory 100MB
OK
127.0.0.1:6379>CONFIG GET maxmemory

  1. 「maxmemory"
  2. 「104857600」

注意,在64bit系統下,maxmemory設置爲0表示不限制Redis內存使用,在32bit系統下,maxmemory不能超過3GB;

應用:
如mysql裏有2000w條數據,redis只存20w條熱點數據,如何保證redis中的數據都是熱點數據?
這就能設置最大內存,再設置淘汰策略,設置volatile-lru,allkeys-lru等都可以;

------------------------------------------------------------------------

redis讀取/重啓之後讀取報錯:(error) LOADING Redis is loading the dataset in memory

1.redis將之持久化的數據重新寫入,等待數據寫入完成以後即可正常訪問

2. AOF(append only file)持久化。appendonly no,默認不開啓。appendonly yes,開啓持久化。

3.修改配置文件 vi redis.conf

  maxmemory 5GB
  maxmemory-policy allkeys-lru 
  appendonly no

  重啓redis,./redis_multi rewrite all    --釋放redis存儲