📝个人主页:五敷有你
🔥系列专栏:Redis
⛺️稳中求进,晒太阳
- @RequestMapping("xian")
- public String xianLiu(String sign){
-
- String sign1 = redisTemplate.opsForValue().get("sign");
- if(!StringUtils.isBlank(sign1)){
- return "我不可以访问";
- }
-
- redisTemplate.opsForValue().set("sign",sign,10, TimeUnit.SECONDS);
- return "我可以访问";
-
- }
- @RequestMapping("/access")
- public String access(String id){
-
- Long increase= redisTemplate.opsForValue().increment(id);
- redisTemplate.expire(id,10,TimeUnit.SECONDS);
-
- if(increase>5){
- return "我不可以访问,10s内访问次数"+increase;
- }
-
- return "我可以访问"+increase;
-
- }
给每个红包一个保底1元,让后将剩下的钱进行随机分配
如果restTime<0,表示红包过期
如果redis返回null 表示抢完了,返回已抢完
注意:红包过期时间。
- @RequestMapping("/sendRedBags")
- public String sendRedBags(Integer uid,Integer money,Integer bags){
-
- Random random = new Random();
-
- Integer[] redBags=new Integer[bags];
- Arrays.fill(redBags,1);
- int restMoney= money-bags;
- for(int i=0;i
1;i++){ - int bound= restMoney+1;
- //最少1元
- int mon= random.nextInt(bound);
- redBags[i]+=mon;
- restMoney=restMoney-mon;
- if(restMoney<=0){
- break;
- }
- }
- redBags[bags-1]+=restMoney;
- System.out.println("uid"+uid+"发送红包: "+Arrays.toString(redBags));
-
- String key="redBags:"+uid;
- for (int i = 0; i < bags; i++) {
- redisTemplate.opsForList().leftPush(key,redBags[i].toString());
- }
- redisTemplate.expire(key,20,TimeUnit.SECONDS);
- return "ok";
- }
-
- @RequestMapping("/getRedBags")
- public String getRedBags(Integer uid){
-
- String key="redBags:"+uid;
- Long restTime = redisTemplate.getExpire(key,TimeUnit.SECONDS);
- System.out.println("红包剩余时间: "+restTime);
- if(restTime<=0){
- return "红包过期了";
- }
- String redBags = redisTemplate.opsForList().leftPop(key);
- if(StringUtils.isBlank(redBags)){
- return "红包抢光了";
- }
- System.out.println("你抢到的金额: "+redBags);
- return "你抢到的金额: "+redBags;
-
-
- }
看似没有问题,但在redBags中没有东西后,key也就没了,如下:
当第6次获取红包,就会返回-2,表示没有这个key了,可明明还有时间啊,是value为nil了,key也就没了??
验证:
经过验证,确实如果list结构中的value没了之后,key也没了。不用等到过期。
所以上面判断时间的代码好像就没意义了,修改,简单点!
- @RequestMapping("/getRedBags")
- public String getRedBags(Integer uid){
-
- String key="redBags:"+uid;
-
-
- String redBags = redisTemplate.opsForList().leftPop(key);
- if(StringUtils.isBlank(redBags)){
- return "红包过期了或被抢光了";
- }
- System.out.println("你抢到的金额: "+redBags);
- return "你抢到的金额: "+redBags;
-
-
- }