Redis的过期键删除策略:
定时删除、
惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,那就返回该键;
定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。至于删除多少过期键,以及要检查多少个数据库,则由算法决定。
Redis服务器实际使用的是惰性删除和定期删除两种策略:通过配合使用这两种删除策略,
服务器可以很好地在合理使用CPU时间和避免浪费内存空间之间取得平衡。
内存淘汰策略:
长期将Redis作为缓存使用,难免会遇到内存空间存储瓶颈,当Redis内存超出物理内存限制时,内存数据就会与磁盘产生频繁交换,使Redis性能急剧下降。
此时如何淘汰无用数据释放空间,存储新数据就变得尤为重要了。
对此,Redis在生产环境中,采用配置参数maxmemory 的方式来限制内存大小。
当实际存储内存超出maxmemory 参数值时,开发者们可以通过这几种方法——Redis内存淘汰策略,来决定如何腾出新空间继续支持读写工作。
当前Redis3.0版本支持的淘汰策略有6种:
1. volatile-lru:从设置过期时间的数据集中挑选出最近最少使用的数据淘汰。
没有设置过期时间的key不会被淘汰,这样就可以在增加内存空间的同时保证需要持久化的数据不会丢失。
2. volatile-ttl:从设置过期时间的数据集中挑选将要过期的数据淘汰,ttl值越大越优先被淘汰。
TTL(生存时间值)TTL是Time To Live的缩写
3. volatile-random:从已设置过期时间的数据集中任意选择数据淘汰。
当内存达到限制无法写入非过期时间的数据集时,可以通过该淘汰策略在主键空间中随机移除某个key。
4. allkeys-lru:从数据集中挑选最近最少使用的数据淘汰,该策略要淘汰的key面向的是全体key集合,而非过期的key集合。
5. allkeys-random:从数据集(server.db[i].dict)中选择任意数据淘汰。
6. no-eviction:禁止驱逐数据,也就是当内存不足以容纳新入数据时,新写入操作就会报错。这也是系统默认的一种淘汰策略。