首页 > 数据库 >Redis内存淘汰策略

Redis内存淘汰策略

时间:2025-01-22 09:04:15浏览次数:3  
标签:策略 过期 Redis 内存 淘汰 数据

Redis 是一个高性能的键值存储系统,它支持多种数据结构,如字符串、列表、集合、有序集合等。由于 Redis 是基于内存的存储系统,因此它的速度非常快。然而,内存资源是有限的,当 Redis 的内存使用量达到一定阈值时,就需要采取一些策略来管理内存,以确保系统的稳定性和性能。这就是 Redis 的内存淘汰策略发挥作用的地方。

内存淘汰策略概述

Redis 提供了多种内存淘汰策略,这些策略决定了当内存不足以容纳新数据时,哪些旧数据应该被移除。以下是 Redis 提供的内存淘汰策略:

  1. volatile-lru(Least Recently Used):从已设置过期时间的数据集中,选择最近最少使用的数据进行淘汰。

  2. volatile-ttl:从已设置过期时间的数据集中,选择即将过期的数据进行淘汰。

  3. volatile-random:从已设置过期时间的数据集中,随机选择数据进行淘汰。

  4. allkeys-lru:从所有数据集中,选择最近最少使用的数据进行淘汰。

  5. allkeys-random:从所有数据集中,随机选择数据进行淘汰。

  6. no-eviction:不进行数据淘汰,当内存不足以容纳新数据时,新写入操作会报错。

  7. volatile-lfu(Least Frequently Used):从已设置过期时间的数据集中,选择最不经常使用的数据进行淘汰(4.0 版本后新增)。

  8. allkeys-lfu:从所有数据集中,选择最不经常使用的数据进行淘汰(4.0 版本后新增)。

策略分析与举例

volatile-lru

解释:这种策略会从那些设置了过期时间的键中,找出最近最少使用的键进行淘汰。

举例:假设你有一个缓存系统,缓存了用户最近访问的商品信息,并且每个商品信息都设置了过期时间。当内存不足时,系统会优先淘汰那些用户很久没有访问的商品信息。

allkeys-lru

解释:这种策略不考虑键是否设置了过期时间,直接从所有键中找出最近最少使用的键进行淘汰。

举例:如果你在运行一个社交媒体平台,用户可以上传图片和视频。为了节省内存,系统可能会优先淘汰那些用户很久没有访问的图片和视频。

volatile-ttl

解释:这种策略会从设置了过期时间的键中,选择那些即将过期的键进行淘汰。

举例:在新闻网站中,新闻的时效性很重要。当内存不足时,系统可以优先淘汰那些即将过期的新闻内容。

allkeys-random

解释:这种策略会从所有键中随机选择一些键进行淘汰。

举例:在游戏服务器中,可能会缓存玩家的状态信息。当内存不足时,系统可能会随机淘汰一些玩家的状态信息,以释放内存。

no-eviction

解释:这种策略不允许淘汰任何键,当内存不足以容纳新数据时,新写入操作会报错。

举例:在某些关键业务系统中,可能不允许丢失任何数据。在这种情况下,可以选择 no-eviction 策略,当内存不足时,系统会拒绝新的写入请求,直到有足够的内存可用。

volatile-lfu 和 allkeys-lfu

解释:这两种策略(4.0 版本后新增)会从设置了过期时间的键或所有键中,选择那些最不经常使用的键进行淘汰。

举例:在电商网站中,可能会缓存商品的详细信息。如果某些商品很少被用户查看,那么在内存不足时,系统可以优先淘汰这些不常访问的商品信息。

如何设置内存淘汰策略

你可以通过以下命令来查看和设置 Redis 的内存淘汰策略:

  • 查看当前内存淘汰策略:

    config get maxmemory-policy
  • 设置内存淘汰策略:

    config set maxmemory-policy allkeys-lru

请注意,通过 config set 命令设置的内存淘汰策略在 Redis 重启后不会保留,需要在 redis.conf 配置文件中设置才能永久生效。

