redis的过期淘汰策略

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Redis 版,经济版 1GB 1个月
简介: 只能存储 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命令,从节点删除从库中的键值

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1月前
|
存储 监控 NoSQL
Redis处理大量数据主要依赖于其内存存储结构、高效的数据结构和算法,以及一系列的优化策略
【5月更文挑战第15天】Redis处理大量数据依赖内存存储、高效数据结构和优化策略。选择合适的数据结构、利用批量操作减少网络开销、控制批量大小、使用Redis Cluster进行分布式存储、优化内存使用及监控调优是关键。通过这些方法,Redis能有效处理大量数据并保持高性能。
54 1
|
10天前
|
存储 缓存 NoSQL
Redis 缓存失效策略及其应用场景
Redis 缓存失效策略及其应用场景
18 1
|
19天前
|
存储 监控 NoSQL
Redis中的LRU淘汰策略深入解析
Redis的内存管理关键在于处理数据增长与有限内存的矛盾,LRU策略被广泛用于此。LRU基于“不常访问的数据未来访问可能性小”的假设,淘汰最近最少使用的数据。Redis通过双向链表实现,但并非严格LRU,而是采样算法以平衡性能和精度。用户可通过调整`maxmemory-samples`等参数优化。尽管LRU简单高效,但无法区分数据重要性和访问频率,可能误淘汰重要数据。合理设置参数、结合其他策略、监控调优是优化LRU使用的关键。
16 1
|
15小时前
|
NoSQL API Redis
使用Redis Lua脚本实现高级限流策略
使用Redis Lua脚本实现高级限流策略
15 0
|
2天前
|
存储 缓存 JSON
Redis-持久化-淘汰机制-IO策略
Redis-持久化-淘汰机制-IO策略
|
1月前
|
存储 NoSQL Java
熟悉Redis吗,那Redis的过期键删除策略是什么
对于Redis,我们业务开发一般都只关心Redis键值对的查询、修改操作,可能因为懒或者只想能用就行,呵呵。很少关心键值对存储在什么地方、键值对过期了会怎么样、Redis有没什么策略处理过期的键、Redis处理过期键又有什么作用?但这些问题却是Java程序员在Redis上进阶的必备知识,不要埋怨Java要学习的系统知识为什么这么多,因为这些确确实实是进阶的程序员所必须掌握的。我们往下看看~
58 2
熟悉Redis吗,那Redis的过期键删除策略是什么
|
7天前
|
NoSQL Java Redis
Redis中的键值过期操作
Redis中的键值过期操作
|
29天前
|
存储 缓存 NoSQL
Redis 缓存失效策略及其应用场景
Redis 缓存失效策略及其应用场景
49 1
|
14天前
|
存储 Prometheus 监控
Redis 调优指南:提高性能和稳定性的全面策略
Redis 调优指南:提高性能和稳定性的全面策略
12 0
|
1月前
|
缓存 监控 NoSQL
Redis的主要内存淘汰策略
【5月更文挑战第15天】Redis内存淘汰策略在内存满时删除旧数据以容纳新数据。策略包括:volatile-lru/LFU/random(针对有过期时间的键),volatile-ttl(淘汰TTL最短的键),allkeys-lru/LFU(淘汰所有键),和allkeys-random。还有noeviction策略,不淘汰任何键,新写入会报错。选择策略应基于应用访问模式、数据重要性和性能需求。可以通过info命令监控缓存命中率调整策略。
31 3