使用Redis Set实现抽奖小程序
使用Redis Set实现抽奖小程序,先介绍Set的相关命令。
1、Redis Set相关命令
1.1、SADD
1 |
|
将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。
假如 key 不存在,则创建一个只包含 member 元素作成员的集合。
当 key 不是集合类型时,返回一个错误。
在Redis2.4版本以前, SADD 只接受单个 member 值。
时间复杂度: O(N), N 是被添加的元素的数量。
返回值: 被添加到集合中的新元素的数量,不包括被忽略的元素。
示例:
1 |
|
1.2、SMEMBERS
1 |
|
返回集合 key 中的所有成员。不存在的 key 被视为空集合。
时间复杂度:O(N), N 为集合的基数。
返回值: 集合中的所有成员。
示例:
1 |
|
1.3、SRANDMEMBER
1 |
|
随机返回集合中的count个参数,count为可选参数,没有提供的话,只返回集合中的一个随机元素。
时间复杂度:
只提供 key 参数时为 O(1) 。
如果提供了 count 参数,那么为 O(N) ,N 为返回数组的元素个数。
返回值:
只提供 key 参数时,返回一个元素;如果集合为空,返回 nil 。
如果提供了 count 参数,那么返回一个数组;如果集合为空,返回空数组。
示例:
1 |
|
1.4、SPOP
1 |
|
移除并返回集合中的count个随机元素。count为可选参数,没有提供的话,只移除并返回集合中的一个随机元素。
如果只想获取随机元素,不想该元素从集合中被移除,可以使用 SRANDMEMBER 命令。
时间复杂度: O(1)
返回值:
被移除的随机元素。
当 key 不存在或 key 是空集时,返回 nil 。
示例:
1 |
|
2、使用redis实现抽奖小程序
将参与抽奖的人员加入集合:
1 |
|
查看参与抽奖的人员:
1 |
|
获取中奖人员:
1 |
|
或
1 |
|
像微信抽奖小程序中抽取单个奖品可以使用SRANDMEMBER;
如果是年会中的抽奖分一等奖、二等奖、三等奖…抽了三等奖的就不允许再抽其他奖,这个时候就需要使用SPOP,抽中了某个奖品后从人员集合中删除。