【Java面试】会员批量过期的方案怎么实现?

36 篇文章 1 订阅
20 篇文章 3 订阅

一个工作6年的同学去某互联网大厂面试,遇到这样一个场景问题。

“有一张200W数据量的会员表,每个会员会有长短不一的到期时间,现在想在快到期之前发送邮件通知提醒续费”该怎么实现。

问题解析

对于这类的场景问题,我建议大家不要急着去回答,而是先冷静下来,想清楚面试官希望通过这个问题去了解哪方面的能力,以及这个问题里面有哪些陷阱。

特别注意一个点,一定要理解清楚面试官的问题,如果没听懂,可以确认一遍。

很显然,这个问题里面有几个关键词:

  • 200W数据意味着数据量比较大
  • 每个会员都有过期时间,需要能够筛选出快过期的会员

很显然,如果直接去通过select语句做筛选,就掉入坑里了,因为这里会存在性能问题,那接下来看一下一些相对比较合理的回答。

问题答案

关于这个问题,可以有三种解决方案:

第一种,系统不主动轮询,而是等用户登录到系统以后,触发一次检查。

如果发现会员的过期时间小于设定的阈值,就触发一次弹窗和邮件提醒。

这种方式规避了轮询问题,不会对数据库和后端应用程序造成任何压力。

缺点是,如果用户一直不登陆,就一直无法实现会员过期,并且也无法提前去根据运营策略发送续期的提醒消息。

第二种,我们可以使用搜索引擎,比如Solr、或者Elasticsearch。

把会员表里面的会员id和会员到期时间存储一份到搜索引擎中。

搜索引擎的优势在于大数据量的快速检索,并且具有高可扩展性和高可靠性,非常适合大规模数据的处理。

第三种,可以使用Redis来实现。

用户开通会员以后,在Redis里面存储这个会员id,以及设置这个id的过期时间。

然后可以使用redis的过期提醒功能,把配置项 notify-keyspace-events改为notify-keyspace-events "Ex"当Redis里面的key过期以后,会触发一个key过期事件,我们可以在应用程序中监听这个事件来处理。

第四种,可以直接使用MQ提供的延迟队列,当用户开通会员以后,直接计算这个会员的过期时间,然后发送一个延迟消息到MQ上,一旦消息达到过期时间,消费者就可以消费这个消息来触发会员过期的提醒。

总结

好了,今天的分享就到这里结束了

如果喜欢我的作品,记得点赞、收藏、关注

另外,我将所有Java面试系列制作成了完整的面试文档。它的便捷之处在于,可以通过检索的方式,找到你想要的面试题,目前已经更新200期,总计超过20W字!

【想领取面试文档的小伙伴可以点击文章底部名片无套路免费赠送给大家!】

 需要高手面试文档面试文档的小伙伴可以扫描下方二维码
↓↓↓↓↓↓↓↓↓↓↓↓↓

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

跟着Mic学架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值