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


    问题:

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

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

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

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

    解决:

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

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

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

    所致。

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

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

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

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

  • 相关阅读:
    获取其他线程的数据用 queue, 多进程Q
    self: 限制并发量asyncio
    asyncio 中给running 的loop 动态添加 Future Task
    雾里看花之 Python Asyncio
    python协程之动态添加任务
    异步IO( asyncio) 协程
    加快phpstorm、rubymine、pycharm系列IDE运行速度的方法
    scrapy 'fcntl' has no attribute 'F_GETFD
    sitemap index
    Django模板系统 运算
  • 原文地址:https://www.cnblogs.com/php5/p/4224023.html
Copyright © 2020-2023  润新知