JeffSunpan27

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

近期发生两次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

posted on 2018-01-05 14:29  JeffSunpan27  阅读(136)  评论(0编辑  收藏  举报