问题描述
项目今天增加了一个置顶收费功能,设计思路是这样的
- 发布文章时,添加一个置顶按钮,如果用户选择 然后发布成功会跳转到支付页让用户选择置顶时间和支付金额
- 在文章表中添加了两个字段 一个置顶位置(目前只有首页,后期扩展性才多加了这个字段) 一个是置顶结束时间
- 置顶订单表
文章排序是按 是否置顶 置顶结束时间 文章发布时间 排序
现在遇到一个置顶到期如何处理?
我想到的是做定时任务,读取所有置顶文章检查是否有到期的 如果有 就清空文章的置顶位置和置顶结束时间的这两个字段? 如果数据量大了 怎么处理?
不知道各位大神们有什么好的方案? 像58同城类的信息置顶是如何实现的?
不用跑定时任务,只需要每次页面加载时,才判断置顶任务列表中,有哪些是正在进行的(当前时间大于等于任务开始时间,且小于结束时间),把这些置顶任务展示出来就行了。如果需要的话,同时也把置顶已结束的任务从表中提取出来放到已结束的列表中。
用户每次刷新页面,你这里都会拿当前时间重新判断,无需定时任务
谢邀。
大致是这样:
select id, if(置顶时间 > 当前时间, 1, 0) as 置顶状态 from 文章表 order by 置顶状态 desc;
通过sql来判断是否过期就可以。如果非要有点技术性,可以将每个付费放到redis内,设置过期时间,每次查询redis key是否存在,其实与sql直接查询没有区别,具体sql参考 上官大佬的回复即可