Redis内存淘汰机制 您所在的位置:网站首页 redis过期策略及内存淘汰机制 Redis内存淘汰机制

Redis内存淘汰机制

2023-08-04 01:57| 来源: 网络整理| 查看: 265

Redis内存淘汰机制 概述Redis清除过期Key的方式定期删除惰性删除 Redis内存淘汰机制

概述

Redis是基于内存存储,常用于数据的缓存,所以Redis提供了对键的过期时间的设置,实现了几种淘汰机制便于适应各种场景。

设置过期时间 我们可以在设置键时设置expire time,也可以在运行时给存在的键设置剩余的生存时间,不设置则默认为-1,设置为-1时表示永久存储。

Redis清除过期Key的方式

定期删除+惰性删除

定期删除

Redis设定每隔100ms随机抽取设置了过期时间的key,并对其进行检查,如果已经过期则删除。 为什么是随机抽取? 因为如果存储了大量数据,全部遍历一遍是非常影响性能的!

惰性删除

每次获取key时会对key进行判断是否还存活,如果已经过期了则删除。

注意:Redis中过期的key并不会马上删除,因为定期删除可能正好没抽取到它,我们也没有访问它触发惰性删除

Redis内存淘汰机制

思考一下,如果定期删除漏掉了很多过期的key,而我们也没有再去访问它,如果不加处理,很可能导致内存耗尽。

Redis配置文件中可以设置maxmemory,内存的最大使用量,到达限度时会执行内存淘汰机制。

Redis中的内存淘汰机制:

没有配置时,默认为no-eviction

名称描述volatile-lru从已设置过期时间的数据集中挑选最近最少使用的数据淘汰volatile-lfu从已设置过期时间的数据集中挑选最不经常使用的数据淘汰volatile-ttl从已设置过期时间的数据集中挑选将要过期的数据淘汰volatile-random从已设置过期时间的数据集中挑选任意数据淘汰allkeys-lru当内存不足写入新数据时淘汰最近最少使用的Keyallkeys-random当内存不足写入新数据时随机选择key淘汰allkeys-lfu当内存不足写入新数据时移除最不经常使用的Keyno-eviction当内存不足写入新数据时,写入操作会报错,同时不删除数据 volatile为前缀的策略都是从已过期的数据集中进行淘汰。allkeys为前缀的策略都是面向所有key进行淘汰。LRU(least recently used)最近最少用到的。LFU(Least Frequently Used)最不常用的。它们的触发条件都是Redis使用的内存达到阈值时。


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有