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

Redis 缓存淘汰策略

时间:2024-10-17 16:43:22浏览次数:7  
标签:场景 策略 过期 Redis 缓存 内存 淘汰

一、概述

缓存淘汰策略是在 Redis 达到最大内存限制时,决定哪些数据需要被移除以便为新数据腾出空间的策略。

这些策略通过配置文件或命令进行设置, 以保证 Redis 在有限的内存环境下能够平稳运行。

二、各种淘汰策略介绍

Redis提供了8种淘汰策略,可以分成两大类:

1、针对所有键的策略:对所有键进行选择和淘汰。

2、仅针对有过期时间的键的策略:只在设置了过期时间的键中选择淘汰对象。

以下具体策略:

1. noeviction

  • 描述:达到内存限制时,不再执行删除操作,直接拒绝所有写入请求(包括插入和更新)。

  • 适用场景:希望数据永不丢失的场景,但需要保证内存充足,否则会导致写入操作失败。

2. allkeys-lru(最近最少使用)

  • 描述:在所有的键中使用 LRU算法,删除最近最少使用的键。

  • 适用场景:适合缓存场景,保留频繁访问的键,逐出很少被访问的键。

3. allkeys-lfu(最少使用频率)

  • 描述:在所有键中使用 LFU 算法,删除使用频率最低的键。

  • 适用场景:适用于需根据使用频率进行淘汰的场景,更关注访问次数而非访问时间。

4. volatile-lru(最近最少使用)

  • 描述:仅对设置了过期时间的键使用 LRU 算法。

  • 适用场景:适合缓存一些有过期时间的数据,希望根据访问频率来进行内存管理的场景。

5. volatile-lfu(最少使用频率)

  • 描述:仅对设置了过期时间的键使用 LFU算法。

  • 适用场景:同 volatile-lru,但更关注使用频率

6. allkeys-random

  • 描述:在所有键中随机选择删除某个键。

  • 适用场景:适用于缓存数据访问频率没有明显差异的情况。

7. volatile-random

  • 描述:在所有设置了过期时间的键中随机选择删除某个键。

  • 适用场景:适合缓存带有过期时间的数据,删除哪个数据不重要的场景。

8. volatile-ttl

  • 描述:在设置了过期时间的键中,优先删除剩余生存时间(TTL)较短的键。

  • 适用场景:适合希望优先清理即将过期的数据的场景。

三、内存淘汰策略的配置

Redis提供两种配置方式:

  • 配置文件修改:在redis.conf配置文件中修改

    # 最大内存配置(不设置maxmemory或者设置为0的时候对内存使用没有限制)
    maxmemory 100mb
    # 淘汰策略配置
    maxmemory-policy allkeys-lru
  • 命令设置

    设置最大内存(不设置maxmemory或者设置为0的时候对内存使用没有限制)

    config set maxmemory 1000 

    获取当前内存淘汰策略

    config get maxmemory-policy  

    修改淘汰策略

    config set maxmemory-policy allkeys-lru  

四、缓存淘汰工作原理

1、客户端执行新命令新增数据。

2、Redis 检查内存使用情况,如果超出限制根据策略驱逐 key。

3、完成新命令的执行,并重复上述过程。

因此,我们不断跨越内存限制的边界,通过超过内存限制,然后淘汰策略回到限制以下。

五、总结

根据不同的应用场景,开发者可以选择合适的策略来确保 Redis 在内存达到上限时,能够高效地管理数据并维持系统的稳定性。

 

官方文档:Key eviction | Docs (redis.io)

标签:场景,策略,过期,Redis,缓存,内存,淘汰
From: https://www.cnblogs.com/Oct16/p/18472630

