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内存淘汰策略时,需要结合多个方面来进行考虑,比如数据的重要性、数据的访问频率,数据的一致性等,并根据实际效果进行调整和优化。

目录
相关文章
|
运维 NoSQL 测试技术
Redis:内存陡增100%深度复盘
本文深度分析了Redis内存陡增100%的一些细节和解决方案。
281 1
Redis:内存陡增100%深度复盘
|
19天前
|
存储 缓存 NoSQL
工作 10 年!Redis 内存淘汰策略 LRU 和传统 LRU 差异,还傻傻分不清
小富带你深入解析Redis内存淘汰机制:LRU与LFU算法原理、实现方式及核心区别。揭秘Redis为何采用“近似LRU”,LFU如何解决频率老化问题,并结合实际场景教你如何选择合适策略,提升缓存命中率。
194 3
|
2月前
|
存储 缓存 人工智能
Redis六大常见命令详解:从set/get到过期策略的全方位解析
本文将通过结构化学习路径,帮助读者实现从命令语法掌握到工程化实践落地的能力跃迁,系统性提升 Redis 技术栈的应用水平。
|
2月前
|
存储 NoSQL 算法
应对Redis中的并发冲突:有效解决策略
以上策略各有优劣:乐观锁和悲观锁控制得当时可以很好地解决并发问题;发布/订阅模式提高了实时响应能力;Lua脚本和Redis事务保证了命令序列的原子性;分布式锁适合跨节点的并发控制;限流措施和持久化配置从系统设计层面减少并发风险;数据分片通过架构上的优化减轻单个Redis节点的负担。正确选择适合自己应用场景的策略,是解决Redis并发冲突的关键。
218 0
|
4月前
|
存储 监控 NoSQL
流量洪峰应对术:Redis持久化策略与内存压测避坑指南
本文深入解析Redis持久化策略与内存优化技巧,涵盖RDB快照机制、AOF重写原理及混合持久化实践。通过实测数据揭示bgsave内存翻倍风险、Hash结构内存节省方案,并提供高并发场景下的主从复制冲突解决策略。结合压测工具链构建与故障恢复演练,总结出生产环境最佳实践清单。
137 9
|
3月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
906 0
|
3月前
|
存储 缓存 NoSQL
内存管理基础:数据结构的存储方式
数据结构在内存中的存储方式主要包括连续存储、链式存储、索引存储和散列存储。连续存储如数组,数据元素按顺序连续存放,访问速度快但扩展性差;链式存储如链表,通过指针连接分散的节点,便于插入删除但访问效率低;索引存储通过索引表提高查找效率,常用于数据库系统;散列存储如哈希表,通过哈希函数实现快速存取,但需处理冲突。不同场景下应根据访问模式、数据规模和操作频率选择合适的存储结构,甚至结合多种方式以达到最优性能。掌握这些存储机制是构建高效程序和理解高级数据结构的基础。
256 0
|
3月前
|
存储 弹性计算 固态存储
阿里云服务器配置费用整理,支持一万人CPU内存、公网带宽和存储IO性能全解析
要支撑1万人在线流量,需选择阿里云企业级ECS服务器,如通用型g系列、高主频型hf系列或通用算力型u1实例,配置如16核64G及以上,搭配高带宽与SSD/ESSD云盘,费用约数千元每月。
251 0
|
存储 编译器 C语言
【C语言篇】数据在内存中的存储(超详细)
浮点数就采⽤下⾯的规则表⽰,即指数E的真实值加上127(或1023),再将有效数字M去掉整数部分的1。
844 0