Redis 缓存清理

2023-11-13

redis中,key过期后并不会马上删除,而是同时使用了 3 种策略来删除这些key

  • 惰性清除:访问key时,如果发现key已经过期,那么会将key删除

  • 定时清理:每次清理会依次遍历所有DB,从db随机取出20个key,如果过期就删除

  • 如果其中有5个key过期,那么就继续对这个db进行清理,否则开始清理下一个db

  • 内存不足:内存不够,采用LRU策略清除

1. LRU 介绍

redis在数据达到一定程度之后,就会将数据进行清理,默认采用的是LRU策略

  • LRU:Least Recently Used,最近最少使用算法

  • 将最近一段时间内,最少使用的一些数据,给干掉。

  • 比如说有一个key,在最近1个小时内,只被访问了一次; 还有一个key在最近1个小时内,被访问了1万次

  • 这时候就会清除只访问了一次的key

2. 缓存清理配置

在 redis.conf 中也可以进行配置

  • maxmemory:redis存放数据的最大内存,超出这个内存之后,就会立即使用LRU算法清理掉部分数据

  • 64 bit的机器,如果maxmemory设置为0,那么就默认不限制内存的使用,直到耗尽机器中所有的内存为止;

  • 32 bit的机器,有一个隐式的闲置就是3GB

  • maxmemory-policy:内存达到最大限制后,采取什么策略来处理

  • noeviction: 内存达到最大限制,client还要继续写入数据,直接报错给客户端

  • allkeys-lru: 就是我们说的LRU算法,移除掉最近最少使用的数据

  • allkeys-random: 随机选择一些key来删除掉

  • volatile-lru: 采取LRU算法,仅仅对设置了存活时间(TTL)的key才会清理掉

  • volatile-random: 随机选择一些设置了TTL的key来删除掉

  • volatile-ttl: 选择那些TTL时间比较短的key,益处

  • maxmemory_samples:随机选择的key的数量

3. Redis 的LRU算法

redis中使用的是LRU近似算法,也就是对keys进行采样,然后在采样结果中进行数据清理,之所以不使用 LRU 算法,是因为需要消耗大量的额外的内存

Redis 为实现近似 LRU 算法,它给每个 key 增加了一个额外的小字段,这个字段的长度是 24 个bit,也就是最后一次被访问的时间戳。

当 Redis 执行写操作时,发现内存超出 maxmemory,就会执行一次 LRU 淘汰算法。

  • 就是随机采样出 5 个key(通过maxmemory_samples配置) ,然后淘汰掉最旧的 key

  • 如果淘汰后内存还是超出 maxmemory,那就继续随机采样淘汰,直到内存低于 maxmemory 为止。

  • 采样:通过 maxmemory-policy 的配置

  • allkeys 就是从所有的 key 中随机

  • volatile 就从带过期时间的 key 中随机

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis 缓存清理 的相关文章

