想咨询个 PHP 定时的问题

2016-11-27 15:22:33 +08:00
 duguxiaohuai

现在平台要加入会员机制,会员每个月 5 元钱,最低一个月,想问下如何计算这一个月时间,是将到期的时间计算出来,到了那个时间执行还是如何操作?用户量比较大,大概几十万会员。

4110 次点击
所在节点    PHP
34 条回复
kchum
2016-11-27 15:32:46 +08:00
没有会员的有限时间这个字段咩
sagaxu
2016-11-27 15:41:14 +08:00
加索引(is_member, expire_time),每次查 is_member=1 and expire_time < 当前时间的,关闭会员资格。可以每 5 分钟检查一次,每批 limit 10000 条,处理到没有为止。
xavier007
2016-11-27 15:41:34 +08:00
会员到期一般不都是专门一个字段存储到期日期么? 使用某功能前线判断是否到期
SlipStupig
2016-11-27 16:01:08 +08:00
不知道你用什么数据库,但是大致思路差不多,我认为根本不要,定时去排查到期的,除非你需要去通知到期用户,所以提一下我的一些愚蠢的想法:

sql:设置一个到期,每次用户登录的时候去检查这个字段就行了,如果他花钱了钱不登录,也就是根本没用你服务,你也不用管他,要考虑一个例外就是用户可能没有付费,这个字段就是-1 或者其他,要去通知的话就是: expired != -1 and today > expired,这样就可以了
nosql :更好办了,直接弄个 collections ,设置一个到期日期,到时间了 token 自动 drop 掉了,找不到 token 的都是到期了的全是到期了的
Immortal
2016-11-27 16:06:22 +08:00
1 设置一个到期时间 遇到功能限制的地方 先判断会员等级 再判断时间 如果时间到了 但是会员等级还是高级 update
2 设置一个任务计划,每天检查一次所有会员是否到期
eDeeraiD0thei6Oh
2016-11-27 16:19:05 +08:00
付费会员单独一张表记录
Curtion
2016-11-27 16:48:47 +08:00
4 楼的不错
1.只有当这个用户登陆 /操作时才执行查询命令,看会员是否到期
2.如果是需要会员功能来达到某个功能,那么在实现这个功能之前可以检查一下会员是否到期
zhaolion
2016-11-27 17:53:56 +08:00
如果你使用了 redis ,可以用 redis 缓存用户信息,然后支付 vip 时候,使用 redis 命令 EXPIRE 设置一个 vip_key 的过期时间为一个月,然后每次都会检查 redis 缓存里面的这个 vip_key 是否消失了, get 这个 vip_key 为 null 就证明 vip 已经到期了,后续可以做更多操作
txlty
2016-11-27 18:05:43 +08:00
最古老最普通的实现方式,请求时判断。
ichou
2016-11-27 18:08:20 +08:00
@zhaolion 支付类信息放在 redis 的话,记得在数据库里做好冗余或者做好持续化。想想 redis 宕一下的话,那酸爽 😂
ichou
2016-11-27 18:09:20 +08:00
是持久化 上条指误
raincious
2016-11-27 18:11:58 +08:00
这就是用 Model 的好处:

添加一个字段 expire_time ,然后

function isExpired(): bool {
return $this->expireTime < time();
}

后面的操作用这个方法就好了。
zhaolion
2016-11-27 18:17:23 +08:00
@ichou redis 和数据库都会冗余的,并且肯定做持久化,这是可用性问题
onlyhot
2016-11-27 19:59:33 +08:00
请求时验证。
定时任务跑。
lianxiaoyi
2016-11-27 20:34:13 +08:00
记一个用户到期时间,然后记一个是否开通了 vip 标志,然后 2 分钟去数据库执行一次 update 表 set a=非会员 where time<=当前时间!几十万数据毫秒级别完成!
jimzhong
2016-11-27 21:04:26 +08:00
在表中增加用户的会员到期时间,在用户登录和使用会员服务时检查即可。
还可以写个 cron 脚本,每天午夜扫一次数据库,去掉过期会员的会员标志。
cncqw
2016-11-27 22:20:17 +08:00
有这么复杂吗,用户表加个会员到期时间字段,每次登录和当前时间判断一下
techmoe
2016-11-27 23:55:52 +08:00
请求时验证吧。。逻辑设计好没什么太大问题的
components
2016-11-28 01:37:59 +08:00
定时任务+redis 跑
aerostone
2016-11-28 08:17:07 +08:00
几十万用户应该会发通知的吧

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

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

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

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

© 2021 V2EX