irpas技术客

使用Redis Set实现抽奖小程序_redis 抽奖_rivercoder

网络 1647

?欢迎光临我的博客查看最新文章:?https://river106.cn

使用Redis Set实现抽奖小程序,先介绍Set的相关命令。

1、Redis Set相关命令 1.1 SADD SADD key member [member ...]

将一个或多个?member?元素加入到集合?key?当中,已经存在于集合的?member?元素将被忽略。

假如?key?不存在,则创建一个只包含?member?元素作成员的集合。

当?key?不是集合类型时,返回一个错误。

在Redis2.4版本以前,?SADD 只接受单个?member?值。

时间复杂度: O(N),?N?是被添加的元素的数量。

返回值:?被添加到集合中的新元素的数量,不包括被忽略的元素。

示例:

127.0.0.1:6379> sadd luckydraw 111 222 333 444 555 666 777 888 999 000 (integer) 10 1.2、SMEMBERS SMEMBERS key

返回集合?key?中的所有成员。不存在的?key?被视为空集合。

时间复杂度:O(N),?N?为集合的基数。

返回值:?集合中的所有成员。

示例:

127.0.0.1:6379> smembers luckydraw 1) "777" 2) "222" 3) "666" 4) "555" 5) "000" 6) "888" 7) "333" 8) "111" 9) "444" 10) "999"

1.3、SRANDMEMBER SRANDMEMBER key [count]

随机返回集合中的count个参数,count为可选参数,没有提供的话,只返回集合中的一个随机元素。

时间复杂度:

只提供?key?参数时为 O(1) 。

如果提供了?count?参数,那么为 O(N) ,N 为返回数组的元素个数。

返回值:

只提供?key?参数时,返回一个元素;如果集合为空,返回?nil?。

如果提供了?count?参数,那么返回一个数组;如果集合为空,返回空数组。

示例:

127.0.0.1:6379> sadd luckydraw 111 222 333 444 555 666 777 888 999 000 (integer) 10 127.0.0.1:6379> srandmember luckydraw "999" 127.0.0.1:6379> srandmember luckydraw 2 1) "333" 2) "111" 127.0.0.1:6379> srandmember luckydraw 3 1) "222" 2) "777" 3) "333" 127.0.0.1:6379> srandmember luckydraw 4 1) "222" 2) "777" 3) "666" 4) "333"

1.4、SPOP SPOP key?[count]

移除并返回集合中的count个随机元素。count为可选参数,没有提供的话,只移除并返回集合中的一个随机元素。

如果只想获取随机元素,不想该元素从集合中被移除,可以使用?SRANDMEMBER?命令。

时间复杂度: O(1)

返回值:

被移除的随机元素。

当?key?不存在或?key?是空集时,返回?nil?。

示例:

127.0.0.1:6379> spop luckydraw 1 1) "444" 127.0.0.1:6379> spop luckydraw 2 1) "666" 2) "777" 127.0.0.1:6379> spop luckydraw 3 1) "111" 2) "000" 3) "333" 127.0.0.1:6379> spop luckydraw 4 1) "222" 2) "555" 3) "888" 4) "999" 127.0.0.1:6379> spop luckydraw (nil)

2、使用redis实现抽奖小程序

将参与抽奖的人员加入集合:

SADD key {userId}

查看参与抽奖的人员:

SMEMBERS key

获取中奖人员:

SRANDMEMBER key [count]

SPOP key?[count]

像微信抽奖小程序中抽取单个奖品可以使用SRANDMEMBER;如果是年会中的抽奖分一等奖、二等奖、三等奖...抽了三等奖的就不允许再抽其他奖,这个时候就需要使用SPOP,抽中了某个奖品后从人员集合中删除。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #redis #抽奖 #使用redis #1Redis #Set相关命令11 #SADDSADD #key