Redis是如何淘汰数据?-阿里云开发者社区

开发者社区> 数据库> 正文
登录阅读全文

Redis是如何淘汰数据?

简介: 大家在用redis做缓存数据的时候有没有估算过整个缓存使用了多少空间呢?如果缓存数据的大小超过了整个redis的内存大小,又会有什么情况发生呢? 在redis中,我们是可以去设置最大使用内存大小server.maxmemory的,当redis内存数据集大小上升到一定程度的时候,就会施行数据淘汰机制。

大家在用redis做缓存数据的时候有没有估算过整个缓存使用了多少空间呢?如果缓存数据的大小超过了整个redis的内存大小,又会有什么情况发生呢?

在redis中,我们是可以去设置最大使用内存大小server.maxmemory的,当redis内存数据集大小上升到一定程度的时候,就会施行数据淘汰机制。Redis提供了一下6种数据淘汰机制

1、volatile-lru :从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
2、volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
3、volatile-random:从已设置过期时间的数据集(server.db[i].expires)中随机挑选数据淘汰
4、allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
5、allkeys-random:从数据集(server.db[i].dict)中随机挑选数据淘汰
6、no-envivtion(驱逐):禁止驱逐数据

LRU机制:
redis保存了lru计数器server.lrulock,会定时的去更新(redis定时程序severCorn()),每个redis对象都会设置相应的lru值,每次访问对象的时候,redis都会更新redisObject.lru。
LRU淘汰机制:在数据集中随机挑选几个键值对,取出其中lru最大的键值对淘汰。所以,redis并不能保证淘汰的数据都是最近最少使用的,而是随机挑选的键值对中的。

TTL机制:redis数据集结构中保存了键值对过期时间表,即 redisDb.expires。
TTL淘汰机制:在数据集中随机挑选几个键值对,取出其中最接近过期时间的键值对淘汰。所以,redis并不能保证淘汰的数据都是最接近过期时间的,而是随机挑选的键值对中的。

redis在每服务客户端执行一个命令的时候,会检测使用的内存是否超额

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章