PHP 如何实现倒计时结束执行某个操作?

比如实现一个一天的倒计时投票,一天结束投票截止,但每个发起投票的时间是不一样的,如果用 Crontab 定时任务会有很大的时间误差,有没有其他特别好的办法,没有误差的。
   希望各位大佬指教,希望可能具体点。

回答·56
最热
最新
  • 列表页,反馈投票截止时间,前段做倒计时显示 接口请求分 发起与投票。 Redis 做数据统计,rabbitmq 做生产消费者 发起时,创建 redis 内容,并用 tabbitmq 以结束时间生成定时消息     Redis 根据要求,map 或 string 记录投票结束时间,用 map 或者 list 或者 string 记录票数或者投递人,失效时间超过结束统计时间 10 分钟之类的 投票接口负责统计票数到 redis。 最后 Rabbitmq 消费者,等待消息触发,完成 redis 消息内容统计,与数据库持久化
  • 这个投票的数据,保存着投票内容和停止投票的时间,每次进去页面或提交投票先判断是否过期。然后前端 js 弄个倒计时呗,前后端一起判断时~
  • 用不到延时处理,投票的时候判断投票发起时间就行了,大于一天不让投票
  • 我没看懂题目吗?投票开始的时候不就知道截止时间了吗,超过投票时间返回投票结束不就可以了?
  • 存储一个结束时间,用当前时间去判断结束时间,当前时间是否大于结束时间。 如果当前时间大于结束时间,则可以投票,否则提示不可投票
  • 第一种,crontab 执行操作+被动触发操作 第二种,时间短短的可以用延迟队列,到了就触发 第三种,swoole 异步毫秒级的定时器 有效期时间长的建议第一种,短的第二种
  • 这种问题,你应该想的不是 PHP 本身,应该想的是他的生态中那些能够实现,用数据库有 MySQL 存储过程,Redis sentnx,Linux crontab 的 sleep 简单实现,用扩展流行的 swoole,Redis,用队列有 rabbitmq 延迟,当然我只是举个例子,PHP 从来不是一个人在战斗
  • 最简单的方案无非就是用 redis 实现用户 ID 和投票主题 id 关联作为关联键名的缓存,给这个缓存一个有效时间,每次投票查询其缓存键名是否存在即可
  • redis 监测 key 过期时间
  • 可以基于 redis 实现一个 cron 服务,大概逻辑是添加任务到 redis,worker 循环从 redis 取任务,到时间了写入一个队列,由另外的 worker 去异步执行具体任务逻辑,可以实现秒级的 cron 执行