目录
前言:
你知道的,这只是一个小笔记而已
API场景:
- SADD key member1 [member2]:添加一个或者多个参与用户;
- SRANDMEMBER KEY [count]:随机返回一个或者多个用户;
- SPOP key:随机返回一个或者多个用户,并删除返回的用户;
- SRANDMEMBER 和 SPOP 主要用于两种不同的抽奖模式:
- SRANDMEMBER 适用于一个用户可中奖多次的场景(就是中奖之后,不从用户池中移除,继续参与其他奖项的抽取使用;
- 而 SPOP 就适用于仅能中一次的场景(一旦中奖,就将用户从用户池中移除,后续的抽奖,就不可能再抽到该用户); 通常 SPOP 会用偏多。
Java代码示例,用于实现Redis用户抽奖接口:
import redis.clients.jedis.Jedis;
public class RedisLottery {
private Jedis jedis = null;
public RedisLottery() {
jedis = new Jedis("localhost", 6379);
}
public void addLotteryUser(String userId) {
jedis.sadd("lottery_users", userId);
}
public boolean isLotteryUser(String userId) {
return jedis.sismember("lottery_users", userId);
}
public boolean doLottery() {
int luckyNumber = (int) (Math.random() * 1000);
String luckyUser = jedis.srandmember("lottery_users");
int userNumber = Integer.parseInt(luckyUser.substring(4));
return luckyNumber == userNumber;
}
}
示例中,我们使用了Jedis客户端库来连接Redis数据库。我们创建了一个RedisLottery类,并定义了三个方法:addLotteryUser、isLotteryUser和doLottery。
addLotteryUser方法用于向Redis数据库中添加抽奖用户。我们使用sadd命令将用户ID添加到名为"lottery_users"的集合中。
isLotteryUser方法用于判断一个用户是否已经参与了抽奖。我们使用sismember命令判断用户ID是否在"lottery_users"集合中。
doLottery方法用于执行抽奖操作。我们首先生成一个0到999之间的随机数作为幸运数字。然后,我们使用srandmember命令从"lottery_users"集合中随机选择一个用户,并获取该用户的ID。我们将该用户的ID中的前缀"USER_"去掉,得到该用户的数字编号。最后,我们将该用户的数字编号与幸运数字进行比较,如果相等,则该用户中奖,否则该用户未中奖。
-
-
主要业务逻辑还是需要根据实际开发情况来看