首页 > 数据库 >Redis——内存淘汰策略

Redis——内存淘汰策略

时间:2023-04-01 12:15:31浏览次数:52  
标签:限定值 缓存 过期 Redis 内存 key 淘汰

一、缓存耗尽的原因

1、每台机器的内存是一定的

2、key未设置过期时间

key不设置过期时间则在内存中一直存在,直到我们明确删除它。

3、过度或不合理的持久化

无论RDB快照或者AOF日志,都会在内存和磁盘中反复操作,需要一定的内存空间。

4、不及时清理过期缓存

有时过期缓存依旧存在,主要和缓存清理方式有关:

  • 主动定期删除  Redis默认每隔1s运行10次,每次随机抽取部分设置过期时间的key,检查是否过期,如果过期则删除key,直至过期的key比率低于1/4
  • 被动惰性删除  当客户端查询该key时,检查key是否过期,如果过期则删除key重新获取。

5、不合理不规范使用缓存

过度使用缓存,冷热数据不分;缓存过多或单个缓存value过大;缓存过期时间设置过长

二、淘汰策略

分三类:

  • 不淘汰而是直接拒绝写入新key (默认):1
  • 从设置了过期时间的key中淘汰: 2、3、4、5
  • 从所有key中淘汰: 6、7、8

1、noeviction

当写入新数据后的内存超过限定值时,写请求直接返回错误,只读请求可以正常执行,默认策略。

2、volatile-lru

当写入新数据后的内存超过限定值时,从设置了过期时间的key中使用LRU算法淘汰最久没有使用过的key。

LRU(Least Recently Used)

3、volatile-lfu

当写入新数据后的内存超过限定值时,从设置了过期时间的key中使用LFU算法淘汰使用频率最低的key。

LFU(Least Frequently used)

4、volatile-random

当写入新数据后的内存超过限定值时,从设置了过期时间的key中随机淘汰key。

5、volatile-ttl

当写入新数据后的内存超过限定值时,从设置了过期时间的key中根据过期时间淘汰key,越快过期越早淘汰。

6、allkeys-lru

当写入新数据后的内存超过限定值时,从所有key中使用LRU算法(最近最少使用算法)淘汰最久没有使用过的key。

7、allkeys-lfu

当写入新数据后的内存超过限定值时,从所有key中使用LFU算法(最少频率访问算法)淘汰使用频率最低的key。

8、allkeys-random

当写入新数据后的内存超过限定值时,从所有key中随机淘汰key

三、策略相关命令

#获取当前内存淘汰策略
redis > config get maxmemory-policy

#获取Redis能使用的最大内存大小:如果不设置最大内存大小或者设置为0,在64位操作系统#下不限制内存大小,在32位操作系统下最多使用3G
redis > config get maxmemory

#通过命令设置淘汰策略
redis > config set maxmemory-policy volatile-lru

#设置Redis最大占用内存大小
redis > config set maxmemory 2048mb

  

 

标签:限定值,缓存,过期,Redis,内存,key,淘汰
From: https://www.cnblogs.com/shog808/p/17278366.html

相关文章

  • 现代社会,不加强自我学习,被淘汰几乎是必然的
    我常看的社交APP是网易新闻,网易新闻也能推送一些内容过来,由于我需要常给上初中的女儿找点数学题,于是涉及数学就被推送了过来,其中不乏往年的高考题。不看不知道,一看吓一跳。以我过去的经验,我知道刚恢复高考那几年,高考是比较简单的,但我没想到的是,五六十年代高考更简单,基础的二次方程......
  • 一维数组内存分析
    Java虚拟机的内存划分为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。区域名称作用虚拟机栈用于存储正在执行的每个Java方法的局部变量表等。局部变量表存放了编译期可知长度<br/>的各种基本数据类型、对......
  • 4.2.1 Redis相关命令详解及原理
    LinuxC/C++服务器Redis相关命令详解及原理Redis是RemoteDictionaryService的简称;也是远程字典服务;Redis是内存数据库,KV数据库,数据结构数据库;Redis应用非常广泛,如Twitter、暴雪娱乐、Github、StackOverflow、腾讯、阿里巴巴、京东、华为、新浪微博等,很多中小型公司......
  • Redis基于@Cacheable注解实现接口缓存
    说明@Cacheable注解在方法上,表示该方法的返回结果是可以缓存的。也就是说,该方法的返回结果会放在缓存中,以便于以后使用相同的参数调用该方法时,会返回缓存中的值,而不会实际执行该方法。属性名称属性描述举例value/cacheNames指定缓存组件的名字@Cacheable(value="......
  • SpringBoot 使用RedisTemplate
    1.导入Maven依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>2.配置连接信息spring:redis:host:127.0.0.1......
  • Redis数据库高可用
    一、Redis高可用在web服务器中,高可用是指服务器可以正常访问的时问,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%99.998等等)。但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证提供正常服务(如主从分离、快速容灾技术),还需要考虑数据容量的扩展、数据安全不会丢......
  • 一个机器开启多个redis
    一个机器开启多个redis复制redis.conf(可以先查一下redis.conf路径在哪里,find/-nameredis.conf)cpredis.confredis3.conf修改port、pidfile(命令行下用/port可以快速查询,按n查找下一个)port6381​pidfile/var/run/redis_6381.pid注意路径是否写对src/redis-s......
  • 什么是内存泄漏?哪些情况造成内存泄露?
    内存泄漏是指:一块被分配的内存既不能使用又不能回收,直到浏览器进程结束;以下列举内存泄漏的情况: <body>  <divclass="main">   <divclass="test">天</div>   <divclass="item">天</div>   <divclass="item">向<......
  • Redis和kafka比较,两者的区别和各自的优势。
    1.Redis,它首先是一个内存数据库,其提供的PUB/SUB功能把消息保存在内存中(基于channel),因此如果你的消息的持久性需求并不高且后端应用的消费能力超强的话,使用RedisPUB/SUB是比较合适的使用场景。比如官网说提供的一个网络聊天室的例子:模拟IRC,因为channel就是IRC中的服务器。用户......
  • RedisInsight的使用(Redis图形化工具)
    建议连接redis-cluster需求的,并且没有设置密码的,安装redisinsight-win-1.13.1.msi,但是官网说1.X版本在23/4/30后就不支持了。在浏览器中输入http://IP:8001就能看到主界面   勾选IhavereadandunderstoodtheRedisInsightLicenseTerms,r然后点CONFIRM   ......