package com.springboot.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import java.util.Random; /** * @Description: * @Author: 陈明建 * @Date: 2018/11/27 22:50 */ @RestController @RequestMapping("/redis") @Slf4j public class RedisController { private static final String NOT_RECEIVE_RED_PACKAGE = "noReceiveRedpackages"; private static final String RECEIVE_RED_PACKAGE_USER_IDS = "userIds"; @Autowired private JedisPool jedisPool; @GetMapping("/initRepackage") public String initRedPackage(){ Jedis jedis = jedisPool.getResource(); //初始化所有未领取的红包 String[] redPackageArr = new String[]{"6.66","8.88","9.99","16.6","18.8"}; for(String redPackageMoney : redPackageArr){ for (int i = 0; i < 160; i++){ jedisPool.getResource().lpush(NOT_RECEIVE_RED_PACKAGE,redPackageMoney); } } for (int i = 0; i < 10; i++){ jedisPool.getResource().lpush(NOT_RECEIVE_RED_PACKAGE,"28.8"); } return "初始化红包成功"; } @GetMapping("/getRepackage/{userId}") public String getRedPackage(@PathVariable(value = "userId") String userId){ Jedis jedis = jedisPool.getResource(); //判断是否存在 if(jedis.sismember(RECEIVE_RED_PACKAGE_USER_IDS,userId)){ return "该用户已经领取过红包"; } long lenth = jedis.llen(NOT_RECEIVE_RED_PACKAGE); if(lenth > 0){ Random r = new Random(); System.out.println("======="+lenth); int index = r.nextInt((int)lenth);// 范围是[0,lenth) System.out.println(index); //获取一个随机数 String redPackage = jedis.lindex(NOT_RECEIVE_RED_PACKAGE,index); if(redPackage != null){ System.out.println(redPackage); //TODO 将用户id,红包金额,身份证号码保存到关系型数据库中(mysql) //删除在未领红包集合中的该数据 jedis.lrem(NOT_RECEIVE_RED_PACKAGE,1,redPackage); // TODO 应该考虑事务和同步 //将用户id保存到userIds集合中 jedis.sadd(RECEIVE_RED_PACKAGE_USER_IDS,userId); return "用户:" + userId + "获取红包:" + redPackage + "元"; } } return "活动已经结束"; } @GetMapping("/threadUser") public String threadUser(){ for (int i = 0; i < 1000; i++){ new Thread(() -> { Random r = new Random(); int index = r.nextInt(10000); getRedPackage(String.valueOf(index)); }).start(); } return "活动已经结束"; } }
redis红包派送
最新推荐文章于 2023-03-16 21:02:36 发布