大佬们,那种 XX 天后过期改状态的需求,精确到秒,你们是咋设计的?

2018-04-28 11:45:49 +08:00
 monsterj

想到几种, 1:定时器,一秒扫一次,感觉太频繁了吧; 2:mysql 定时任务+存储过程; 3:消息队列;

3615 次点击
所在节点    问与答
26 条回复
watzds
2018-04-28 14:32:08 +08:00
如果 Java,有定时任务 jar quartz,这点性能肯定不用担心
msg7086
2018-04-28 14:35:37 +08:00
从面相对象的角度考虑,这个状态是由对象表达出来的,对象本身既可以从数据库中查询,也可以通过比较过期时间和当前时间得出。
比如函数 obj.expired?,可以这样写
def expired?
self.expired or (self.expired = expire_date < now) and self.save
end

我会选择避免用面向过程的方法去思考这个问题(用第三方的线程去扫描修改状态什么的)。
wplct
2018-04-28 15:36:58 +08:00
参考 redis 过期,取值时确认该值是否过期,配合定时任务(人家 redis 的定时任务执行多久是算 cpu 时间的,学不来学不来)
onedayonecode
2018-04-28 16:43:54 +08:00
数据库存储过期时间,用到的时候读出来和当前时间对比
projectzoo
2018-04-28 18:41:15 +08:00
我也是建议读取的时候再处理,不读取就不处理。
liuzhaowei55
2018-04-29 11:59:04 +08:00
存过期时间,读取的时候判断。和 Redis 的过期判定差不多,但是没 Redis 的那么复杂。
消息队列也有做。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/450629

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX