Redis内存管理揭秘:掌握淘汰策略,让你的数据库在高并发下也能游刃有余,守护业务稳定运行!

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 【8月更文挑战第22天】Redis的内存淘汰策略管理内存使用,防止溢出。主要包括:noeviction(拒绝新写入)、LRU/LFU(淘汰最少使用/最不常用数据)、RANDOM(随机淘汰)及TTL(淘汰接近过期数据)。策略选择需依据应用场景、数据特性和性能需求。可通过Redis命令行工具或配置文件进行设置。

Redis的内存淘汰策略是什么?
Redis作为一款高性能的键值对数据库,因其快速的响应速度和丰富的数据结构支持,被广泛应用于各种需要高速缓存和持久存储的场景中。然而,由于Redis将数据存储在内存中,当内存使用达到其配置的最大限制时,就需要一种策略来管理内存的使用,以避免内存溢出,这就是Redis的内存淘汰策略。

Redis提供了多种内存淘汰策略,每种策略都有其特定的应用场景和优缺点。接下来,我们将通过比较和对比的形式,详细介绍这些策略。

noeviction策略
这是Redis的默认淘汰策略。当内存使用达到最大限制时,任何新的写入操作都会报错,但删除操作和部分特殊操作(如DEL)仍然可以执行。这种策略适用于那些写操作较少,且希望尽可能保留现有数据的场景。例如,如果一个Redis实例主要用于存储关键业务数据,且这些数据的完整性至关重要,那么使用noeviction策略将是一个安全的选择。

LRU与LFU策略
allkeys-lru与allkeys-lfu
allkeys-lru:此策略会从所有键中,根据最近最少使用(Least Recently Used, LRU)算法来淘汰数据。它适用于读操作频繁,且希望保留最近被频繁访问的数据的场景。
allkeys-lfu:与allkeys-lru类似,但此策略基于最不经常使用(Least Frequently Used, LFU)算法来淘汰数据。它根据数据被访问的频率来决定哪些数据应该被移除,适用于读操作频繁,且希望保留被频繁访问的数据的场景。
volatile-lru与volatile-lfu
volatile-lru:与allkeys-lru类似,但此策略仅作用于设置了过期时间的键。这意味着当内存不足时,它会从这部分键中移除最近最少使用的数据。适用于缓存等场景,其中数据的过期时间较为明确。
volatile-lfu:与volatile-lru类似,但基于LFU算法来淘汰数据。它同样只针对设置了过期时间的键,根据数据的访问频率来淘汰。
Random与TTL策略
volatile-random与allkeys-random
volatile-random:此策略会从设置了过期时间的键中随机选择数据来淘汰,适用于对淘汰策略无特殊要求的场景,提供了一种简单而公平的淘汰方式。
allkeys-random:与volatile-random类似,但它会从所有键中随机选择数据来淘汰,不考虑数据的过期时间。
volatile-ttl
volatile-ttl策略会从设置了过期时间的键中,优先淘汰剩余生存时间(TTL)较短的键。这种策略适用于希望优先淘汰即将过期的数据的场景,如缓存即将到期的数据,以释放内存给新的缓存数据。

示例代码
查看和设置Redis的内存淘汰策略,可以通过Redis的命令行工具或配置文件来完成。以下是通过命令行设置淘汰策略的示例:

bash

查看当前内存淘汰策略

redis-cli config get maxmemory-policy

设置内存淘汰策略为allkeys-lru

redis-cli config set maxmemory-policy allkeys-lru
结论
Redis的内存淘汰策略是保障其稳定运行的关键机制之一。选择合适的淘汰策略,需要根据应用的工作负载特性、数据访问模式、内存限制以及性能要求等因素综合考虑。通过比较和对比不同的淘汰策略,可以帮助我们找到最适合自己应用的策略,从而优化Redis的性能和稳定性。

