近期发生两次redis事故,一个是内存超过maxmemory了,一个是redis数据库被清空,需要加强对redis的管理,总结如下:
禁用某些命令,在配置文件中添加,需要重启生效,无法在线修改
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command KEYS ""
设置密码
查看
127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) ""
设置
127.0.0.1:6379> CONFIG set requirepass "runoob"
OK
127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) "runoob"
客户端连接 redis 服务就需要密码验证
127.0.0.1:6379> AUTH password
理解内存淘汰机制
redis是一种存内存的缓存中间件,磁盘的作用仅仅是作为备份用。一般情况下我们需要设置最大内存防止redis数据量过大导致应用omm
查询
127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "0"
设置
127.0.0.1:6379> config set maxmemory xxx
查看淘汰策略
127.0.0.1:6379> config get maxmemory-policy
1) "maxmemory-policy"
2) "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