Redis管理
近期發生兩次redis事故,一個是內存超過maxmemory了,一個是redis數據庫被清空,需要加強對redis的管理,總結如下:
禁用某些命令,在配置文件中添加,需要重啟生效,無法在線修改
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command KEYS ""
設置密碼
查看
127.0.0.1:6379> CONFIG get requirepass
- "requirepass"
- ""
設置
127.0.0.1:6379> CONFIG set requirepass "runoob"
OK
127.0.0.1:6379> CONFIG get requirepass
- "requirepass"
- "runoob"
客戶端連接 redis 服務就需要密碼驗證
127.0.0.1:6379> AUTH password
理解內存淘汰機制
redis是一種存內存的緩存中間件,磁盤的作用僅僅是作為備份用。一般情況下我們需要設置最大內存防止redis數據量過大導致應用omm
查詢
127.0.0.1:6379> config get maxmemory
- "maxmemory"
- "0"
設置
127.0.0.1:6379> config set maxmemory xxx
查看淘汰策略
127.0.0.1:6379> config get maxmemory-policy
- "maxmemory-policy"
- "noeviction"
redis keyspace,為健空間,包括keys(主鍵空間中總key數量),expires(主鍵空間中有過期時間的key數量),avg_ttl(有過期時間key的平均過期時間,單位ms)
Redis提供了下面幾種淘汰策略供用戶選擇,其中默認的策略為noeviction策略,當達到maxmemory后如果沒有可刪除的key,redis報omm錯誤。
noeviction:當內存使用達到閾值的時候,所有引起申請內存的命令會報錯。
allkeys-lru:在主鍵空間中,優先移除最近未使用的key。
volatile-lru:在設置了過期時間的鍵空間中,優先移除最近未使用的key。
allkeys-random:在主鍵空間中,隨機移除某個key。
volatile-random:在設置了過期時間的鍵空間中,隨機移除某個key。
volatile-ttl:在設置了過期時間的鍵空間中,具有更早過期時間的key優先移除。
幾種策略的適用場景:
allkeys-lru:如果我們的應用對緩存的訪問符合冪律分布(也就是存在相對熱點數據),或者我們不太清楚我們應用的緩存訪問分布狀況,我們可以選擇allkeys-lru策略。
allkeys-random:如果我們的應用對于緩存key的訪問概率相等,則可以使用這個策略。
volatile-ttl:這種策略使得我們可以向Redis提示哪些key更適合被eviction。
127.0.0.1:6379> info Keyspace
Keyspace
db0:keys=86897,expires=28980,avg_ttl=245053660

浙公網安備 33010602011771號