关于redis:如何用set实现一个抽奖

提前统计好参加的人数,初始化奖池,放入redis set中,通过spop随机弹出,抽完即扔,如果是中奖区间内的号码则中奖!

解密端午抽奖实现逻辑:

首先抽奖的前提必定是:

  1. 保障在抽奖奖池抽完后,将奖品刚刚好发完,并且每个人都抽过奖。
  2. 每个人中奖的概率是一样的。

实现:
提前统计参加抽奖的人,造成一个数组,比方2600人抽奖,初始化好一个 2600长度的 数组,丢进redis,比方有50集体能够中奖,就将号码牌<50的抽奖号视为中奖。

redis 中spop的实现抽奖

intset 编码的实现办法 hashtable 编码的实现办法
调用 intsetRandom 函数, 从整数汇合中随机取出一个元素, 在将这个随机元素返回给客户端之后, 调用 intsetRemove 函数, 将随机元素从整数汇合中删除掉。 调用 dictGetRandomKey 函数, 从字典中随机取出一个字典键, 在将这个随机字典键的值返回给客户端之后, 调用 dictDelete 函数, 从字典中删除随机字典键所对应的键值对。

验证每个人的偏心水平:
假如有2600集体抽奖,有50个中奖卡牌,抽奖后将卡牌抛弃。

第一个人抽奖中奖概率: 50/2600

第二个人中奖概率 :

(50/2600) (49/2599) + (2550/2600)(50/2599)=50/2600

能够验证失去中奖概率统一是偏心的。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理