IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Redis高级——数据删除策略 -> 正文阅读

[大数据]Redis高级——数据删除策略

为什么要删除数据

随着服务器的运行,Redis 中的数据量会越来越大,但并非每一条数据都是必须的,为了降低不必要的内存消耗,需要对 Redis 中的数据进行删除


Redis 的三种删除策略

定时删除

基本思想

当 key 设置有过期时间的时候,创建一个定时器,过期时间到达时,由定时器立即执行对 key 的删除

优点

  • 一到达过期时间立即删除,释放内存快速

缺点

  • 无论当前 CPU 压力是否过大,都会立即占用 CPU 执行删除任务,影响 Redis 服务器响应时间和吞吐量

总结

定时删除是一种用 CPU 性能换取内存空间的删除策略

惰性删除

基本思想

数据到达过期时间后,不做处理,下次访问该数据时,删除该数据并返回不存在

本质上是在读写该数据前调用 expireIfNeeded() 方法

  • 如果数据已经过期,那么 expireIfNeeded() 将该数据从数据库中删除
  • 如果数据未过期,那么 expireIfNeeded() 不做处理

优点

  • 节约 CPU 性能,只有当必须要删除时才执行删除任务

缺点

  • 当长时间未获取某些过期数据后,会使得大量数据长期占用内存,造成内存压力过大

总结

惰性删除是一种用内存空间换取 CPU 性能的删除策略

定期删除

实现流程

  • Redis 服务器初始化时,读取配置中 server.hz 的值,默认是 10
  • 对服务器进行定时轮询,每秒执行 server.hz 次 serverCron() 函数
  • serverCron() 函数中,通过 databasesCron() 函数对每个数据库进行轮询
  • 通过?activeExpireCycle() 函数对每个数据库的 expires?空间进行检测,每次执行 250ms/server.hz
  • 对该 expires 空间随机挑选 W 个 key 进行检测
  • 如果 key 过期,则删除
  • 如果一轮中删除的 key 数量>0.25W ,再循环一轮(在剩下的 key 中重新随机挑选 W 个进行检测)
  • 如果一轮中删除的 key 数量 ≤ 0.25W ,进行下一个数据库的 expires?空间的检测

在?redis.windows.conf(Linux 下为 redis.conf)中配置 hz 的值,用 info server 指令查看

总结

  • 可以灵活的自定义检测频率,利用过期数据占比情况控制删除频率,保证了 CPU 占用不会过高
  • 内存定期随机清理,一定程度上降低了内存压力

逐出(淘汰)策略

Redis 在执行指令前,会调用freeMemoryIfNeeded() 函数检测内存空间是否足够,若不足则会临时删除一些数据来为当前指令提供足够的内存空间,此时的删除策略称为逐出(淘汰)策略

相关配置

参数名默认值说明
maxmemory0(表示不限制)最大可使用内存
maxmemory-samples5每次随机选取待删除数据的个数
maxmemory-policy

volatile-lru(Redis4.0前)

no-enviction(Redis4.0后)

对挑选出来的数据进行删除的策略

检测易失数据

  • volatile-lru(Least Recently Used):最近最少使用算法,从设置了过期时间的 key 中选择最长时间没有使用的?key 删除
  • volatile-lfu(Least Frequently Used):最近最不经常使用算法,从设置了过期时间的 key 中选择某段时间内使用次数最少的 key 删除
  • volatile-ttl(Time To Live):从设置了过期时间的 key 中选择过期时间最早的 key 删除
  • volatile-random:从设置了过期时间的 key 中,随机选择 key 删除

检测全库数据

  • allkeys-lru(Least Recently Used):最近最少使用算法,从所有的 key 中选择最长时间没有使用的?key 删除

  • allkeys-lfu(Least Frequently Used):最近最不经常使用算法,从所有的 key 中选择某段时间内使用次数最少的 key 删除

  • allkeys-random:从所有的 key 中,随机选择 key 删除

放弃逐出

  • no-enviction:禁止逐出数据,当内存不足以容纳新数据时,写入操作就会报错,采用该策略可以保证数据不被丢失
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-17 12:03:34  更:2021-10-17 12:03:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:14:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码