redis,可以看作是一种内存数据库,相信熟悉数据库相关知识的朋友们都不会对redis感到陌生,下面我们就一起来看看redis的淘汰策略到底是指的什么?我们应该了解的redis淘汰策略有哪些呢?
首先,当我们的redis的内存空间已经用满时,redis将根据配置的淘汰策略(maxmemory-policy),进行相应的动作。redis内存淘汰指的是用户存储的一些键被可以被redis主动地从实例中删除,从而产生读miss的情况,
假设我们有一个redis服务器,服务器物理内存大小为1G的,我们需要存在redis中的数据量很小,这看起来似乎足够用很长时间了,随着业务量的增长,我们放在redis里面的数据越来越多了,数据量大小似乎超过了1G,但是应用还可以正常运行,这是因为操作系统的可见内存并不受物理内存限制,而是虚拟内存,物理内存不够用没关系,操作系统会从硬盘上划出一片空间用于构建虚拟内存,比如32位的操作系统的可见内存大小为2^32,而用户空间的可见内存要小于2^32很多,大概是3G左右。
好了,我们庆幸操作系统为我们做了这些,但是我们需要知道这背后的代价是不菲的,不合理的使用内存有可能发生频繁的swap,频繁swap的代价是惨痛的。所以回过头来看,作为有追求的程序员,我们还是要小心翼翼地使用好每块内存,把用户代码能解决的问题尽量不要抛给操作系统解决。说到这里,我们可以了解到,内存的淘汰机制的初衷是为了更好地使用内存,用一定的缓存miss来换取内存的使用效率。
内存淘汰只是redis提供的一个功能,为了更好地实现这个功能,必须为不同的应用场景提供不同的策略,redis提供了下面几种淘汰策略供用户选择,其中默认的策略为no-eviction策略:
一、no-eviction:不删除策略
当达到最大内存限制时,如果还需要更多的内存:直接返回错误
二、allkeys-lru
当达到最大内存限制时,如果还需要更多的内存:在所有的key中,挑选最近最少使用(LRU)的key淘汰
三、volatile-lru
当达到最大内存限制时,如果还需要更多的内存:在设置了expire(过期时间)的key中,挑选最近最少使用(LRU)的key淘汰
四、allkeys-random
当达到最大内存限制时,如果还需要更多的内存:在所有的key中,随机淘汰部分key
五、volatile-random
当达到最大内存限制时,如果还需要更多的内存:在设置了expire(过期时间)的key中,随机淘汰部分key
六、volatile-ttl
当达到最大内存限制时,如果还需要更多的内存:在设置了expire(过期时间)的key中,挑选TTL(time to live,剩余时间)短的key淘汰
以上就是有关redis淘汰策略的相关介绍了,希望能对大家有所帮助,欢迎关注本站了解更多有关内容哦。