不借助中间件的话。参考Redis中Key过期策略,定期删除+惰性删除。当然这是面对数据量可能比较大时,采用的策略。 单纯订阅逻辑,也可以采用不记录状态,改成状态动态计算方式。即 数据库记录一个订阅结束时间,每次查询时跟当前时间做下比较。 另外,还可以借助第三方中间件来实现。如RabbitMQ,使用其死信队列方式,来完成该功能。大概思路就是,有新订阅时,发送一个带过期时间的消息,当消息到期后会转发至配置的交换机然后再进入指定队列,消费消息再去库中查询并做相应操作。 * * * 不过技术实现要综合考虑,假设数据量不太多,单纯的采用数据库扫表,每隔5秒扫描一次也可。再假设业务层次对时间没那么敏感,每天凌晨统一扫表处理也没啥问题。再或者说,假如后端就你一人,能实现功能就不错了,还要啥自行车。