redis是键值对形式的数据库,存放在内存中,所以可以用来保存要经常进行查询插入的数据,redis中有添加数据,删除数据,设置数据的有效期。
数据如果过了有效期redis自身会对其做处理:
1.被动删除:当获取该key,首先会判断该key是否过期,如果过期就会删除该key,并返回空;
2.主动删除:redis会定期删除那些过期的key,每次随机选择100个设置了有效期的key,判断是否过期如果过期就删除,删除的数据达到了25%则会进行下一次的主动删除操作
3.maxmemory:当前已用内存如果超过了maxmemory,则触发主动清理策略
- volatile-lru:只对设置了过期时间的key进行LRU(默认值)
- allkeys-lru : 删除lru算法的key
- volatile-random:随机删除即将过期key
- allkeys-random:随机删除
- volatile-ttl : 删除即将过期的
- noeviction : 永不过期,返回错误当mem_used内存已经超过maxmemory的设定,对于所有的读写请求,都会触发redis.c/freeMemoryIfNeeded(void)函数以清理超出的内存。注意这个清理过程是阻塞的,直到清理出足够的内存空间。所以如果在达到maxmemory并且调用方还在不断写入的情况下,可能会反复触发主动清理策略,导致请求会有一定的延迟。
以后再更