这篇文章将为大家详细讲解有关redis中的内存淘汰机制,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
Redis内存淘汰指的是用户存储的一些键被可以被Redis主动地从实例中删除,从而产生读miss的情况,那么Redis为什么要有这种功能?这就是我们需要探究的设计初衷。Redis最常见的两种应用场景为缓存和持久存储,首先要明确的一个问题是内存淘汰策略更适合于那种场景?是持久存储还是缓存?
内存的淘汰机制的初衷是为了更好地使用内存,用一定的缓存miss来换取内存的使用效率。
redis内存淘汰机制有:
1、noeviction,当内存使用达到阈值的时候,所有引起申请内存的命令会报错;
2、allkeys-lru,在主键空间中,优先移除最近未使用的key;
3、allkeys-random,在主键空间中,随机移除。
内存淘汰策略
内存淘汰只是 Redis 提供的一个功能,为了更好地实现这个功能,必须为不同的应用场景提供不同的策略,内存淘汰策略讲的是为实现内存淘汰我们具体怎么做,要解决的问题包括淘汰键空间如何选择?在键空间中淘汰键如何选择?
Redis 提供了下面几种淘汰策略供用户选择,其中默认的策略为 noeviction
策略:
noeviction:当内存使用达到阈值的时候,所有引起申请内存的命令会报错
allkeys-lru:在主键空间中,优先移除最近未使用的
keyvolatile-lru:在设置了过期时间的键空间中,优先移除最近未使用的
keyallkeys-random:在主键空间中,随机移除某个
keyvolatile-random:在设置了过期时间的键空间中,随机移除某个
keyvolatile-ttl:在设置了过期时间的键空间中,具有更早过期时间的 key 优先移除
这里补充一下主键空间和设置了过期时间的键空间,举个例子,假设我们有一批键存储在Redis中,则有那么一个哈希表用于存储这批键及其值,如果这批键中有一部分设置了过期时间,那么这批键还会被存储到另外一个哈希表中,这个哈希表中的值对应的是键被设置的过期时间。设置了过期时间的键空间为主键空间的子集。
关于redis中的内存淘汰机制就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。