Jedis实现抽奖功能

实现抽奖功能的具体思想:

使用客户端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);
             }
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值