redis的过期淘汰策略

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 只能存储 20w 条数据,那肯定要保证redis存储的都是热点数据,即:被频繁访问到的数据;并且要保证Redis的内存能够存放20w数据,要计算出Redis内存的大小。

redis的过期淘汰策略


redis对于过期键有三种清除策略:

被动删除: 当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key (垃圾key如果没访问,则不会删除)

主动删除: 由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期主动淘汰一批已过期的key


当前已用没存超过maxmemory限定时,触发主动删除策略


主动删除策略在Redis 4.0 之前一共实现了6种内存淘汰策略,在 4.0 之后,又增加了2种策略,总共8种


a) 针对设置了过期时间的key做处理


volatile-ttl: 在筛选时,会针对已设置了过期时间的键值对,根据过期时间的先后进行删除,越早过期的越先被删除。

volatile-random: 在设置了过期时间的键值对中,进行随机删除。

volatile-lru: 会使用LRU算法筛选设置了过期时间的键值对删除

volatile-lfu: 会使用LFU算法筛选设置了过期时间的键值对删除。


b) 针对所有的key做处理


allkeys-random: 所有键值对随机删除

allkeys-lru: 使用lRU算法在所有数据中筛选删除

allkeys-lfu: 使用LFU算法在所有数据中筛选删除


c) 不处理


noeviction: 不会剔除任何数据,拒绝所有写入操作并返回客户端信息(error)OOM command not allowed when used memory,此时redis只响应读操作。


LRU(least recently used)算法


最近最少使用,淘汰很久没有被访问过的数据,以最近一次访问时间做参考


LFU(least frequently used) 算法


最不经常使用,淘汰最近一段时间被访问最少的数据,以次数做参考


如何配置


#配置maxmemory
maxmemory 100mb
#配置淘汰策略
maxmemory-policy allkeys-lru

具体应用案例


大多数情况推荐使用volatile-lru


如果Mysql里有 2000W 数据,而Redis中只能存 20W 数据,如何保证redis中的数据都是热点数据?


方案:


只能存储 20w 条数据,那肯定要保证redis存储的都是热点数据,即:被频繁访问到的数据;并且要保证Redis的内存能够存放20w数据,要计算出Redis内存的大小。


(1) 保留热点数据:对于保留 Redis 热点数据来说,我们可以设定 Redis 的key过期时间结合内存淘汰策略来实现,比如,使用allkeys-lfu(以次数为准,越高越热)淘汰策略,该淘汰策略是从 Redis 的数据中挑选最近最少使用的数据删除,这样频繁被访问的数据就可以保留下来了


(2)保证 Redis 只存20w的数据:1个中文占2个字节,假如1条数据有100个中文,则1条数据占200字节,20w数据乘以200个字节 (200000 * 200 = 40000000),约等于4000万个字节,大于等于38M,所以要保证能存20w数据,Redis 需要38M的内存,对应的内存设定之后,一旦数据满了就可以触发我们的数据淘汰策略,保证数据存储满足20w且为热点数据。


对于主从缓存过期


从节点接收到主节点的del命令,从节点删除从库中的键值

目录
相关文章
|
14天前
|
存储 缓存 NoSQL
工作 10 年!Redis 内存淘汰策略 LRU 和传统 LRU 差异,还傻傻分不清
小富带你深入解析Redis内存淘汰机制:LRU与LFU算法原理、实现方式及核心区别。揭秘Redis为何采用“近似LRU”,LFU如何解决频率老化问题,并结合实际场景教你如何选择合适策略,提升缓存命中率。
166 3
|
2月前
|
存储 缓存 人工智能
Redis六大常见命令详解:从set/get到过期策略的全方位解析
本文将通过结构化学习路径,帮助读者实现从命令语法掌握到工程化实践落地的能力跃迁,系统性提升 Redis 技术栈的应用水平。
|
2月前
|
存储 NoSQL 算法
应对Redis中的并发冲突:有效解决策略
以上策略各有优劣:乐观锁和悲观锁控制得当时可以很好地解决并发问题;发布/订阅模式提高了实时响应能力;Lua脚本和Redis事务保证了命令序列的原子性;分布式锁适合跨节点的并发控制;限流措施和持久化配置从系统设计层面减少并发风险;数据分片通过架构上的优化减轻单个Redis节点的负担。正确选择适合自己应用场景的策略,是解决Redis并发冲突的关键。
216 0
|
4月前
|
存储 监控 NoSQL
流量洪峰应对术:Redis持久化策略与内存压测避坑指南
本文深入解析Redis持久化策略与内存优化技巧,涵盖RDB快照机制、AOF重写原理及混合持久化实践。通过实测数据揭示bgsave内存翻倍风险、Hash结构内存节省方案,并提供高并发场景下的主从复制冲突解决策略。结合压测工具链构建与故障恢复演练,总结出生产环境最佳实践清单。
121 9
|
4月前
|
消息中间件 监控 NoSQL
利用RabbitMQ与Redis实现消息的延迟传递的策略
这个系统就如同一个无懈可击的邮局,无论天气如何变换,它都能确保每一封信准时送达。通过巧妙地运用RabbitMQ的DLX和Redis的Sorted Sets,我们搭建了一座桥梁,让即时和延迟消息的传递高效且无缝对接。
60 3
|
11月前
|
NoSQL Redis
Redis的数据淘汰策略有哪些 ?
Redis 提供了 8 种数据淘汰策略,分为淘汰易失数据和淘汰全库数据两大类。易失数据淘汰策略包括:volatile-lru、volatile-lfu、volatile-ttl 和 volatile-random;全库数据淘汰策略包括:allkeys-lru、allkeys-lfu 和 allkeys-random。此外,还有 no-eviction 策略,禁止驱逐数据,当内存不足时新写入操作会报错。
1019 16
|
7月前
|
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:从已设置过期
|
7月前
|
NoSQL Redis
Redis的数据持久化策略有哪些 ?
Redis 提供了两种方式,实现数据的持久化到硬盘。 1. RDB 持久化(全量),是指在指定的时间间隔内将内存中的数据集快照写入磁盘。 2. AOF持久化(增量),以日志的形式记录服务器所处理的每一个写、删除操作 RDB和AOF一起使用, 在Redis4.0版本支持混合持久化方式 ( 设置 aof-use-rdb-preamble yes )
|
7月前
|
存储 NoSQL Redis
Redis的数据过期策略有哪些 ?
1. 惰性删除 :只会在取出 key 的时候才对数据进行过期检查。这样对 CPU 最友好,但是可能会造成太多过期 key 没有被删除。数据到达过期时间,不做处理。等下次访问该数据时,我们需要判断 a. 如果未过期,返回数据 b. 发现已过期,删除,返回nil 2. 定期删除 : 每隔一段时间抽取一批 key 执行删除过期 key 操作。并且,Redis 底层会通过限制删除操作执行的时长和频率来减少删除操作对 CPU 时间的影响。默认情况下 Redis 定期检查的频率是每秒扫描 10 次,用于定期清除过期键。当然此值还可以通过配置文件进行设置,在 redis.conf 中修改配置“hz”
|
10月前
|
NoSQL 算法 Redis
redis内存淘汰策略
Redis支持8种内存淘汰策略,包括noeviction、volatile-ttl、allkeys-random、volatile-random、allkeys-lru、volatile-lru、allkeys-lfu和volatile-lfu。这些策略分别针对所有键或仅设置TTL的键,采用随机、LRU(最近最久未使用)或LFU(最少频率使用)等算法进行淘汰。
269 5

热门文章

最新文章