2023-2更文15-redis过期策略及内存淘汰策略

92 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 15 天,点击查看活动详情

redis过期策略及内存淘汰策略

前文

本文的内容是关于redis中数据存储的过期处理,以及当redis内存满时内存中数据淘汰策略的相关知识总结。

redis过期策略

在开发中对redis的使用场景中,过期时间设置是非常常用的一种使用方式,例如token的过期信息等等,一般情况下都需要用到redis的过期策略。对redis中的数据进行过期时间设置主要通过以下的方式:

    set key value ex time
    或者
    expire key time

经过上述命令的执行后,redis的过期时间会被设置为对应的周期之后。当时间到达时,再次访问这个key值会出现查找不到的情况。这里没有直接说key值会被redis删除,主要是取决于redis过期策略中对于key值的删除策略。

redis对key值过期删除时,主要是有三种策略:惰性删除、定时删除、定期删除。定时删除主要是根据设置的过期时间,相当于开启了一个后台的定时任务。由于这个定时删除策略的存在,会对cpu的性能有一定的影响。而惰性删除则是用另一个角度,当数据访问时进行过期的判断,如果过期则删去且返回空。对比定时删除,这种方式不会对cpu有额外的性能损耗,但是会出现内存中有些过期数据不被访问且不被删除的浪费内存问题。另一种是定期删除,它是介于前面两者之间,会按照一定的时间对一定数量的key值进行检索,判断这些数据是否过期,并删除过期数据,这种方式需要注意频率,达到cpu与内存消耗的平衡。

redis内存淘汰策略

redis的内存淘汰策略主要是针对当redis内存达到上限时,再次存储redis数据时的处理。当然,为了保证数据的不丢失,这是默认的内存淘汰策略。除此之外,还有一些是抛弃数据的方式。再看一下实际的淘汰算法,一般是采用LRU和LFU,分别是最近最少使用(时间)和最近最少使用(频次)。LFU可以认为是LRU的一种更合理化的升级,使用频率能够更实际的帮助我们选择淘汰的内存内容,同样的,也需要在redis中进行调用次数的记录。

总结

本文的主要内容是redis的数据过期策略及内存淘汰策略的总结,对两者的不同策略进行了整理。