php 抽奖功场景分析以及功能实现
本期给大家介绍常见的营销插件, 作为一名开发业务的程序猿来说抽奖功能可谓是多见不怪的,
接下来就请阅读该墨客的各位小伙伴跟随 GJ_rabbit 来一起分析抽奖的难点以及相应功能的实现
**1,分析功能实现的思路**
1.1,用户状态的检测
是否合法,是否登录等常见验证, 此处推荐使用token + sign
1.2,根据项目业务场景, 实现对应验证
目前该实例的场景为: 每天抽一次,抽i将必中,不能超抽
1.2.1,检测用户今天是否抽过,
1.2.2,恶意访问 (此处 ip 10秒内出现5次)
1.2.3,避免同一奖品N个用户抽中 (redis -- 悲观锁)
1.2.4,奖品剩余更新
1.3,redis数据与MySQL数据同步
数据同步:定时任务(crontab)
**1.2,奖品数据中 redis 与 MySQL的协作**
1.2.1,MySQL 主要用于数据永久性存储,管理平台创建抽奖活动存储以及最终与Redis进行数据同步
1.2.2,Redis 主要用于数据短暂性存储, 缓解MySQL读写压力
1.2.3,,MySQL与Redis在抽奖中的联系
1.2.3.1,在管理平台对抽奖活动操作时需同时维护MySQL与Redis
MySQL:不多介绍,根据业务情况创建相应数据表
Redis:
奖品信息存储:Hash
key <----> 对应活动信息主键
value <----> 奖品信息(转json)
用户抽奖记录: set
value <----> 用户唯一标识
中奖报表:hash
key <----> 对应活动信息主键
value <----> 中奖信息(转json)
1.2.3.2,Reids与MySQL数据同步
将中奖报表。奖品剩余同步
1.2.3,,定时任务执行, 操作日志删除
根据自身业务进行处理
上述简单介绍功能实现的思路,,数据存储格式以及数据同步。