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
    评论
以下是一个简单的 Jedis 连接池的实现,使用 Scala 语言编写: ```scala import redis.clients.jedis.JedisPool import redis.clients.jedis.JedisPoolConfig object JedisPoolManager { private val config = new JedisPoolConfig() config.setMaxTotal(10) // 最大连接数 config.setMaxIdle(5) // 最大空闲连接数 config.setMinIdle(1) // 最小空闲连接数 config.setTestOnBorrow(true) // 取出连接时测试是否可用 config.setTestOnReturn(true) // 归还连接时测试是否可用 private val pool = new JedisPool(config, "localhost", 6379) def getResource = pool.getResource def returnResource(jedis: Jedis) = { if (jedis != null) { jedis.close() } } } ``` 解释: 1. 首先创建一个 `JedisPoolConfig` 对象,用于配置连接池的参数,如最大连接数、最大空闲连接数、最小空闲连接数等。 2. 然后创建一个 `JedisPool` 对象,传入上面创建的 `JedisPoolConfig` 对象和 Redis 服务器的地址和端口号。 3. 定义 `getResource` 方法,用于从连接池中获取一个 Jedis 实例。 4. 定义 `returnResource` 方法,用于归还 Jedis 实例到连接池中。 5. 在 `returnResource` 方法中,使用 `jedis.close()` 方法关闭 Jedis 实例,将其归还到连接池中。注意,如果 Jedis 实例为 null,则不执行任何操作。 使用示例: ```scala import redis.clients.jedis.Jedis object Main extends App { val jedis: Jedis = JedisPoolManager.getResource jedis.set("foo", "bar") val result = jedis.get("foo") println(result) JedisPoolManager.returnResource(jedis) } ``` 在上面的示例中,首先通过 `JedisPoolManager.getResource` 方法获取一个 Jedis 实例,然后可以使用该实例进行 Redis 操作。完成操作后,通过 `JedisPoolManager.returnResource` 方法将 Jedis 实例归还到连接池中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值