相关文章
|
3月前
|
缓存 NoSQL 算法
高并发秒杀系统实战(Redis+Lua分布式锁防超卖与库存扣减优化)
秒杀系统面临瞬时高并发、资源竞争和数据一致性挑战。传统方案如数据库锁或应用层锁存在性能瓶颈或分布式问题,而基于Redis的分布式锁与Lua脚本原子操作成为高效解决方案。通过Redis的`SETNX`实现分布式锁,结合Lua脚本完成库存扣减,确保操作原子性并大幅提升性能(QPS从120提升至8,200)。此外,分段库存策略、多级限流及服务降级机制进一步优化系统稳定性。最佳实践包括分层防控、黄金扣减法则与容灾设计,强调根据业务特性灵活组合技术手段以应对高并发场景。
1025 7
|
4月前
|
NoSQL 算法 安全
redis分布式锁在高并发场景下的方案设计与性能提升
本文探讨了Redis分布式锁在主从架构下失效的问题及其解决方案。首先通过CAP理论分析,Redis遵循AP原则,导致锁可能失效。针对此问题,提出两种解决方案:Zookeeper分布式锁(追求CP一致性)和Redlock算法(基于多个Redis实例提升可靠性)。文章还讨论了可能遇到的“坑”,如加从节点引发超卖问题、建议Redis节点数为奇数以及持久化策略对锁的影响。最后,从性能优化角度出发,介绍了减少锁粒度和分段锁的策略,并结合实际场景(如下单重复提交、支付与取消订单冲突)展示了分布式锁的应用方法。
351 3
|
5月前
|
NoSQL Redis 数据库
Docker平台上的Redis镜像运行
这就是如何在Docker平台上运行Redis镜像的全部过程。走进Docker和Redis的世界,探索更多可能!
378 10
|
6月前
|
NoSQL Redis
Redis的数据淘汰策略有哪些 ?
Redis 提供 8 种数据淘汰策略: 淘汰易失数据(具有过期时间的数据) 1. volatile-lru(least recently used):从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰 2. volatile-lfu(least frequently used):从已设置过期时间的数据集(server.db[i].expires)中挑选最不经常使用的数据淘汰 3. volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰 4. volatile-random:从已设置过期
|
6月前
|
NoSQL Redis
Redis的数据持久化策略有哪些 ?
Redis 提供了两种方式,实现数据的持久化到硬盘。 1. RDB 持久化(全量),是指在指定的时间间隔内将内存中的数据集快照写入磁盘。 2. AOF持久化(增量),以日志的形式记录服务器所处理的每一个写、删除操作 RDB和AOF一起使用, 在Redis4.0版本支持混合持久化方式 ( 设置 aof-use-rdb-preamble yes )
|
8月前
|
缓存 NoSQL 架构师
Redis批量查询的四种技巧,应对高并发场景的利器!
在高并发场景下,巧妙地利用缓存批量查询技巧能够显著提高系统性能。 在笔者看来,熟练掌握细粒度的缓存使用是每位架构师必备的技能。因此,在本文中,我们将深入探讨 Redis 中批量查询的一些技巧,希望能够给你带来一些启发。
Redis批量查询的四种技巧,应对高并发场景的利器!
|
6月前
|
存储 NoSQL Redis
Redis的数据过期策略有哪些 ?
1. 惰性删除 :只会在取出 key 的时候才对数据进行过期检查。这样对 CPU 最友好,但是可能会造成太多过期 key 没有被删除。数据到达过期时间,不做处理。等下次访问该数据时,我们需要判断 a. 如果未过期,返回数据 b. 发现已过期,删除,返回nil 2. 定期删除 : 每隔一段时间抽取一批 key 执行删除过期 key 操作。并且,Redis 底层会通过限制删除操作执行的时长和频率来减少删除操作对 CPU 时间的影响。默认情况下 Redis 定期检查的频率是每秒扫描 10 次,用于定期清除过期键。当然此值还可以通过配置文件进行设置,在 redis.conf 中修改配置“hz”
|
8月前
|
存储 缓存 NoSQL
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
232 1
|
8月前
|
缓存 NoSQL 关系型数据库
云端问道21期实操教学-应对高并发,利用云数据库 Tair(兼容 Redis®)缓存实现极速响应
本文介绍了如何通过云端问道21期实操教学,利用云数据库 Tair(兼容 Redis®)缓存实现高并发场景下的极速响应。主要内容分为四部分:方案概览、部署准备、一键部署和完成及清理。方案概览中,展示了如何使用 Redis 提升业务性能,降低响应时间;部署准备介绍了账号注册与充值步骤;一键部署详细讲解了创建 ECS、RDS 和 Redis 实例的过程;最后,通过对比测试验证了 Redis 缓存的有效性,并指导用户清理资源以避免额外费用。
156 1
|
9月前
|
NoSQL 算法 Redis
redis内存淘汰策略
Redis支持8种内存淘汰策略,包括noeviction、volatile-ttl、allkeys-random、volatile-random、allkeys-lru、volatile-lru、allkeys-lfu和volatile-lfu。这些策略分别针对所有键或仅设置TTL的键,采用随机、LRU(最近最久未使用)或LFU(最少频率使用)等算法进行淘汰。
256 5