随机推荐

  • c语言逐行存储到txt,c语言逐行读取txt文件数据

    我写的是linux下的程序 一个文件叫MYFILE里面是一行一行的写内容的 我可以使用fgets函数 1 函数名 fgets 2 声明 char fgets char buf int bufsize FILE stream 3 头文件 st
  • Android JNI2--C++基础

    1 基础结构 C 标准支持 include
  • MATLAB之极坐标绘图

    目标是要绘制一个二维的极坐标彩色图 输入参数有三个 一个是角度 一个是半径 一个是颜色 说到极坐标绘图 第一个想到的就是polar啦 那就先试试吧 1 polar绘图 polar函数用来绘制极坐标图 调用格式为 polar theta rh
  • 数据结构-最小生成树、prim算法、kruskal算法

    目录 最小生成树 Prim算法 普里姆 Kruskal算法 科普斯卡尔 prim算法的实现思想 Kruskal算法的实现思想 最小生成树 如果一个连通图本身就是一棵树 则其最小生成树就是它本身 只有连通图才有生成树 非连通图只有生成森林 P
  • telnet 使用教程(新手篇)及问题集锦

    telnet经常用于测试网络及端口占用情况 具体使用如下 测试端口命令 telnet host 端口 例 telnet 192 168 31 100 8081 连接失败表示端口未占用 否则表示被占用 如下 8080端口已占用 例 telne
  • RACI模型

    1 什么是RACI模型 释义 RACI是一个相对直观的模型 用以明确组织变革过程中的各个角色及其相关责任 我们知道 变革过程是不可能自发或者自动进行的 必须有人对其进行作用 促使进程发生变化 因而 就很有必要对谁做什么 以及促发什么样的变革
  • dracut 使用笔记

    dracut 维基 https dracut wiki kernel org index php Main Page dracut 官方手册 https www kernel org pub linux utils boot dracut
  • luaframework框架中将protobuf文件转成lua文件

    在luaframework框架中提供了通讯工具protobuf 需要将protobuf文件转成lua文件使用 按步骤来 1 下载并安装Python 我下载的版本是2 7 8 这个去Python官网下载即可 我的Python安装目录如图 2
  • Mybatis-plus 集合分页方法

    一 静态分页 1 POM引用
  • 使用matplotlib做动态排名图

    数据源 数据 过程 1 将数据进行持久化存储 先使用pandas的read csv函数从网页端直接读取数据 并筛选部分数据 url https gist githubusercontent com johnburnmurdoch 4199d
  • 【网页设计】HTML+CSS 实现简单宣传网页设计展示

    网站设计包含 1 图片设计 有背景图片和颜色 同时有一张图片悬浮 2 字体设计 设置字体大小 颜色等内容 3 按钮设计 完成点击按钮后弹出视频窗口的功能 4 视频窗口 视频窗口包括视频进度条 调节音量 窗口全屏 调节视频播放速度以及画中画等
  • NetworkManager和network

    一 NetworkManager做了什么 NetworkManager确保网络连接正常 当检测到系统中没有网络配置但有网络设备时 NetworkManager会创建临时连接以提供连接 通过不同的工具 GUI nmtui nmcli 提供管理
  • 操作系统 页面置换算法:LRU和FIFO

    LRU Least Recently Used 最少使用页面置换算法 顾名思义 就是替换掉最少使用的页面 FIFO first in first out 先进先出 页面置换算法 这是的最早出现的置换算法 该算法总是淘汰最先进入内存的页面 即
  • flutter Image图片控件-知识点

    图片是大家做项目中常用最大控件之一 本篇针对项目中经常用的功能 做些总结 ImageProvider 是一个抽象类 主要定义了图片数据获取的接口load 从不同的数据源获取图片需要实现不同的ImageProvider 如AssetImage
  • Linux搭建SVN服务器

    1 安装SVN 官网下载 http subversion apache org packages html SVN客户端 TortoiseSVN 官网下载 http tortoisesvn net downloads html yum in
  • SpringCloud——GateWay入门

    客户由发送请求由Nginx服务器已经将请求转发到一个服务器上 但是服务之前我们还需要一个网关将这些请求进一步加工处理到服务上 这一步就是GateWay GateWay 1 GateWay服务是不需要进入以下jar包
  • Java_synchronized的锁对象之对象锁和类锁

    具体知识学习与 https blog csdn net yansuoo article details 51248281 https www jianshu com p 6586d9f3b515 下面是自己的理解 代码 一 前置知识 jav
  • 设计模式-建造者模式

    建造者模式是一种创建型设计模式 它允许你创建复杂对象的不同表示 而无需直接与其构造函数参数进行交互 建造者模式将一个复杂对象的构建与其表示分离 使得同样的构建过程可以创建不同的表示 建造者模式的核心思想是将一个复杂对象的构建过程分解为多个简
  • web前端基础——第二章

    目录 十八 表格标签 1 table tr th td caption 等 2 语义化标签 thead tbody tfoot 十九 表格属性 二十 表单标签 二十一 表格表单组合 二十二 div 与 span 1 div 做一个区域划分的
  • Redis 缓存清理

    redis中 key过期后并不会马上删除 而是同时使用了 3 种策略来删除这些key 惰性清除 访问key时 如果发现key已经过期 那么会将key删除 定时清理 每次清理会依次遍历所有DB 从db随机取出20个key 如果过期就删除 如果