php redis做mysql的缓存,怎么异步redis同步到mysql数据库
正常情况下是没有问题的,
但是有人用恶意脚本进行刷奖,也就是同一个人发起大量请求,1秒可能一两百的请求甚至更多,而且不只一个人刷奖。
问题出在1这一步
举个例子,假设每人只能抽一次奖,因为请求太快,同一人的a,b两个请求几乎同时来,a走完抽奖逻辑了,并且在抽奖表中插入记录的过程时,因为mysql的性能的问题,b去走1这一步是读不到表中的记录的,因为a的插入根本没有完成。所以b请求会再走一次抽奖逻辑。造成同一人抽奖两次,然后再插入抽奖表。
我关心的是能否a插入抽奖表的瞬间,b就能判断出抽奖表有数据。
所以我觉得问题是mysql写入的不够快,读取的不够快,所以我要采用redis做一层快速缓存。
我们做的抽奖是单一奖品百分之百中奖,只限制奖品数量,所以必须保证每人只能抽一次,而且尽量在程序层面去解决。
php使用lua+redis实现限流,计数器模式,令牌桶模式
协程间可共享全局变量,同时要维护各自的调用栈结构;这两个要求目前在PHP的架构下较难实现。当然,非阻塞IO是可以通过libevent扩展实现,比如使用laruence的YAR。
PHP高级应用都有什么课程
楼下回答的都是一些前端技术,PHP是后端开发者,也可是服务端开发者
我发现很多快速入门的参加工作1-5年的PHPer到了后期发展都会不知道怎么去进阶了,只会CRUD!
刚好,趁着这段时间,我在这里有一份PHP架构师进阶体系,适合1-5年PHP开发者,经过四年时间的打磨,大家可以自行进行查漏补缺和规划、尤其适合以下人群
没有做过PHP、redis、MySQL性能优化,只是了解或者加加索引之类的
用过传统laravel框架等技术,但是只限于使用,遇到问题无法解决、没有深入底层和阅读源码
从来没有系统学习微服务、分布式架构,觉得架构是对PHP遥不可及的
对于微服务、分布式技术有所了解,但从来没有实践经历的
相信它会给你带来很多收获。
如果你想要往架构师或TL的方向发展的话,那或许你可以看一下我分享给你的这份进阶路线图,主要针对1到5年及以上的PHP开发人员,里面的技术包涵了PHP高并发、分布式、微服务、框架内核、高性能等技术!!还准备了一套中高级进阶学习教程,每天还有12年的架构师做讲解,需要可关注本头条号,并且发送私信关键词:PHP
有进阶的瓶颈以及提升的疑惑可以在底部留言交流,关注我的头条号!!!

