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

5次阅读

共计 555 个字符,预计需要花费 2 分钟才能阅读完成。

 提前统计好参加的人数,初始化奖池,放入 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

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

正文完
 0