当前位置: 首页 > article >正文

【黑马Redis原理篇】Redis内存回收

视频来源 :原理篇[30,31]

文章目录

  • 1.过期策略
    • 1.1 怎样知道redis是否过期?
    • 1.2 TTL到期立即删除吗?
      • 1.2.1 惰性删除
      • 1.2.2 周期删除
  • 2.淘汰策略
    • 2.1 什么时候淘汰?
    • 2.2 八种淘汰策略
    • 2.3 执行流程

内存回收的两种方式:过期策略和淘汰策略。

1.过期策略

设置TTL,到期以后释放

1.1 怎样知道redis是否过期?

在结构体中,有一个字典存放key和它的过期时间。
在这里插入图片描述

1.2 TTL到期立即删除吗?

1.2.1 惰性删除

当访问一个key时,先检查它的存活时间。如果过期,才执行删除。

1.2.2 周期删除

通过周期任务,定时性地抽样过期的key,然后执行删除。
执行周期有两种:
(1)Redis初始化时,会设置一个定时任务serverCron(),按照server.hz的频率来执行过期key清理,模式为SLOW;
(2)Redis的每个事件循环前,会调用beforeSleep()函数,执行过期key清理,模式为FAST
在这里插入图片描述
SLOW和FAST模式执行时间长短不同
在这里插入图片描述

2.淘汰策略

2.1 什么时候淘汰?

当redis内存使用达到设置的阈值时,redis主动挑选,删除部分key,释放内存。
在任何的命令执行之前。
在这里插入图片描述

2.2 八种淘汰策略

在这里插入图片描述LRU和LFU的区别:在这里插入图片描述
数据存放在Redis的数据结构中:
在这里插入图片描述
什么叫逻辑访问次数:
在这里插入图片描述

2.3 执行流程

在这里插入图片描述
准备一个淘汰池。这个淘汰池一开始是空的。因为我们不想遍历所有key,所以我们从数据库随机挑选一些样本(还需要再选择)放入淘汰池中,再从淘汰池中利用淘汰策略选取被淘汰的。这种方式性能较好。


http://www.kler.cn/news/364364.html

相关文章:

  • Python基础知识-模块与包篇
  • Failed to fetch dynamically imported module
  • k8s-service详解
  • 【Vispy库】一个用于高性能交互式2D/3D数据可视化库 Python库
  • proteus中没有STM32F103C8(已解决)
  • 若依前后端分离超详情版
  • reactive中声明ref对象,怎么使用
  • vue-vant框架引入
  • obesi-daemon.log这个日志一直在不断输出?
  • Centos编写mysql备份脚本
  • 好用的vscode内置GPT中文版插件 ,可问答 , 可生成代码! (AI程序员 , 出列 !)
  • 新手向-C接口调用dbus
  • 软件部署-Docker容器化技术(二)
  • (清晰易懂版)(multi)map和set--C++
  • 数据结构~红黑树
  • Linux基础环境搭建(CentOS7)- 安装Scala和Spark
  • webassembly之typescript支持
  • OpenCV系列教程五:图像的分割与修复
  • 代谢组数据分析(二十):通过WGCNA识别核心代谢物
  • 面向对象进阶(下)(JAVA笔记第二十二期)
  • 数据结构(8.2_2)—希尔排序
  • 了解 WebSocket
  • 【格物刊】龙信刊物已上新
  • 【linux开发-驱动】SPI驱动开发相关
  • node和npm
  • 指增和中性产品的申赎加减仓及资金调拨自动化伪代码思路