Redis 的内存淘汰策略,是指当内存使用达到最大内存极限时,需要使用淘汰算法来决定清理掉哪些数据,以保证新数据的存入。

最大内存设置

redis.conf 参数配置:

# maxmemory <bytes>

如果不设置maxmemory 或者设置为0,64 位系统不限制内存,32 位系统最多使用3GB 内存。

动态修改:

redis> config set maxmemory 2GB

到达最大内存以后怎么办?

淘汰策略

https://redis.io/topics/lru-cache

redis.conf

# maxmemory-policy noeviction

# volatile-lru -> Evict using approximated LRU among the keys with an expire set.
# allkeys-lru -> Evict any key using approximated LRU.
# volatile-lfu -> Evict using approximated LFU among the keys with an expire set.
# allkeys-lfu -> Evict any key using approximated LFU.
# volatile-random -> Remove a random key among the ones with an expire set.
# allkeys-random -> Remove a random key, any key.
# volatile-ttl -> Remove the key with the nearest expire time (minor TTL)
# noeviction -> Don't evict anything, just return an error on write operations.

先从算法来看:

LRU,Least Recently Used:最近最少使用。判断最近被使用的时间,目前最远的数据优先被淘汰。

LFU,Least Frequently Used,最不常用,4.0 版本新增。

random,随机删除。

策略 含义
volatile-lru 根据LRU 算法删除设置了超时属性(expire)的键,直到腾出足够内存为止。如果没有可删除的键对象,回退到noeviction 策略。
allkeys-lru 根据LRU 算法删除键,不管数据有没有设置超时属性,直到腾出足够内存为止。
volatile-lfu 在带有过期时间的键中选择最不常用的。
allkeys-lfu 在所有的键中选择最不常用的,不管数据有没有设置超时属性。
volatile-random 在带有过期时间的键中随机选择。
allkeys-random 随机删除所有键,直到腾出足够内存为止。
volatile-ttl 根据键值对象的ttl 属性,删除最近将要过期数据。如果没有,回退到noeviction 策略。
noeviction 默认策略,不会删除任何数据,拒绝所有写入操作并返回客户端错误信息(error)OOM
command not allowed when used memory,此时Redis 只响应读操作。

如果没有符合前提条件的key 被淘汰,那么volatile-lru、volatile-random 、volatile-ttl 相当于noeviction(不做内存回收)。

动态修改淘汰策略:

redis> config set maxmemory-policy volatile-lru

建议使用volatile-lru,在保证正常服务的情况下,优先删除最近最少使用的key。

Redis中的淘汰策略相关推荐

  1. redis高级-内存淘汰策略

    目录 一.redis缓存过期淘汰策略 1.redis默认内存 2.修改redis内存 3.查看redis内存情况 二.redis内存超出了设置的最大值会怎么样 1.设置1个字节之后再赋值,会爆OOM ...

  2. Redis的常用淘汰策略以及算法实现

    一.Redis的内存配置 1,Redis配置内存为多少合适? 默认:如果不设置最大内存大小或者设置最大内存大小为0,在64为操作系统下不限制内存大小,在32位操作系统下最多使用3GB内存. 极限情况: ...

  3. Redis——》内存淘汰策略

    推荐链接:     总结-->[Java]     总结-->[Mysql]     总结-->[Redis]     总结-->[Spring]     总结-->[S ...

  4. Redis 的内存淘汰策略问题

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 33h.co/ewcf Redis是基于内存的 ...

  5. Redis中的过期策略

    Reids 所有的数据都是存储在内存中的,在某些情况下需要对占用的内存空间进行回收.内存回收主要分为两类,一类是key 过期,一类是内存使用达到上限(max_memory)触发内存淘汰. 过期策略 要 ...

  6. Redis的内存淘汰策略问题

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 来源:33h.co/ewcf Redis是基于内存的key-value数据 ...

  7. Redis的内存淘汰策略

    Redis占用内存大小 我们知道Redis是基于内存的key-value数据库,因为系统的内存大小有限,所以我们在使用Redis的时候可以配置Redis能使用的最大的内存大小. 1.通过配置文件配置 ...

  8. php redis hset过期时间,详解Redis中数据过期策略

    相信大家对Redis中数据过期有点了解,本文主要介绍了Redis中的数据过期策略,文中通过示例代码介绍的很详细,相信对大家的理解和学习具有一定的参考借鉴价值,有需要的朋友可以参考借鉴,希望能帮助到大家 ...

  9. redis之数据淘汰策略(三)lfu

    因为redis的lru的淘汰策略关注的是key的访问时间,如果是一次性的遍历key那种操作,将导致很多不在访问的key滞留在内存中,将立即需要访问的数据淘汰出去. 因此在redis4.0.0中引入了l ...

最新文章

  1. 在CentOS 6.6 64bit上安装截图软件shutter
  2. 半导体物理与器件pdf施敏_西湖大学工学院先进固态半导体实验室行政助理招聘,户籍专业不限!...
  3. 试试回答Frankyang的问题-什么样的人适合攻读博士学位?
  4. 开发者的实用 Vim 插件(一)
  5. sqlite数据库的基本增删改查操作
  6. Response.Write具体介绍
  7. 新浪安装weiphp2.0的方法
  8. oracle ignore_Oracle 数据库常用操作语句,速速收藏
  9. Golang 新手入门教程(一):Go 安装与配置
  10. minio权限之IAM policy配置及用户赋权
  11. 转(逍遥子)Mosquito使用SSL/TLS进行安全通信时的使用方法
  12. 网站优化基本技巧(网站优化的主要工作是什么)
  13. 日常水文章之Linux+arm+阿里IOT sdk+Cmake
  14. 爱快固件是Linux系统吗,爱快硬路由和软路由系统有什么区别
  15. 2021年服创国赛参赛小结
  16. 2021-2027全球与中国铝质气雾罐市场现状及未来发展趋势
  17. mysql 数据精确度_mysql数据精度丢失问题深入探讨
  18. vue中使用echarts-gl(3d环形图)
  19. 彭于晏简单网页制作(HTML和css)
  20. 【雷达与对抗】【2014.09】无源双基地雷达系统的目标检测与成像

热门文章

  1. | dp-the Treasure Hunter
  2. Selenium2+python自动化70-unittest之跳过用例(skip)
  3. 知道这些面试技巧,让你的测试求职少走弯路
  4. [js开源组件开发]图片放大镜
  5. [Java] 关键字final、static使用总结
  6. 设计模式札记——单例模式(Singleton Pattern)
  7. tomcat压力测试、优化
  8. 对Coverage进行编辑
  9. 有一整片蓝天 停住时间。
  10. java解析json转Map