用户充值会员 充值成功了就记录用户的会员结束日期。任务每天轮训是否到期了,但是我希望是比如2024-4-12月到期的 我提前一天扣就是2024-4-11 扣钱 现在的问题是我设计数据表查询的时候如何比较快,后面用户量太多了
CREATE TABLE `u` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`expire_time` timestamp NULL DEFAULT NULL COMMENT '有效期 有效期',
`status` int(11) NOT NULL DEFAULT '0' COMMENT '是否订阅 0否 1是',
PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8mb4;
我查询是status=1并且expire_time<当天时间-1
时间加索引
增加12张检查表,分别记录1~12月到期会员信息,每天检查时进需要遍历筛选总量为当月的数据,续费就剔除这个数据并挪到下一个月表,如果自动续费是一年,就单纯更新时间为一年。
当然,以上方案你可以根据实际的业务情况缩容,比如以季度、半年或者奇偶月份来划分也可以,这么做可以使得你每次检查筛选的数据量相比于全量用户要少