相关文章

  • LeetCode LRU 缓存
    题目描述请你设计并实现一个满足LRU(最近最少使用)缓存约束的数据结构。实现LRUCache类:LRUCache(intcapacity)以正整数作为容量capacity初始化LRU缓存intget(intkey)如果关键字key存在于缓存中,则返回关键字的值,否则返回-1。voidput(intkey,intv......
  • redis 持久化策略
    一、redis持久化介绍Redis是个基于内存的数据库,服务一旦宕机,内存中的数据将全部丢失。通常的解决方案是从数据库来重新把这些数据写进redis,但后端数据库有性能瓶颈,如果是大数据量的恢复,会对数据库带来巨大的压力,导致程序响应慢。所以对Redis来说,实现数据的持久化,避免从后端数据......
  • Redis的内存管理体系
    Redis的内存管理体系Redis的内存管理体系由多种策略和机制组成,旨在有效利用内存资源、优化性能和确保数据的可靠性。以下是Redis内存管理体系的主要组成部分:1.内存分配Redis使用自定义的内存分配器,默认使用Jemalloc。这种分配器旨在减少内存碎片,提高内存分配和释放的......
  • 缓存穿透/击穿/雪崩(附生产BUG)
    优质博文:IT-BLOG-CN一、背景为什么要写这篇文章?生产缓存生成服务转java时,需要通过配置文件进行流量切换。开发人员同时打开了两个配置页面。原配置信息=ABCDEF。在第一个配置页面进行缓存切换,添加G业务缓存,配置信息=ABCDEFG。随后H业务也需要进行缓存切换,但开发人员在第......
  • Springboot缓存+定时提交优化频繁数据库表修改
    缘起最近在弄一个答题小程序,当用户选择的时候需要把用户选择的选项提交到服务器上,然后整个字段是个json格式的,更新的方法也就是解析json后添加选项进入json中。于是其中就涉及到频繁的数据库修改,因为用户答题速度根据题目不同嘛,所以我就寻思这样频繁的修改,数据量上来速度就会受......
  • 常见的缓存淘汰算法
    应用场景:缓存淘汰算法可以广泛应用于任何有缓存淘汰需求的场景,并不仅限于某个特定的插件或工具。许多软件和系统,如数据库(Redis、Memcached)、Web服务器(Nginx、Varnish)、内容分发网络(CDN)、浏览器缓存、甚至操作系统的内存管理,都会使用这些算法来决定在缓存空间满时该移除哪些数据......
  • 性能优化实战(三):缓存为王-面向缓存的设计
    如果你觉得这篇文章对你有帮助,请不要吝惜你的“关注”、“点赞”、“评价”、“收藏”,你的支持永远是我前进的动力~~~ 个人收藏的技术大会分享PDF文档,欢迎点击下载查看!!!本文是我在做网易考拉海购性能优化时的真实实践,希望对你也有帮助!!!一、流量走向示意图通常一个请求的......
  • golang redis拼团参团
    用Golang和Redis实现拼团参团功能拼团参团是电商平台上常见的一种促销方式,用户可以通过团购来获得价格折扣。在这篇文章中,我们将使用Go语言(Golang)和Redis来实现一个简易的拼团参团功能。下面让我们一起看一下具体的步骤。流程步骤首先,我们得了解实现拼团的基本流程。以......
  • Redis集群部署(redis主从+哨兵)
    根据项目需要,三台机器搭建一个为redis主从+哨兵的集群,10.10.10.1(举例用的虚拟IP,下同)为主节点,10.10.10.2和10.10.10.3为从节点。1、redis部署准备工作编辑/etc/hosts文件,添加要搭建的三台机器ip跟机器名称)使用hostname查出机器名称。)在三台机器中,加入Redis集群的机器IP及机器......
  • 一步步优化Redis实现分布式锁
    分布式锁概念在多线程的程序里,为了避免同时操作一个共享变量产生数据问题,会加一个互斥锁,以确保共享变量的正确性,使用范围是同一个进程。那如果是多个进程,需要同时操作一个共享资源,如何互斥呢?比如,现在的业务基本上都是微服务架构,一个应用会部署多个进程,这多个进程需要修改......