标题Redis内存回收机制

Redis的内存回收主要围绕以下两个方面:

1.Redis过期策略
删除过期时间的key值

2.Redis淘汰策略
内存使用到达maxmemory上限时触发内存淘汰数据

Redis的过期策略和内存淘汰策略不是一件事,实际研发中不要弄混淆了,下面会完整的介绍两者。

Redis过期策略

过期策略通常有以下三种:

1.定时过期

每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。

2.惰性过期

只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。

3.定期过期

每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。该策略是前两者的一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果。

Redis中同时使用了惰性过期和定期过期两种过期策略。

Redis淘汰策略

1.简介

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

2、LRU算法

Redis默认情况下就是使用LRU策略算法。

LRU算法(least RecentlyUsed),最近最少使用算法,也就是说默认删除最近最少使用的键。

但是一定要注意一点!redis中并不会准确的删除所有键中最近最少使用的键,而是随机抽取3个键,删除这三个键中最近最少使用的键。

那么3这个数字也是可以可以设置采样的大小,如果设置为10,那么效果会更好,不过也会耗费更多的CPU资源。对应位置是配置文件中的maxmeory-samples。

3.缓存清理配置

maxmemory用来设置redis存放数据的最大的内存大小,一旦超出这个内存大小之后,就会立即使用LRU算法清理掉部分数据。

对于64 bit的机器,如果maxmemory设置为0,那么就默认不限制内存的使用,直到耗尽机器中所有的内存为止;,但是对于32 bit的机器,有一个隐式的闲置就是3GB

4.Redis数据淘汰策略

maxmemory-policy,可以设置内存达到最大闲置后,采取什么策略来处理。

对应的淘汰策略规则如下:

高并发架构系列:Redis的内存回收原理,及内存过期淘汰策略详解
1)noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。

2)allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key。

3)allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key。

4)volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。

5)volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key。

6)volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。

5.缓存清理的流程

1)客户端执行数据写入操作

2)redis server接收到写入操作之后,检查maxmemory的限制,如果超过了限制,那么就根据对应的policy清理掉部分数据

3)写入操作完成执行。

总结
redis的内存淘汰策略用于处理内存不足时的需要申请额外空间的数据,内存淘汰策略的选取并不会影响过期的key的处理。过期策略用于处理过期的缓存数据。

以上就是redis内存回收机制的详解,更多Kafka消息队列、Dubbo、分库分表等高并发架构设计,具体请参考高并发架构66期专题。

hi,我是mike,原BAT高级研发经理、架构师,每日分享bat架构+面试+技术干货!觉得不错点赞支持,想要深度交流、进群学习,欢迎加我的QQ号 649449578~

