大数据-47 Redis 缓存过期 淘汰删除策略 LRU LFU 基础概念

简介: 大数据-47 Redis 缓存过期 淘汰删除策略 LRU LFU 基础概念

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

Hadoop(已更完)

HDFS(已更完)

MapReduce(已更完)

Hive(已更完)

Flume(已更完)

Sqoop(已更完)

Zookeeper(已更完)

HBase(已更完)

Redis (正在更新…)

章节内容

上一节我们完成了:


RDB的配置方式、触发方式

RDB的文件结构、优点、缺点

AOF的配置方式、触发方式

AOF的优点、缺点、瘦身方式

RDB + AOF 混合方式

Redis性能

官方数据是:

读 110000次/s

写 81000次/s

长期使用,Key会不断地增加,Redis作为缓存使用,物理内存也会满。

所以需要一个过期淘汰的策略。

MaxMemory

不设置的情况:

Redis 的 Key 是固定的,不会增加。

Redis 作为 DB 使用,保证数据的完整性,不允许淘汰,可以做集群进行扩展。

淘汰策略:禁止驱逐(默认设置)


设置的情况

Redis 作为缓存使用,不断地增加Key,MaxMemory默认是0不进行限制。

在服务器上,保留1G给操作系统,剩下的就可以用作Redis的缓存。

通过修改 redis.conf 可以配置这个值:

maxmemory 1024mb
# 获取值
CONFIG GET maxmemory

设置MaxMemory后,当趋近于设置的值时,通过缓存的淘汰策略,就会从内存中删除

Expire

最常用的方式)在 Redis 中可以使用 expire 设置一个键的存活时间,过了这段时间,键会自动被删除

可以进行如下的测试:

./redis-cli
# 2秒失效
expire name 2 
get name
# 这种是永久有效
set name 123
ttl name

# 设置过期时间
expire name 10
ttl name 

删除策略

Redis 数据的删除有定时删除、惰性删除、主动删除 三种方式。’

Redis 目前采用的是:


惰性删除

主动删除

定时删除

在设置键的过期时间时,创建一个定时器,让定时器在指定时间时删除键。


惰性删除

在 key 被访问的时候发现过期了,就删除这条数据。


主动删除

我们打开 redis.conf 可以配置主动删除的策略:

# 默认是 no-enviction 不删除
maxmemory-policy allkeys-lru

主动删除: LRU

LRU(Least Recently Used)最近最少使用,算法根据数据的历史访问记录来进行淘汰数据。

其核心思想是:如果数据最近被访问过,那么将来被访问的概率也会更高


最常见的实现是使用一个链表来保存数据:


新数据插入到链表头部

每当缓存命中的时候,则将数据移动到链表的头部

当链表满了的时候,将链表尾部的数据删除

在Java中可以使用LinkedHashMap来实现LRU

Redis-LRU

在服务器中保存了 LRU 计数器:server.lrulock,会定时更新,这个值是根据 server.unixtime 来计算的。

LRU的数据淘汰机制是:在数据集中随机挑选几个值,取出其中LRU最大的淘汰掉。


volatile-lru:从设置过期时间的数据集中挑选最少使用的淘汰

allkeys-lru:从数据集中挑选最近最少使用的数据淘汰

LFU

LFU(Least Frequency used)最不经常使用,如果一个数据在最近一段时间内使用次数很少,那么将来一段时间内被使用的可能性也很小。


volatile-lfu 同LRU

allkeys-lfu 同LRU

volatile-random 从设置过期时间的数据集中随机淘汰数据

allkeys-random 从数据集中任意选择进行淘汰

TTL

volatile-ttl 从设置过期时间的数据里,选择快要过期的数据淘汰

noenviction

禁止驱逐数据,不淘汰数据(默认的)


淘汰策略选择

allkeys-lru 在不确定时一般采用的策略 冷热数据交换等

volatile-lru 比 allkeys-lru性能要差,因为要查过期时间

allkeys-random 希望请求符合平均分布(每个值被访问的概率差不多)

自己控制 volatile-ttl


相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
11月前
|
存储 缓存 NoSQL
工作 10 年!Redis 内存淘汰策略 LRU 和传统 LRU 差异,还傻傻分不清
小富带你深入解析Redis内存淘汰机制:LRU与LFU算法原理、实现方式及核心区别。揭秘Redis为何采用“近似LRU”,LFU如何解决频率老化问题,并结合实际场景教你如何选择合适策略,提升缓存命中率。
1408 3
|
缓存 算法 数据挖掘
深入理解缓存更新策略:从LRU到LFU
【10月更文挑战第7天】 在本文中,我们将探讨计算机系统中缓存机制的核心——缓存更新策略。缓存是提高数据检索速度的关键技术之一,无论是在硬件还是软件层面都扮演着重要角色。我们会详细介绍最常用的两种缓存算法:最近最少使用(LRU)和最少使用频率(LFU),并讨论它们的优缺点及适用场景。通过对比分析,旨在帮助读者更好地理解如何选择和实现适合自己需求的缓存策略,从而优化系统性能。
788 3
|
存储 分布式计算 大数据
大数据-169 Elasticsearch 索引使用 与 架构概念 增删改查
大数据-169 Elasticsearch 索引使用 与 架构概念 增删改查
397 3
|
消息中间件 分布式计算 大数据
大数据-123 - Flink 并行度 相关概念 全局、作业、算子、Slot并行度 Flink并行度设置与测试
大数据-123 - Flink 并行度 相关概念 全局、作业、算子、Slot并行度 Flink并行度设置与测试
776 0
|
消息中间件 分布式计算 NoSQL
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
417 0
|
数据采集 数据可视化 大数据
大数据体系知识学习(三):数据清洗_箱线图的概念以及代码实现
这篇文章介绍了如何使用Python中的matplotlib和numpy库来创建箱线图,以检测和处理数据集中的异常值。
600 1
大数据体系知识学习(三):数据清洗_箱线图的概念以及代码实现
|
机器学习/深度学习 XML 分布式计算
大数据的概念
【10月更文挑战第16天】
934 4
|
存储 监控 NoSQL
Redis集群方案汇总:概念性介绍
本文介绍了Redis的三种高可用和分布式解决方案:**Redis Replication(主从复制)**、**Redis Sentinel(哨兵模式)** 和 **Redis Cluster(集群模式)**。Redis Replication实现数据备份和读写分离,适合数据安全和负载均衡场景;Redis Sentinel提供自动故障转移和监控功能,适用于读写分离架构;Redis Cluster通过分布式存储和自动故障转移,解决单点性能瓶颈,适合大规模数据和高并发场景。文中还详细描述了各方案的工作原理、优缺点及适用场景。
579 0
|
消息中间件 NoSQL Kafka
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
1384 0
|
存储 分布式计算 算法
大数据-105 Spark GraphX 基本概述 与 架构基础 概念详解 核心数据结构
大数据-105 Spark GraphX 基本概述 与 架构基础 概念详解 核心数据结构
571 0