redis内存限制与淘汰策略

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis内存管理包括限制和淘汰策略。`maxmemory`配置参数决定内存上限,无设置时64位系统默认不限制,可能导致系统资源耗尽,生产环境建议设定合理值。当内存满时,未设置淘汰策略会导致写入错误。Redis提供8种淘汰策略,如LRU(最近最少使用)和LFU(最不经常使用),以及随机或基于过期时间的删除。需根据数据重要性、访问频率和一致性选择合适策略。

在使用redis过程中,往往我们会忽视一些重要的因素,例如redis内存的限制与内存淘汰策略。

首先我们来说下redis内存限制

在redis配置文件中,影响redis使用系统内存的参数是maxmemory。查看当前maxmemory值可以通过redis-cli命令执行config get maxmemory查看。

例如,要配置1gb的最大内存使用值,可以在redis配置文件中修改# maxmemory <bytes>参数

1

maxmemory 1gb

这样redis的内存使用限制最大值就为1gb,在64位系统环境下默认maxmemory为0,即没有内存限制(32位系统隐式内存限制3gb),也就是说redis将尝试使用系统中的所有可用内存,这会导致在某些场景下可能会导致系统资源被耗尽,因此在生产环境中,通常建议设置一个合理的maxmemory值来限制redis的内存使用。

接下来吴昊博客再说下redis的内存淘汰策略

如果内存达到了maxmemory最大值,并且没有配置淘汰的策略,那么在写入新的数据时,redis会返回错误,拒绝写入新的数据,可能会产生如下错误。

OOM command not allowed when used memory > 'maxmemory'.

内存淘汰策略可选的值有以下8种:

noeviction(默认策略):当内存不足时,redis会返回一个写入错误,这是最保守的策略,但也是最安全的,因为它不会删除任何数据。推荐用于那些不允许数据丢失的场景,但需要注意的是,这可能会影响业务正常运行。

allkeys-lru(最近最少使用):删除最近使用最少的keys,从而保留最近常用的keys。该策略不考虑keys的访问频率,而是更注重最近被访问的keys,认为这些keys可能是最有用的。

allkeys-lfu(最不经常用):删除最不常用的keys,从而保留常用的keys。该策略根据keys的访问频率来做出淘汰决策,即使某些keys最近没有被访问,但是他们的总访问频率很高,也会保留这些keys,通过计数统计来跟踪每个keys的访问次数,并根据这些统计结果来做出淘汰决策。

volatile-lru(有过期时间最近最少使用):内存淘汰的优先级是基于过期时间,然后在这些即将过期的keys种选择最近最少使用的keys进行删除。

volatile-lfu(有过期时间最近最不经常用):内存淘汰的优先级是基于过期时间,然后在这些即将过期的keys中选择最不常用的keys进行删除。

allkeys-random(随机删除):这种策略比较简单直接,不需要额外的计算判断,只需要随机选择一个keys进行删除即可。

volatile-random(有过期时间的随机删除):内存淘汰的优先级是基于过期时间,然后在这些即将过期的keys中,随机选择一个keys进行删除即可。

volatile-ttl(基于过期时间的删除):该策略会优先删除那些即将过期的keys,只考虑到期的时间,不考虑访问情况。

例如,whsir要配置allkeys-lru,可以在redis配置文件中修改# maxmemory-policy noeviction参数


maxmemory-policy allkeys-lru

修改完成后,在redis-cli中可通过config get maxmemory-policy查看当前的淘汰策略。

最后,在选择redis内存淘汰策略时,需要结合多个方面来进行考虑,比如数据的重要性、数据的访问频率,数据的一致性等,并根据实际效果进行调整和优化。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1月前
|
NoSQL Redis
Redis的数据淘汰策略有哪些 ?
Redis 提供了 8 种数据淘汰策略,分为淘汰易失数据和淘汰全库数据两大类。易失数据淘汰策略包括:volatile-lru、volatile-lfu、volatile-ttl 和 volatile-random;全库数据淘汰策略包括:allkeys-lru、allkeys-lfu 和 allkeys-random。此外,还有 no-eviction 策略,禁止驱逐数据,当内存不足时新写入操作会报错。
67 16
|
23天前
|
存储 算法 Java
Java内存管理深度剖析与优化策略####
本文深入探讨了Java虚拟机(JVM)的内存管理机制,重点分析了堆内存的分配策略、垃圾回收算法以及如何通过调优提升应用性能。通过案例驱动的方式,揭示了常见内存泄漏的根源与解决策略,旨在为开发者提供实用的内存管理技巧,确保应用程序既高效又稳定地运行。 ####
|
14天前
|
NoSQL 算法 Redis
redis内存淘汰策略
Redis支持8种内存淘汰策略,包括noeviction、volatile-ttl、allkeys-random、volatile-random、allkeys-lru、volatile-lru、allkeys-lfu和volatile-lfu。这些策略分别针对所有键或仅设置TTL的键,采用随机、LRU(最近最久未使用)或LFU(最少频率使用)等算法进行淘汰。
32 5
|
14天前
|
NoSQL 安全 Redis
redis持久化策略
Redis 提供了两种主要的持久化策略:RDB(Redis DataBase)和AOF(Append Only File)。RDB通过定期快照将内存数据保存为二进制文件,适用于快速备份与恢复,但可能因定期保存导致数据丢失。AOF则通过记录所有写操作来确保数据安全性,适合频繁写入场景,但文件较大且恢复速度较慢。两者结合使用可增强数据持久性和恢复能力,同时Redis还支持复制功能提升数据可用性和容错性。
37 5
|
17天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
51 7
|
18天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
48 1
|
1月前
|
存储 NoSQL Redis
Redis的数据过期策略有哪些 ?
Redis 采用两种过期键删除策略:惰性删除和定期删除。惰性删除在读取键时检查是否过期并删除,对 CPU 友好但可能积压大量过期键。定期删除则定时抽样检查并删除过期键,对内存更友好。默认每秒扫描 10 次,每次检查 20 个键,若超过 25% 过期则继续检查,单次最大执行时间 25ms。两者结合使用以平衡性能和资源占用。
45 11
|
1月前
|
存储 分布式计算 算法
1GB内存挑战:高效处理40亿QQ号的策略
在面对如何处理40亿个QQ号仅用1GB内存的难题时,我们需要采用一些高效的数据结构和算法来优化内存使用。这个问题涉及到数据存储、查询和处理等多个方面,本文将分享一些实用的技术策略,帮助你在有限的内存资源下处理大规模数据集。
31 1
|
1月前
|
存储 监控 Java
深入理解计算机内存管理:优化策略与实践
深入理解计算机内存管理:优化策略与实践
|
1月前
|
存储 缓存 监控
利用 Redis 缓存特性避免缓存穿透的策略与方法
【10月更文挑战第23天】通过以上对利用 Redis 缓存特性避免缓存穿透的详细阐述,我们对这一策略有了更深入的理解。在实际应用中,我们需要根据具体情况灵活运用这些方法,并结合其他技术手段,共同保障系统的稳定和高效运行。同时,要不断关注 Redis 缓存特性的发展和变化,及时调整策略,以应对不断出现的新挑战。
69 10