实现抽奖功能的具体思想:
使用客户端jedis连接到redis,使用redis中的set数据类型,set数据类型不可重复的,保证了参加抽奖的人的唯一性。pop()时得到的数据是随机的不固定的,符合抽奖的随机性,所以使用redis中set数据类型实现了抽奖功能。
1.创建maven工程
2.引入依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.1</version><!--版本号可根据实际情况填写-->
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>
3.新建util包,创建JedisFactory类主要是配置线程池的参数,可以通过JedisFactory获得jedis连接
public class JedisFactory {
private static JedisFactory jedisFactory;
private JedisPool jedisPool;
private JedisFactory()
{
super();
}
public static JedisFactory getInstance()
{
if(jedisFactory==null)
jedisFactory=new JedisFactory();
return jedisFactory;
}
public JedisPool getJedisPool()
{
if(jedisPool==null)
{
GenericObjectPoolConfig config=new GenericObjectPoolConfig();
jedisPool=new JedisPool(config,"地址",6379,3000超时断开链接,"密码XXX");//
}
return jedisPool;
}
}
3.创建service,具体实现逻辑
public class JedisService {
private JedisPool jedisPool= JedisFactory.getInstance().getJedisPool();
private String lottoryKey="userkey";
private Jedis jedis=jedisPool.getResource();
public void addUser(String ...user)
{
if(user==null||user.length==0)
System.out.printf("至少添加一个用户!");
for(String u:user)
jedis.sadd(lottoryKey,user);
}
public void clearLottory()
{
jedis.del(lottoryKey);
}
public Set<String> getUSer(Integer n)
{
if(n==null||n==0)
{
System.out.println("n必须大于0");
}
long count=jedis.scard(lottoryKey);
if(n>count)
{
System.out.printf("获奖人数不能大于参与抽奖的人数!");
}
return jedis.spop(lottoryKey,n);
}
}
测试类
public class JedisTest {
public static void main(String [] args)
{ JedisPool jedisPool= JedisFactory.getInstance().getJedisPool();
Jedis jedis=jedisPool.getResource();
JedisService jedisService=new JedisService();
Random random=new Random();
//初始化奖池
for(int i=0;i<10;++i)
{
String a=""+random.nextInt(1000);
jedisService.addUser(a);
}
//抽奖
Scanner sc=new Scanner(System.in);
while(true)
{
System.out.println("请输入抽奖人数:");
while(true)
{
int s= sc.nextInt();
if(s==0)
{
jedisService.clearLottory();
break;
}
Set<String> set= jedisService.getUSer(s);
for(String u:set)
{
System.out.println(u);
}
}
}
}
}