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:随机淘汰任意键值对。

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

相关推荐

  1. Redis——Redis数据库结构删除策略淘汰策略

    2024-05-13 12:30:10       34 阅读
  2. Redis--过期删除策略数据淘汰策略

    2024-05-13 12:30:10       29 阅读
  3. Redis 数据过期淘汰策略

    2024-05-13 12:30:10       24 阅读
  4. Redis过期删除策略与内存淘汰机制

    2024-05-13 12:30:10       27 阅读
  5. Redis内存淘汰策略

    2024-05-13 12:30:10       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-13 12:30:10       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-13 12:30:10       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-13 12:30:10       82 阅读
  4. Python语言-面向对象

    2024-05-13 12:30:10       91 阅读

热门阅读

  1. Tauri框架:使用Rust构建轻量级桌面应用

    2024-05-13 12:30:10       31 阅读
  2. C语言和BASH SHELL中条件表达式的真假与0和1的关系

    2024-05-13 12:30:10       31 阅读
  3. 运维:CentOS常见命令详解

    2024-05-13 12:30:10       30 阅读
  4. 蓝桥杯-错误票据(两种写法stringstream和扣字符)

    2024-05-13 12:30:10       37 阅读
  5. Spring常见的注解

    2024-05-13 12:30:10       33 阅读
  6. WPS加载项(wps jsapi)创建、发布及部署

    2024-05-13 12:30:10       36 阅读
  7. phpstorm环境配置与应用

    2024-05-13 12:30:10       30 阅读
  8. 汇编语言定义宏指令--.macro

    2024-05-13 12:30:10       30 阅读
  9. [初学rust] 07_rust的函数

    2024-05-13 12:30:10       35 阅读