需求/亮点:实现strategy_rule中的rule_weight策略
4000:102,103,104,105 5000:102,103,104,105,106,107 6000:102,103,104,105,106,107,108,109
根据用户当前积分数,提供一个分段概率奖品控制机制,当用户积分达到特定范围时,只能抽出对应award_id的奖品,同时维持相对概率权重。
实现思路:
- 定义抽奖概率装配方法,这个方法传入奖品实体列表,用这些奖品的最小概率值除以概率值总和得到概率度量值,再用这个概率度量值乘每个奖品的概率得到每个奖品在查找表中的个数,生成查找表并存储在Redis中。
- 需要将数据库中的规则字符串解析为一个积分和奖品列表的映射关系。每个积分范围对应一个奖品列表。每个奖品列别都调用上一步定义的概率装配方法,这样就在Redis中装配了该策略下所有积分段的查找表,实现了不同积分段下的概率装配。
- 查找时,根据积分段,在对应查找表的size内取随机数,作为key去Redis查找表中查对应的value,value的值即为抽到的awardId