江新宇

总结最近游戏中活动出现被刷问题。

问题:

活动描述:有一个签到活动,就是用户每天只能签到一次, 签到后并发放奖励,就是因为会发放奖励

所以导致活动,有好多人开挂来刷这个活动,导致有些人,一天领取多个奖励的现象,

 

php代码逻辑:部门一个同事php代码逻辑是这样的,签到用redis来记录是否签到,签到成功就发奖励

 

逻辑顺序是:先判断是否满足签到条件,然后发奖再签到。

 

解决:

 

redis排查:直接用php代码模拟测试出问题所在,发现很怪异,redis对象能new成功,但是一执行connect

方法时就出现对象不存在的现象,而且不抛出异常,php代码不抛出错误,问题是redis负载的问题,导致连

接数被占满所致,解决方法就是,增加redis机器,并增加监控,重启原有的redis,redis出问题,估计是被刷

所致。

php代码逻辑排查:发现逻辑顺序有问题,应当是先要签到然后在发奖,这样才能防止住并发,这里可以用两个

概念来解释一下,被刷的代码采用的是乐观锁说机制,我们redis就相当于锁了,不是在代码一执行就开始锁住

而是把代码看的太乐观了,后来改成了悲观锁机制,问题就得到了解决,一开始就锁住,然后就去执行下面发奖

流程,这样的就不会多发了。

posted @ 2015-01-14 15:20  新风宇宙-江新宇的博客  阅读(227)  评论(0编辑  收藏  举报