请问各位大佬 如何实现一个功能 用户主动添加提醒事件分钟级别 举例一个场景 学生添加课程每周一都有这节课 课前 5 分钟进行提醒。当学生量大的时候 基本等于每分钟都可能存在提醒 请说下实现思路。 我的思路是保存学生录入的提醒频率 每周每天等 然后根据课程开始时间和提醒提前时间(提前 5 分钟 半小时或一小时)进行提醒 但这样感觉很印象效率 每分钟都得去判断是否需要提醒 还有个思路为 添加提醒后 就根据频率定制计时器 但这样一个提醒创建之后 就永久存在一个计时器任务且项目不停止计时器也不会从内存中移出也不会被 gc 回收 一直执行着 两个思路感觉都不是很友好 有大佬能提点一下吗 如何实现
1
zhady009 2019-06-24 17:19:47 +08:00
不知道你的课有没有是表示一天中是第几节课的字段
要一个课程通知表 记录基本的信息 还有一个字段是表示第几节课的. 然后定时任务 获取当前时间 根据时间来判断是第几节课 或者你自己映射一下都可以 定时 sql 就带上星期几第几课的条件 获得 list 然后获取 uid 给他们推 脑测 |
2
wolfie 2019-06-24 17:23:09 +08:00
写几个标点符号吧。
每几分钟查一次数据,然后在 Java 处理。 |
3
zhady009 2019-06-24 17:43:09 +08:00
没看到是用户自定义设置 这样就只能每分钟调一次了 其实也没什么的
添加定时器那个肯定不行 用户多了肯定有问题 |
4
sigmapi 2019-06-24 17:47:31 +08:00
直接用 quartz, 有 cron trigger
自己写的话,用 ScheduledExecutorService 就可以了,新建提醒时算出下次触发时间,每次触发的时候再算出下次触发的时间加到 executor 里 也可以用效率更高的 Hash Wheel 数据结构 https://stackoverflow.com/questions/867621/efficient-timer-algorithm |
5
misaka19000 2019-06-24 17:56:31 +08:00
这排版楼上你们居然看得下去
|
6
Cyron 2019-06-24 18:01:53 +08:00 via iPhone
上 quartz 吧
|
7
Archangell OP @wolfie 哈哈哈 不好意思 习惯空格分隔了
如果是几分钟查一次 就要做到每分钟查询了 这样不是特别耗性能吗 |
8
zhady009 2019-06-24 21:01:20 +08:00 via iPhone
@Archangell 一分钟一次根本没啥啊 只要你那次查询查出来的就是需要被通知的学生
|
9
akira 2019-06-24 21:53:20 +08:00
功能优先,优化什么的着急啥。
另外,“永久存在一个计时器任务” 的情况是很正常的,几个几十个计时器一直跑 都不奇怪的 |
10
zzl22100048 2019-06-25 08:16:39 +08:00
app 还是 web ?
|
11
wolfie 2019-06-25 08:17:11 +08:00
|
12
zzl22100048 2019-06-25 08:19:47 +08:00
让客户端去提醒呗
|
13
Archangell OP |
14
nekoneko 2019-06-25 09:35:56 +08:00
每分钟查一遍数据库,或者查缓存,最简单。或者做一个按提醒时间排序的有序阻塞队列,一个线程向队列写,一个线程取数据做定时任务
|
15
vance 2019-06-25 11:33:56 +08:00
每天凌晨查出要当天要提醒的时间和学生,按照当天的时间段动态设置提醒任务,然后删除前一天的提醒
|
16
akira 2019-06-25 18:33:42 +08:00
@Archangell 例如设定一个 1 分钟的定时器,然后这个定时器每次 检查 这一次 有 哪些学生需要提醒 ,这样就可以了啊
|
17
kevinv 2019-06-25 18:54:33 +08:00
环形队列
|