Redis详解(四)——删除策略

Redis详解(四)——删除策略

Redis中的数据特征

Redis是一种内存级数据库,全部数据均存放在内存中,内存中的数据能够经过TTL指令来获取其状态,当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 不然,以秒为单位,返回 key 的剩余生存时间。redis

数据删除策略

目标:在内存占用与CPU占用之间寻找一种平衡,顾此失彼都会形成redis性能的总体降低,甚至引起服务器宕机或内存泄漏。算法

  • 定时删除数据库

    建立一个定时器,当key设置有过时时间,且过时时间到达时,由定时器任务当即执行对键的删除操做服务器

    优势:节约内存,到时就删除,快速释放掉没必要要的内存占用性能

    缺点:CPU压力很大,不管CPU此时负载多高,均占用CPU,会影响redis服务器响应时间和指令吞吐量blog

    总结:用处理器性能换取存储空间内存

  • 惰性删除配置

    数据到达过时时间,不作处理。等下次访问该数据时发现以过时,删除,返回不存在内存泄漏

    优势:节约CPU性能,发现必须删除的时候才删除定时器

    缺点:内存压力很大,出现长期占用内存数据

    总结:用存储空间换取处理器性能

  • 按期删除

    周期性轮询redis库中的时效型数据,采用随机抽取的策略,利用过时数据占比的方式控制删除频度

    特色:CPU性能占用设置有峰值,检测频度可自定义设置。内存压力不是很大,长期占用内存的数据会被持续清理。

逐出算法

当新数据进入redis时,若是内存不足怎么办?

Redis使用内存存储数据,在执行每个命令前,会调用freeMemoryIfNeeded()检测内存是否充足。若是内存不知足新加入数据的最低存储要求,redis要临时删除一些数据为当前指令清理清理存储空间。清理数据的策略称为逐出算法。

注意:逐出数据的过程不是100%可以清理出足够的可以使用的内存空间,若是不成功则反复执行。当对全部数据尝试完毕后,若是不能达到内存清理的要求,将报OOM错误。

影响数据逐出的相关配置

相关文章
相关标签/搜索