过期策略

设置了一个key,有效时间为10s,那么在10s后这个key会立即被删除吗

key不会在10s后立即被删除,redis会通过定期删除+惰性删除将key删除

定期删除

redis默认每隔100ms对设置了过期时间的key进行查询,如果过期了就删除。这里不是对全量的key进行查询,对于未被删除的过期key通过惰性删除进行删除

惰性删除

在获取某个key的时候,会判断该key是否过期,如果过期了就会进行删除

内存淘汰

redis可用内存为10g,此时内存已满且key还在过期时间之内,会怎么样

redis可以通过设置内存淘汰策略淘汰部分内存,可通过参数config set maxmemory-policy {policy}

  1. noeviction(默认策略):当没有足够容量写入新数据时报错
  2. allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key(这个是最常用的)
  3. allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key,不常用
  4. volatile-lru:根据lru算法删除设置了超时属性的key,直到腾出足够空间为止,如果没有课删除的对象,回退到noeviction
  5. volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key
  6. volatile-ttl:删除最近要过期的数据