服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Redis - Redis:内存回收的过期策略

Redis:内存回收的过期策略

2023-05-07 05:07未知服务器之家 Redis

​有一天,产品一哥“林哥”来找我,跟我说:“小李,咱们现在一个需求,商品定时下架的逻辑,这个咱们能做到吗?”,我一想,今年的绩效跟着产品大佬走,当即拍着胸脯说道:“林哥,你就放一百个心,包在我身上~”,然

​有一天,产品一哥“林哥”来找我,跟我说:“小李,咱们现在一个需求,商品定时下架的逻辑,这个咱们能做到吗?”,我一想,今年的绩效跟着产品大佬走,当即拍着胸脯说道:“林哥,你就放一百个心,包在我身上~”,然后开始头脑风暴,毕竟要向前(钱)看。

案例

商品定时下架

方案一:消息队列

Redis:内存回收的过期策略

首先我想到当运营童鞋创建(或修改下架时间)商品后,就把该商品放到消息队列中,这样利用 RabbitMQ 的消息 TTL 加死信队列的特性,这个需求搞定,安排上线~

方案二:定时任务+消息队列

过了一段时间,架构师发哥心急火燎的来找我,我一看这阵势这是有大事吧,发哥不等我开口,说:“小李,快看看系统,运营童鞋来找我说,商品到下架时间还能买到;而且运维童鞋反应过节那天咱们的 RabbitMQ 那台服务器内存和硬盘不够用了,尽快处理下”。

我把两件事串联在一起就想到了出问题的点就是“过期自动下架”功能的问题。

第一个问题:商品到下架时间还能买到,我跟运营童鞋确认问题商品,发现很多商品的过期时间是3个月甚至更久,大致猜测可能是延迟时间过长导致了消息延迟失败,查了查默认在使用RabbitMQ的延迟消息功能时候,它的延迟极限是4294967296毫秒,也就是49.7天,很显然现有的功能是无法满足的运营需求,扑街~。

Redis:内存回收的过期策略

第二个问题:过节前夕 RabbitMQ 那台服务器内存和硬盘不够用,我去看运营后台发现创建了大量的新商品,那应该是大量延时下架商品放到消息队列中,以至于产生堆积。

基于以上两点,我做出以下两点改造:

  • 创建(或修改下架时间)商品的时候,不会放到消息队列中,节约资源利用空间;
  • 定时任务每天从商品表中捞取第二天下架的商品放入到消息队列中,缩短延迟时间。

Redis:内存回收的过期策略

搞定~

从这个案例中我借鉴的是 Redis 的内存回收策略,因为 Redis 所有的数据都是存储到内存中的,所以在某些情况下需要对占用的内存进行回收。

Redis 中同时使用了惰性过期和定期过期两种过期策略。

策略一:惰性过期

只有当访问一个 key 时,才会判断该 key 是否已过期,过期则清除。该策略可以最大化地节省 CPU 资源,却对内存非常不友好。极端情况可能出现大量的过期 key 没有再次被访问,从而不会被清除,占用大量内存。

策略二:定期过期

每隔一定的时间,会扫描一定数量的数据库的 expires 字典中一定数量的 key,并清除其中已过期的 key。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得 CPU 和内存资源达到最优的平衡效果。

END

好兄弟可以点赞并关注我的公众号“javaAnswer”,全部都是干货。

Redis:内存回收的过期策略

延伸 · 阅读

精彩推荐
  • RedisRedis 6.X Cluster 集群搭建

    Redis 6.X Cluster 集群搭建

    码哥带大家完成在 CentOS 7 中安装 Redis 6.x 教程。在学习 Redis Cluster 集群之前,我们需要先搭建一套集群环境。机器有限,实现目标是一台机器上搭建 6 个节...

    码哥字节15752021-04-07
  • Redis关于Redis数据库入门详细介绍

    关于Redis数据库入门详细介绍

    大家好,本篇文章主要讲的是关于Redis数据库入门详细介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览...

    沃尔码6982022-01-24
  • Redis详解三分钟快速搭建分布式高可用的Redis集群

    详解三分钟快速搭建分布式高可用的Redis集群

    这篇文章主要介绍了详解三分钟快速搭建分布式高可用的Redis集群,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...

    万猫学社4502021-07-25
  • RedisRedis Template实现分布式锁的实例代码

    Redis Template实现分布式锁的实例代码

    这篇文章主要介绍了Redis Template实现分布式锁,需要的朋友可以参考下 ...

    晴天小哥哥2592019-11-18
  • Redisredis缓存存储Session原理机制

    redis缓存存储Session原理机制

    这篇文章主要为大家介绍了redis缓存存储Session原理机制详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    程序媛张小妍9252021-11-25
  • Redis《面试八股文》之 Redis十六卷

    《面试八股文》之 Redis十六卷

    redis 作为我们最常用的内存数据库,很多地方你都能够发现它的身影,比如说登录信息的存储,分布式锁的使用,其经常被我们当做缓存去使用。...

    moon聊技术8182021-07-26
  • RedisRedis集群的5种使用方式,各自优缺点分析

    Redis集群的5种使用方式,各自优缺点分析

    Redis 多副本,采用主从(replication)部署结构,相较于单副本而言最大的特点就是主从实例间数据实时同步,并且提供数据持久化和备份策略。...

    优知学院4082021-08-10
  • Redis如何使用Redis锁处理并发问题详解

    如何使用Redis锁处理并发问题详解

    这篇文章主要给大家介绍了关于如何使用Redis锁处理并发问题的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Redis具有一定的参考学习...

    haofly4522019-11-26