使用redis的set类型
项目启动后将数据储存放到redis中
要求页面输入获奖人数,然后点击抽检,页面打印出中奖名单
使用两种方案,第一种中奖的人依旧可以中奖,第二种中将的人不能中奖
页面显示出当前的中奖名单,并且实时同步出可以中奖人的数据池
redis + java 点名器
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 小白李子 2023-03-13 12:45关注
使用redis的set类型可以实现你的需求,因为set类型可以存储不重复的数据,并且可以随机获取元素。你可以参考以下的思路和伪代码:
项目启动后,将数据储存放到redis中,使用一个set类型的键,例如"candidates",并且记录总人数,例如"total"。
页面输入获奖人数n,然后点击抽奖,页面调用后端的抽奖接口。
后端的抽奖接口根据不同的方案来实现:
第一种方案:中奖的人依旧可以中奖。这种情况下,只需要从"candidates"中随机获取n个元素,然后返回给前端。不需要修改redis中的数据。
第二种方案:中奖的人不能中奖。这种情况下,需要从"candidates"中随机获取n个元素,并且将它们从"candidates"中移除,同时更新"total"的值。然后返回给前端。
前端接收到后端返回的中奖名单,显示在页面上,并且实时同步出可以中奖人的数据池,即"total"的值。
以下是一些伪代码:// 后端 // 项目启动后,将数据储存放到redis中 function init() { // 假设data是一个数组,存储了所有候选人的名字 // 连接redis let redis = connectRedis(); // 清空redis redis.flushdb(); // 将data中的元素添加到candidates集合中 redis.sadd(“candidates”, …data); // 将data的长度保存到total键中 redis.set(“total”, data.length); }
// 抽奖接口 function draw(n, scheme) { // 参数n是获奖人数,scheme是方案(1或2) // 连接redis let redis = connectRedis(); // 定义一个数组,存储中奖名单 let winners = []; // 根据方案执行不同的逻辑 if (scheme == 1) { // 方案一:中奖的人依旧可以中奖 // 随机从candidates集合中获取n个元素 winners = redis.srandmember(“candidates”, n); // 不需要修改redis中的数据 } else if (scheme == 2) { // 方案二:中奖的人不能中奖 // 随机从candidates集合中弹出n个元素,并返回它们 winners = redis.spop(“candidates”, n); // 更新total键的值,减去n redis.decrby(“total”, n); } // 返回winners数组给前端 return winners; }
// 前端 // 页面输入获奖人数n,然后点击抽奖按钮 function onClick() { // 获取输入框和选择框的值 let n = getInputValue(); let scheme = getSelectValue(); // 调用后端的抽奖接口,并传入参数n和scheme let winners = callDrawApi(n, scheme); // 显示winners数组在页面上,并实时同步出可以中奖人的数据池(即total键的值) showWinners(winners); }
解决 无用评论 打赏 举报
悬赏问题
- ¥15 Windows Script Host 无法找到脚本文件"C:\ProgramData\Player800\Cotrl.vbs”
- ¥15 matlab自定义损失函数
- ¥15 35114 SVAC视频验签的问题
- ¥15 impedancepy
- ¥15 求往届大挑得奖作品(ppt…)
- ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
- ¥50 浦育平台scratch图形化编程
- ¥20 求这个的原理图 只要原理图
- ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
- ¥20 微信的店铺小程序如何修改背景图