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

Redis——Redis的数据库结构、删除策略及淘汰策略

Redis是一个高性能的key-value存储系统,它支持多种数据结构,并提供了丰富的删除策略和淘汰策略。以下是关于Redis的数据库结构、删除策略及淘汰策略的详细介绍:

Redis的数据库结构

Redis是一个key-value数据库,数据存储是以一个唯一的key对应一个value。value有5种基础数据结构:

  1. string(字符串):值可以是字符串(简单的、以及json、xml格式的)、数字,甚至是二进制数据(图片、音频、视频),最大能存储512MB。
  2. hash(哈希):一个键值对集合。
  3. list(列表):一个字符串列表,按照插入顺序排序。
  4. set(集合):一个字符串集合,不允许有重复元素。
  5. zset(有序集合):一个字符串集合,每个元素都会关联一个double类型的分数。Redis正是通过分数来为集合中的成员进行从小到大的排序。

Redis的删除策略

Redis有三种删除策略来处理过期数据:

  1. 定时删除:创建一个定时器,当key过期时,定时器立即删除过期数据。这种方法节约内存,但CPU负荷高,尤其在访问量大时可能引起线程阻塞。
  2. 惰性删除:数据到达过期时间,不做处理。等下次访问该数据时,如果未过期,返回数据;如果已过期,删除并返回不存在。这种方法CPU压力会降低,但内存压力很大,长期有过期数据占用内存。
  3. 定期删除:Redis启动服务器初始化时,读取配置server.hz的值(默认为10),每秒执行server.hz次的serverCron()中的方法,周期性地轮询redis库中的时效型数据,采用随机抽取的策略,利用过期数据占比的方式控制删除频度(过期数据的比例不超过25%)。这种策略平衡了前两种极端的方案,CPU性能占用设置有峰值,检测频度可自定义,内存压力和CPU压力都不大。

Redis的淘汰策略

当Redis内存不足以容纳新写入数据时,就需要制定一定的淘汰策略。Redis提供了以下几种淘汰策略:

  1. noeviction:不淘汰任何数据,如果内存已经满了,不支持客户端写入新的数据,会直接发出拒绝,返回错误。
  2. volatile-lru:最常用的淘汰策略,该策略是淘汰掉设置了过期时间的键,并按照最少访问频次进行淘汰。
  3. volatile-lfu:针对设置了过期时间的key,按照一段时间内的访问频次,淘汰掉访问频次最低的进行淘汰。
  4. volatile-ttl:该策略是淘汰掉针对设置了过期时间的键,按照生存时间最短的进行淘汰。
  5. volatile-random:针对设置了过期时间的键,随机选择一个键淘汰。
  6. allkeys-lru:淘汰整个键值对中最久未使用的键值对。
  7. allkeys-lfu:淘汰整个键值对中一段时间最少使用的键值对。
  8. allkeys-random:随机淘汰任意键值对。

这些策略可以根据实际应用场景和需求进行选择和配置。

http://www.lryc.cn/news/349084.html

相关文章:

  • 【Vue3笔记03】Vue3项目工程中使用vue-router路由
  • 并行执行的4种类别——《OceanBase 并行执行》系列 4
  • 函数练习.
  • Git 分支命令操作详解
  • 十二生肖Midjourney绘画大挑战:释放你的创意火花
  • 【C++】priority_queues(优先级队列)和反向迭代器适配器的实现
  • Go语言函数
  • 如何使用EasyExcel导入百万数据
  • 【解决】Unity Build 应用程序运行即崩溃问题
  • C++数据结构——红黑树
  • Java并发编程:学习路线图
  • 算法_前缀和
  • C语言(指针)7
  • 线程纵横:C++并发编程的深度解析与实践
  • 在阿里云服务器上安装MySQL
  • 国标GB28181协议EasyCVR视频汇聚平台获取设备录像仅展示部分片段的原因排查
  • Java的类和对象(一)—— 初始类和对象,this关键字,构造方法
  • 富格林:曝光虚假套路规避亏损
  • 数据源网站分享
  • Flutter 中的 CupertinoAlertDialog 小部件:全面指南
  • 【RAG 论文】UPR:使用 LLM 来做检索后的 re-rank
  • 安全风险 - 如何解决 setAccessible(true) 带来的安全风险?
  • 创建继承自QObject的线程:一个详细指南
  • java项目之智慧图书管理系统设计与实现(springboot+vue+mysql)
  • 分享一些人生道理,希望能对大家有所帮助!
  • 【设计模式】JAVA Design Patterns——Abstract-document(抽象文档模式)
  • 5.13网络编程
  • 那些年使用过的UA头
  • IT技术产品:开发者极为重要的思维习惯
  • 软件产品质量模型及其子特性