高并发架构系列:分布式锁的由来、特点及Redis分布式锁的实现详解相关推荐

  1. 高并发架构系列:Spring Cloud的核心成员、以及架构实现详细介绍

    高并发架构系列:Spring Cloud的核心成员.以及架构实现详细介绍 什么是微服务 微服务的概念源于Martin Fowler所写的一篇文章"Microservices". 微 ...

  2. 高并发架构系列:什么是流量削峰?如何解决秒杀业务的削峰场景

    流量削峰的由来 主要是还是来自于互联网的业务场景,例如,马上即将开始的春节火车票抢购,大量的用户需要同一时间去抢购:以及大家熟知的阿里双11秒杀, 短时间上亿的用户涌入,瞬间流量巨大(高并发),比如: ...

  3. 高并发架构系列:如何从0到1设计一个类Dubbo的RPC框架

    优知学院 2019-01-22 18:43:51 之前持续分享的几十期阿里Java面试题中,几乎每次必问Dubbo,比如:"如何从0到1设计一个Dubbo的RPC框架",其实主要考 ...

  4. 高并发架构系列:MQ消息队列的12点核心原理总结

    2019独角兽企业重金招聘Python工程师标准>>> 消息队列已经逐渐成为分布式应用场景.内部通信.以及秒杀等高并发业务场景的核心手段,它具有低耦合.可靠投递.广播.流量控制.最终 ...

  5. 高并发架构系列:Redis缓存和MySQL数据一致性方案详解

    需求起因 在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节.所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库. 这个业务场景,主要 ...

  6. 高并发架构系列:如何解决Redis雪崩、穿透、并发等5大难题

    别人用手机刷新闻.刷段子,你用手机刷知识.你会的越多,成功率就越高. 本篇分享大型网站高并发架构设计是如何解决Redis雪崩.穿透.并发等5大难题的,以下,enjoy~ 缓存雪崩 数据未加载到缓存中, ...

  7. base cap 分布式_高并发架构系列:详解分布式一致性ACID、CAP、BASE,以及区别

    在面试环节,经常会问CAP.BASE等相关的分布式理论,其实这些名词主要还是来自于分布式的一致性,今天主要介绍分布式一致性:强一致性.最终一致性.ACID.CAP等理论. 分布式一致性的背景 随着分布 ...

  8. Redis系列教程(八):分布式锁的由来、及Redis分布式锁的实现详解

    在很多场景中,我们为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式事务.分布式锁等.那具体什么是分布式锁,分布式锁应用在哪些业务场景.如何来实现分布式锁呢?今天来探讨分布式锁这个话题. ...

  9. 高并发架构系列:Redis为什么是单线程、及高并发快的3大原因详解

    Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快: 2.redis是单线程的,省去了很多上下文切换线程的时间: 3.redis使用多路复用技术,可以处理并发的连接.非阻塞 ...

  10. 高并发架构系列:如何从0到1设计一个MQ消息队列

    消息队列作为系统解耦,流量控制的利器,成为分布式系统核心组件之一. 如果你对消息队列背后的实现原理关注不多,其实了解消息队列背后的实现非常重要. 不仅知其然还要知其所以然,这才是一个优秀的工程师需要具 ...

最新文章

  1. 当支持向量机遇上神经网络......
  2. 10秒一部电影,全球首个5G数据连接完成
  3. “ static”关键字在课程中做什么?
  4. 使用swagger作为restful api的doc文档生成——从源码中去提取restful URL接口描述文档...
  5. 典型案例 1:函数计算在音视频场景实践
  6. eclipse部分快捷操作
  7. STL中map用法详解
  8. C# 对轻量级(IoC Container)依赖注入Unity的使用
  9. 怎么判断一个字符串的最长回文子串是否在头尾_回文自动机入门
  10. 从校内谈SNS-网络社区文化
  11. c语言水库抽样算法代码,LeetCode---蓄水池抽样算法
  12. ixigua解析_资本运作系列课程五:《科创板申请上市估值模型理论解析》现场直播回放...
  13. C# 读取Oracle数据库数据
  14. c语言程序的书写格式,C语言基础教程:C语言程序书写格式
  15. 常用EDA软件的license文件结构分析
  16. CodeGenerator代码生成器使用
  17. 软件开发人才级别的划分
  18. Steam 游戏服务器IP地址段
  19. Ubuntu18.04上传文件夹到github
  20. Robocup3d比赛环境的搭建及常用函数简介

热门文章

  1. [转]Java 强引用、 软引用、 弱引用、虚引用
  2. Win9x 与 WinME 磁盘共享密码破解实战
  3. 975分过CCNA 640-801体会分享
  4. 安装完Final Cut Pro X后出现了打不开的情况的解决方法
  5. 如何让 Mac 加入网络帐户服务器?
  6. 「Photoshop 入门教程」如何在Mac版 Photoshop 中打开图像?
  7. TotalFinder for Mac(Finder增强工具)v1.14.1
  8. SoundSource 5 for Mac(音频控制工具)
  9. FoneDog Data Recovery数据恢复教程
  10. Windows Media Center SDK 在 GitHub 上发布