标签:策略,过期,Redis,内存,淘汰,数据
From: https://blog.csdn.net/m0_73355421/article/details/145281513

相关文章

  • 带 `$` 符号的 Redis 密码在 Flink 调度脚本中被截断的解决方案 WRONGPASS invalid us
    在实际生产使用中,如果你的Redis密码中包含$符号,而你又通过调度脚本(如DolphinScheduler)或Shell参数方式传递给Flink,就可能造成密码被部分截断,进而导致:WRONGPASSinvalidusername-passwordpairoruserisdisabled这是因为Shell解释$为变量展开符,后续字符被当作环......
  • 图片内存变大
    平时我们会经常遇到压缩图片内存的情况,但是需要把图片内存变大的情况有人遇到过吗,接下来就是图片变大术的详细教程!将需要处理的图片放在一个文件夹内(例:图片a.png放在D盘根目录下)win+R输入cmd打开命令控制行在命令控制行输入cd+图片所在的目录,如果是在磁盘根目录直接......
  • Redis数据库笔记——ZSet的底层实现(跳表)
    大家好,这里是GoodNote,关注公主号:Goodnote,专栏文章私信限时Free。本文详细介绍ZSet数据类型中跳表的底层实现,包括基本特点和常用操作。文章目录ZSet(有序集合)概述基本特点底层实现Skiplist跳表概述结构跳表的基本操作1.查找操作:`Search`2.插入操作:`Insert`3.删......
  • 深入剖析 JVM 内存模型
    前言:下面分别介绍了新生代和老年代的不同收集器及其相关子类型,并附有示例代码和说明,感兴趣的朋友可以参考一下。简介:在Java虚拟机(JVM)的世界里,内存模型是其核心架构之一,它决定了Java程序如何存储和管理数据,深刻影响着程序的性能和稳定性。了解JVM内存模型,对于优化......
  • 关于Redisson分布式锁的用法
    一、前言在分布式系统中,多个节点可能会同时访问共享资源,导致数据不一致的问题。分布式锁是解决这些问题的一种有效机制。Redisson是一个基于Redis的Java客户端,不仅提供了丰富的分布式数据结构,还实现了分布式锁功能。本文将详细介绍Redisson分布式锁的用法,包括其配置、基本用法和......
  • 我们开发了一个强大的 shell 脚本用于收集系统内存信息
    在Linux系统管理中,监控内存使用情况至关重要。我们开发了一个强大的shell脚本用于收集系统内存信息。该脚本以/bin/bash为解释器,首先创建/var/log/meminfo_collector.log日志文件,若创建失败则记录错误并终止,以方便后续追踪调试。接着根据当前日期在/root/kylin_s......
  • Redis Stream:实时数据流的处理与存储
    RedisStream是Redis5.0引入的一个强大的数据结构,专门用于处理实时数据流。它类似于ApacheKafka和RabbitMQ等消息队列系统,但集成在Redis这个内存数据库中,使得Redis不仅能处理缓存和存储,还能高效地处理实时数据流。本文将深入探讨RedisStream的特性、使用方法以及......
  • Redis的三大常见问题
    Redis的三大常见问题如果是一名能够熟练的将Redis运用到项目中的程序员,那么一定听说过Redis在使用中存在的问题,那么我们今天就来聊聊Redis的三大问题为什么会有三大问题?首先,对于很多刚接触Redis的同学,很多时候分不清Redis的作用,不太理解为什么要在SQL之外单独在搞一个Red......
  • Redisson
    Redisson是一个基于Redis的Java客户端,提供了丰富的分布式功能,并且对Redis的操作进行了封装,使得开发者可以更方便地使用Redis作为分布式缓存、消息队列、分布式锁等功能的实现工具。Redisson是一个功能强大的开源框架,能够通过Redis实现许多分布式系统常用的特......
  • 内存字符串有关问题
    问题一:#include<iostream>#include<cstdint>#include<cstring>usingnamespacestd;typedefstructdata{charhwid[4];charsip[4];charrev[4];}Data;intmain(){Datastdata;memset(&stdata,0,sizeof(stdata));......