精华内容
下载资源
问答
  • Redis 淘汰策略
    2020-11-24 12:11:12

    Redis 淘汰策略

    Redis可选项

    volatile-lru

    从设置了过期时间中的数据集中, 选择最近最少使用的数据,进行释放

    allkeys_lru

    在全部的数据集中, 选择最近最少使用的数据,进行释放

    LRU算法

    LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。

    百度科普链接 : https://baike.baidu.com/item/LRU/1269842?fr=aladdin

    volatile_random

    从设置了过期时间的数据当中,随机选择一个数据进行释放

    allkeys_random

    从全部的数据中,随机随机选择数据进行释放

    votatile_ttl

    从设置了过期时间的数据中, 找即将要过期的数据进行释放

    noeviction

    不删除任何数据, 这时如果内存不够时,会直接返回错误。

    Redis配置

    redis 的默认配置noeviction,在Redis中使用LRU近似算法, 默认情况下 随机挑选5个键从中获取最近最少使用的数据进行释放,在配置文件中可以通过maxmemory-samples的值来设置redis需要检查key的个数,但是检查的越多,耗费的时间也就越久,淘汰的数据越精确

    redis配置文件中默认

    maxmemory-policy noeviction
    
    更多相关内容
  • 我们应该了解的redis淘汰策略有哪些呢?首先,当我们的redis的内存空间已经用满时,redis将根据配置的淘汰策略(maxmemory-policy),进行相应的动作。redis内存淘汰指的是用户存储的一些键被可以被redis主动地从实例中...

    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淘汰策略的相关介绍了,希望能对大家有所帮助,欢迎关注本站了解更多有关内容哦。

    展开全文
  • 本文大概讲一下redis六种淘汰策略 一、六种淘汰策略 1.noeviction(默认策略):对于写请求不再提供服务,直接返回错误(DEL请求和部分特殊请求除外) 2.allkeys-lru:从所有key中使用LRU算法进行淘汰 3.volatile-...

    redis是个基于内存的缓存数据库,既然是基于内存的,那肯定就会有存满的时候

    如果真的存满了,再有新的数据过来肯定就存不进去了

    此时redis会执行既定的一些淘汰策略,本文大概讲一下redis六种淘汰策略

    一、六种淘汰策略

    1.noeviction(默认策略):对于写请求不再提供服务,直接返回错误(DEL请求和部分特殊请求除外)

    2.allkeys-lru:从所有key中使用LRU算法进行淘汰(LRU算法:即最近最少使用算法)

    3.volatile-lru:从设置了过期时间的key中使用LRU算法进行淘汰

    4.allkeys-random:从所有key中随机淘汰数据

    5.volatile-random:从设置了过期时间的key中随机淘汰

    6.volatile-ttl:在设置了过期时间的key中,淘汰过期时间剩余最短的

    当使用volatile-lru、volatile-random、volatile-ttl这三种策略时,如果没有key可以被淘汰,则和noeviction一样返回错误

    二、如何获取及设置内存淘汰策略

    1、获取当前内存淘汰策略:

    127.0.0.1:6379> config get maxmemory-policy

    可以看到当前使用的默认的noeviction策略

    2、获取Redis能使用的最大内存大小

    127.0.0.1:6379> config get maxmemory

    如果不设置最大内存大小或者设置最大内存大小为0,在64位操作系统下不限制内存大小,在32位操作系统下最多使用3GB内存。32 位的机器最大只支持 4GB 的内存,而系统本身就需要一定的内存资源来支持运行,所以 32 位机器限制最大 3 GB 的可用内存

    3、设置淘汰策略

    通过配置文件设置淘汰策略(修改redis.conf文件):

    maxmemory-policy allkeys-lru

    通过命令修改淘汰策略:

    127.0.0.1:6379> config set maxmemory-policy allkeys-lru

    4、设置Redis最大占用内存大小

    #设置Redis最大占用内存大小为100M
    127.0.0.1:6379> config set maxmemory 100mb

    纯手敲原创不易,如果觉得对你有帮助,可以打赏支持一下,哈哈,感谢~

               

    展开全文
  • 2、内存淘汰机制 Redis有过期策略,假如你的Redis只能存1G的数据,你一个请求写入2G,而你也没有及时请求key,那么惰性删除就不生效了,Redis占用内存就会越来越高。 Redis可以设置内存大小: maxmemory 设置Redis...

    1.定时删除
    在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除
    优点:
    保证内存被尽快释放
    缺点:
    1)若过期key很多,删除这些key会占用很多的CPU时间,在CPU时间紧张的情况下,CPU不能把所有的时间用来做要紧的事儿,还需要去花时间删除这些key。
    2)定时器的创建耗时,若为每一个设置过期时间的key创建一个定时器(将会有大量的定时器产生),性能影响严重

    2.惰性删除
    key过期的时候不删除,每次从数据库获取key的时候去检查是否过期,若过期,则删除,返回null。
    优点:
    删除操作只发生在从数据库取出key的时候发生,而且只删除当前key,所以对CPU时间的占用是比较少的,而且此时的删除是已经到了非做不可的地步.
    缺点:
    若大量的key在超出超时时间后,很久一段时间内,都没有被获取过,那么可能发生内存泄露(无用的垃圾占用了大量的内存)

    3.定期删除
    如果当前库中没有一个key设置了过期时间,直接执行下一个库的遍历,随机获取一个设置了过期时间的key,检查该key是否过期,如果过期,删除key,判断定期删除操作是否已经达到指定时长,若已经达到,直接退出定期删除。(默认每个库检测20个key)
    优点:
    1)通过限制删除操作的时长和频率,来减少删除操作对CPU时间的占用–处理"定时删除"的缺点
    2)定期删除过期key–处理"惰性删除"的缺点
    缺点:
    1)在内存友好方面,不如"定时删除"
    2)在CPU时间友好方面,不如"惰性删除"

    Redis采用的策略:定期删除+惰性删除

    如何配置?

    2、内存淘汰机制

    Redis有过期策略,假如你的Redis只能存1G的数据,你一个请求写入2G,而你也没有及时请求key,那么惰性删除就不生效了,Redis占用内存就会越来越高。

    Redis可以设置内存大小:

    maxmemory

    设置Redis最大占用内存大小为100

    maxmemory 100mb
    超过了这个内存大小,就会触发内存淘汰机制

    Redis有一个默认 内存淘汰机制:

    maxmemory-policy noeviction

    maxmemory-policy一共有8个值,当内存不足时:

    1)noeviction: 不删除,直接返回报错信息。
    2)allkeys-lru:移除最久未使用(使用频率最少)使用的key。推荐使用这种。
    3)volatile-lru:在设置了过期时间的key中,移除最久未使用的key。
    4)allkeys-random:随机移除某个key。
    5)volatile-random:在设置了过期时间的key中,随机移除某个key。
    6)volatile-ttl: 在设置了过期时间的key中,移除准备过期的key。
    7)allkeys-lfu:移除最近最少使用的key。
    8)volatile-lfu:在设置了过期时间的key中,移除最近最少使用的key。

    LRU和LFU的区别:
    LRU是最近最少使用页面置换算法(Least Recently Used),也就是首先淘汰最长时间未被使用的页面!

    比如有数据 1,1,1,2,2,3
    此时缓存中已有(1,2)
    当3加入的时候,得把前面的1淘汰,变成(3,2)

    LFU是最近最不常用页面置换算法(Least Frequently Used),也就是淘汰一定时期内被访问次数最少的页!

    比如有数据 1,1,1,2,2,3
    缓存中有(1(3次),2(2次))
    当3加入的时候,得把后面的2淘汰,变成(1(3次),3(1次))

    引申:

    假如我的key没有设置expire,即没有设置过期时间。那么 volatile-lru、volatile-random、volatile-ttl 就无法执行了,和 noeviction 就一样了。

    展开全文
  • 文章目录1.Redis淘汰策略简介2.Redis六种淘汰策略3.Redis中的自动过期机制3.1简介3.2开启回调监听机制3.3SpringBoot整合redis实现key失效监听4.Redis事务操作4.1Redis事务和mysql事务有什么区别?4.2Redis的watch...
  • redis淘汰策略详解

    2019-08-20 12:35:39
    redis六种淘汰策略详解 解决方法: 如果redis.conf设置了maxmemory,那redis内存到达这个值得时候就开始执行淘汰策略。如果不设置maxmemory或者设置为0,64位系统不限制内存,32位系统最多使用3GB内存,那么...
  • Redis淘汰策略

    千次阅读 2018-10-23 11:06:27
    用于解决什么问题呢?举个例子 1)我们都知道技术都是衍生于问题的。那我们就来说说用来做什么吧。 大家可以想想,当我们的物理服务...淘汰策略 1)voltile-lru:从已设置过期时间的数据集(server.db[i].ex...
  • Redis内存淘汰策略

    2022-04-29 09:14:19
    目录一、Redis六种淘汰策略二、如何配置Redis淘汰策略 将Redis用作缓存时,如果内存空间用满,就会自动驱逐老的数据。 一、Redis六种淘汰策略 noeviction:当内存使用达到阈值的时候,所有引起申请内存的命令会报错...
  • 1 过期删除策略 1.1 定时删除 当对一个key设置了过期时间,当该时间到,立即执行对该key的删除。 优点:定时删除对内存最友好,保证key一旦过期就能立即从内存中删除。 缺点:对CPU最不友好,在过期键比较多的...
  • Redis淘汰策略

    2021-12-28 15:57:42
    redis内存不足时的淘汰策略 一般情况下,当内存超出物理内存限制时,内存数据将与磁盘产生频繁交换(swap),swap会导致redis性能急剧下降,对于访问量较大的情况下,swap的存取效率会让服务基本处于不可用的状态。 ...
  • redis 淘汰策略

    2021-09-02 11:19:33
    redis 淘汰策略 淘汰策略概述 什么叫数据淘汰策略?什么样的应用场景需要用到数据淘汰策略? 当新数据进入redis时,如果内存不足怎么办?在执行每一个命令前,会调用**freeMemoryIfNeeded()**检测内存是否充足。如果...
  • redis淘汰策略

    千次阅读 2021-10-24 14:28:24
    redis内存不足怎么办,淘汰策略 no eviction redis中lru算法(Least recently used,最近最少使用),采用最久未使用策略 最久未使用存在的问题,对A来说相当不公平 lfu(Last Frequently Use 最不常(频繁)...
  • Redis淘汰策略

    2022-05-04 11:34:48
    Redis淘汰策略
  • redis数据淘汰策略

    千次阅读 2022-03-27 16:27:51
    一、什么是数据淘汰 当新数据进入redis之前,会调用freeMemoryIfNeeded()检测内存是否充足。如果内存不满足加入数据的最低要求,redis就会临时删除一些数据来存储新的数据。 清理数据的策略称为逐出算法 逐出数据...
  • 而一旦 redis 内存超出物理内存限制时,内存的数据就会开始和磁盘频繁的交换(swap); 这种涉及到 IO 操作机制的操作,会让 redis 的性能急剧下降。redis 访问量本来就十分频繁,存取效率大幅度降低是很致命的。 ...
  • redis 内存淘汰策略配置

    千次阅读 2018-12-25 09:14:33
    对应的策略 noeviction:当内存使用达到阈值的时候,所有引起申请内存的命令会报错。 allkeys-lru:在主键空间中,优先移除最近未使用的key。(推荐) volatile-lru:在设置了过期时间的键空间中,优先移除最近未...
  • Redis缓存淘汰策略

    千次阅读 2020-07-28 20:31:44
    Redis是基于内存key-value键值对的内存数据库,我们安装完数据库之后,内存往往会受到系统内存大小的限制,我们也可以配置redis能使用的最大的内存大小 1.配置Redis内存 (1)通过配置文件修改 我们可以通过配置...
  • 我们知道Redis是分布式内存数据库,基于内存运行,可是有没有想过比较好的服务器内存也不过几百G,能存多少数据呢,当内存占用满了之后该怎么办...不要怕,本篇我们一起来看一下Redis的内存淘汰策略是如何释放内存的。
  • Redis 内存淘汰策略

    2021-06-23 09:08:38
    大家都知道 Redis 中的键会设置过期时间,当到达过期时间时会通过一定策略清除对应 key,但是 redis 内存是由上限的,当达到内存上限时,就要通过一定策略淘汰掉相应 kv 键值对。 Redis 内存上限 maxmemory 配置...
  • redis 八大淘汰策略(redis5.0)

    千次阅读 2021-03-23 08:38:09
    Redis的内存使用达到设置的内存上限时就会触发内存淘汰机制,按照特定的淘汰算法进行数据清理,释放内存。 (1)noeviction:不淘汰,内存不足时, 新写入会报错。 (2)allkeys-lru:LRU,内存不足时,淘汰最近...
  • redis缓存淘汰策略

    2021-08-06 11:43:56
    针对该情况,redis提供对应缓存淘汰策略,了解各种缓存淘汰策略,在使用时合理设置缓存淘汰策略可以避免缓存被写满,提高缓存命中率,提升系统性能。 目前最新版本6.2.5提供8种缓存淘汰策略,这些缓存淘汰策略可以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,608
精华内容 10,643
关键字:

redis 淘汰策略