Redis实现基础随机抽奖及存储 【IDEA实现】【大作业】

·题目内容:

请实现以下抽奖的需求:

  1. 有30个候选人进行抽奖
  2. 抽出一等奖1名,二等奖3名,三等奖5名
  3. 把得奖名单分别按一、二、三等奖存储起来
  4. 同一人只能获奖一次
  5. 控制台打印得奖名单

基本要求为:

  1. 利用Redis类型的特性,进行选型
  2. 代码排版良好,阅读性强
  3. 使用编程语言结合Redis实现
  4. 命令使用准确
  5. 得奖名单存储规范

·需求分析:

请实现以下抽奖的需求:

  1. 有30个候选人进行抽奖,同一人只能获奖一次,控制台打印得奖名单
    分析: 使用redis中的set数据结构存储30名候选人,利用set集合存储的随机性,可利用set集合中的spop方法实现随机取出候选人且永不重复的功能——即随机抽奖。
  2. 抽出一等奖1名,二等奖3名,三等奖5名
    分析: 利用if条件判断,规定一等奖抽出1名,二等奖抽出3名,三等奖抽出5名
  3. 把得奖名单分别按一、二、三等奖存储起来
    分析: 使用redis中的hashmap数据结构,利用hashmap中的hset方法和hget方法可以实现存储与读取获奖者信息。同时hashmap的的hget方法只会获取值,不会因为取出而无法进行二次查询。

具体代码:

package com.company;import redis.clients.jedis.*;
import java.util.ArrayList;public class Main {final static String host = new String("localhost");final static int port = 6379;final static String Lottery = "0233Redis:Sets:id:lottery";final static String Winner = "0233Redis:HashMap:Winner:id";final static String Winner_First = "0233Redis:HashMap:id01:01";final static String Winner_Second = "0233Redis:HashMap:id02:02";final static String Winner_Third = "0233Redis:HashMap:id03:03";static Jedis jedis = new Jedis(host,port);public static void main(String[] args) {//CleanAll();SetName(30);GetName();//ShowAll();/*Redis变量命名规范:1) 第一段放置项目名或缩写 如 project1) 第二段把表名转换为key前缀 如, user:2) 第三段放置用于区分区key的字段,对应mysql中的主键的列名,如userid3) 第四段放置主键值,如18,16*/}//设定候选人static void SetName(int x){for(int i=1;i<=x;i++){jedis.sadd(Lottery,"候选人"+Integer.toString(i));}System.out.println("候选人登记完毕!");}//抽奖过程static void GetName(){//temp_1:记录一二三等奖的中文形式//temp_2:接收一个从set中取出的随机名字//temp_4:记录获奖组的key值//y:规定每一组获奖者的人数System.out.println("所有参加抽奖的候选人"+jedis.smembers(Lottery));String temp_1,temp_2,temp_4 = null;int y;//创建一个数组来存储每组获奖者ArrayList arr = new ArrayList(5);for(int j=1;j<=3;j++){if(j==1){temp_1="一等奖";y=1;temp_4=Winner_First;}else if(j==2){temp_1="二等奖";y=3;temp_4=Winner_Second;}else {temp_1="三等奖";y=5;temp_4=Winner_Third;}System.out.print(temp_1+"获得者是:");for(int i=0;i<y;i++){temp_2 = jedis.spop(Lottery);if(temp_2==null) {System.out.println(temp_1+"数据为空!");return ;}arr.add(temp_2);System.out.print(temp_2+" ");}//用hashmap存储每一组获奖者jedis.hset(Winner,temp_4, String.valueOf(arr));//每存储完一组获奖者,数组都需要清空,来记录下一组获奖者arr.clear();System.out.print("\n");}}//清空所有数据结构,测试用static void CleanAll(){jedis.del(Lottery);jedis.del(Winner);System.out.println("清理完成");}//展示存储情况,测试用static void ShowAll(){//temp_3:表示从链表中接收的弹出的数据//temp_5:接收一二三等奖链表的名称String temp_3,temp_5;for(int j=1;j<=3;j++){if(j==1){temp_5=Winner_First;System.out.println("一等奖获取者是:");}else if(j==2){temp_5=Winner_Second;System.out.println("二等奖获取者是:");}else {temp_5=Winner_Third;System.out.println("三等奖获取者是:");}System.out.println(jedis.hget(Winner,temp_5));}}
}

代码还不够美观,方法都是静态的,被老师批过,其他没啥问题

手动高亮:仅供参考学习,请勿照搬
欢迎讨论


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部