• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    基于Redis实现抽奖功能及问题小结

    1、分析

    这个时候我们可以利用redis中的set集合中的spop来实现。

    特征:抽奖成功的人会自动从集合中删除,即获取到奖品的人不再继续参与抽奖。

    spop命令:随机返回元素,元素从集合中删除该元素

    2、初始化名单数据

    package com.example.service;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.stereotype.Service;
    
    import javax.annotation.PostConstruct;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @Auther: 长颈鹿
     * @Date: 2021/08/21/14:09
     * @Description:
     */
    @Service
    @Slf4j
    public class SpopRandomSetService {
    
        @Autowired
        private RedisTemplate redisTemplate;
    
        private static final String SPOP_USER_SETS = "pop:user:set";
    
        // 把所有员工全部添加到集合列表中
        @PostConstruct
        public void initData(){
            log.info("初始化奖品等级信息...");
            // 判断集合是否已经存在
            boolean flag = this.redisTemplate.hasKey(SPOP_USER_SETS);
            // 防止作弊
            if (!flag) {
                // 获取所有员工的信息
                ListInteger> initDataList = initDataList();
                // 把员工信息写入到redis中 sadd key data
                initDataList.forEach(data -> this.redisTemplate.opsForSet().add(SPOP_USER_SETS, data));
            }
        }
    
        // 模拟100用户抽奖
        private ListInteger> initDataList() {
            // todo : 从数据库里面来,把公司里面所有的员工从数据表中全部查询出来
            ListInteger> listData = new ArrayList>();
            for (int i = 0; i  100; i++) {
                listData.add(i + 1);
            }
            return listData;
        }
    
    }

    3、具体抽奖方法

    // 随机抽取用户
        public int start(){
            return (int)redisTemplate.opsForSet().pop(SPOP_USER_SETS);
        }

    4、抽奖接口测试

    package com.example.controller;
    
    import com.example.service.SpopRandomSetService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @Auther: 长颈鹿
     * @Date: 2021/08/21/14:13
     * @Description: 抽奖接口测试
     */
    @RestController
    public class SpopRandomSetController {
    
        @Autowired
        private SpopRandomSetService spopRandomSetService;
    
        @PostMapping("/sPop/random/user")
        public int start() {
            return spopRandomSetService.start();
        }
    
    }

    5、小结

    # 查询集合成员
    smembers pop:user:Set
    # 查询集合的长度变化
    scard pop:user:Set

    spop:随机从集合取出一个元素返回,并且从集合中删除该元素。

    到此这篇关于基于Redis实现抽奖功能的文章就介绍到这了,更多相关Redis实现抽奖内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • Redis实战之商城购物车功能的实现代码
    • java redis 实现简单的用户签到功能
    • 使用redis的increment()方法实现计数器功能案例
    • Java使用Redis实现秒杀功能
    • 多个SpringBoot项目采用redis实现Session共享功能
    • 使用Redis实现微信步数排行榜功能
    上一篇:Spring Boot 项目集成Redis的方式详解
    下一篇:NestJS+Redis实现缓存步骤详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    基于Redis实现抽奖功能及问题小结 基于,Redis,实现,抽奖,功,