Set实战之京豆抽奖

京豆抽奖一般是采用redis的set集合来操作的,那为什么是set集合适用于抽奖呢?
1.set集合的特点是元素不重复 2.set集合支持随机读取
具体的技术方案是采用set集合的srandmember命令来实现,随机返回set的一个元素

数据准备:

@Component
public class JdTask {@Autowiredprivate RedisTemplate redisTemplate;public static final String PRIZE_KEY = "jd:goods";/***提前先把数据刷新到redis缓存中。*/@PostConstructpublic void init(){boolean bo=redisTemplate.hasKey(PRIZE_KEY);if(!bo){List<String> crowds=this.prize();crowds.forEach(t->redisTemplate.opsForSet().add(PRIZE_KEY,t));}}/*** 按一定的概率初始化奖品* 因为Set有不可重复的特点,所以要防止重复*/public List<String> prize() {List<String> list=new ArrayList<>();//10个京豆,概率10%for (int i = 0; i < 10; i++) {list.add("10-"+i);}//5个京豆,概率20%for (int i = 0; i < 20; i++) {list.add("5-"+i);}//1个京豆,概率60%for (int i = 0; i < 60; i++) {list.add("1-"+i);}//0个京豆,概率10%for (int i = 0; i < 10; i++) {list.add("0-"+i);}return list;}}

接口开发:

@RestController
@RequestMapping("/api/jd")
public class JdController {@Autowiredprivate RedisTemplate redisTemplate;@GetMapping(value = "/prize")public String prize() {String result = "";//随机取1次。String object = (String) redisTemplate.opsForSet().randomMember(JdTask.PRIZE_KEY);if (!StringUtils.isEmpty(object)) {//截取序列号 例如10-1int temp = object.indexOf('-');int no = Integer.valueOf(object.substring(0, temp));switch (no) {case 0:result = "谢谢参与";break;case 1:result = "获得1个京豆";break;case 5:result = "获得5个京豆";break;case 10:result = "获得10个京豆";break;default:result = "谢谢参与";}}return result;}
}

Redis数据结构Set实战之京豆抽奖相关推荐

  1. Redis数据结构Hash实战之淘宝短链接

    网址链接过长给用户不好的体验,缩短链接长度方便社交化传播,还能跟踪点击量和统计. 算法解析 生成a~z A~z 0~9的字符,后面有用 public static void main(String[] ...

  2. Redis数据结构Set应用场景--黑名单校验器、京东与支付宝抽奖、微博榜单与QQ群的随机展示、帖子点赞、关注与粉丝、微关系计算、HyperLogLog的入门使用

    Set应用场景 set命令使用 淘宝黑名单 一.黑名单过滤器业务场景分析 二 .解决的技术方案 三.SpringBoot+redis模仿实现校验器 京东京豆抽奖 一.京东京豆抽奖的业务场景分析 二.京 ...

  3. 《Redis实战》一1.2 Redis数据结构简介

    本节书摘来异步社区<Redis实战>一书中的第1章,第1.2节,作者: [美]Josiah L. Carlson(约西亚 L.卡尔森)译者: 黄健宏 责编: 杨海玲,更多章节内容可以访问云 ...

  4. redis 自减命令_Redis 实战 —— 04. Redis 数据结构常用命令简介

    字符串 P39 Redis 的字符串是一个有字节组成的序列,可以存储以下 3 种类型的值:字节串(byte string).整数.浮点数. 在需要的时候, Redis 会将整数转换成浮点数.整数的取值 ...

  5. AutoJS4.1.0实战教程---京东领京豆

    虽然给的少,但是咱也不放过将薅羊毛大业进行到底.其实有一天我也忘记了,喝酒误事啊,千秋大事一壶茶,万丈红尘三杯酒.少喝酒...看看截图,有图有真像是吧! 代码: auto.waitFor(); app ...

  6. 玩转Redis-京东签到领京豆如何实现

    <玩转Redis>系列文章主要讲述Redis的基础及中高级应用,文章基于Redis 5.0.4+.本文是<玩转Redis>系列第[8]篇,最新系列文章请前往公众号"z ...

  7. Redis入门到实战

    redis入门与实战 一.Nosql概述 1.为什么要用Nosql 1.1 单机 MySQL 的美好时代 来源博客(https://www.cnblogs.com/lukelook/p/1113520 ...

  8. 为了拿捏 Redis 数据结构,我画了 40 张图

    Redis 为什么那么快? 除了它是内存数据库,使得所有的操作都在内存上进行之外,还有一个重要因素,它实现的数据结构,使得我们对数据进行增删查改操作时,Redis 能高效的处理. 因此,这次我们就来好 ...

  9. 《Redis核心技术与实战》学习总结(1)

    [Redis]| 总结/Edison Zhou 0写在开头 作为Key/Value键值数据库,Redis的应用非常广泛.在之前多年的工作生涯中,我也只是关注了零散的技术点,没有对Redis建立起一套整 ...

最新文章

  1. ios app内嵌入http服务器
  2. HDOJ 5421 Victor and String 回文串自己主动机
  3. 每日一皮:上线前加了一个小特性,结果......
  4. wxWidgets:wxActiveXEvent类用法
  5. python的self
  6. Java并发(十九):final实现原理
  7. linux在mak时候出现错误,在使用yocto构建linux映像时出现“memfd戋create的静态声明跟随非静态声明”错误...
  8. [置顶] UDP协议---心德(1)
  9. CompletableFuture详解~applyToEither
  10. 分析模板方法设计模式
  11. 在storm中使用定时保存
  12. Matplotlib作业一
  13. matlab butter 低通,matlab butter 用法
  14. jquery监听html状态,jquery监听页面刷新
  15. Kubernetes CKA认证运维工程师笔记-Kubernetes存储
  16. npm报错Beginning October 4, 2021, all connections to the npm registry - including for package installa
  17. maven找不到,变小蜘蛛问题
  18. 脱离低级趣味- Python ‘\r‘, ‘\n‘, ‘\r\n‘ 的彻底理解
  19. 《黑马程序员》通讯录管理系统实战
  20. css直角线_css斜切角 斜边 倒角

热门文章

  1. 使用 TiDB Dashboard 诊断报告定位问题
  2. HTML+JavaScript为网页添一点小功能【尼尔机械纪元】
  3. MySQL 字符串截取SUBSTRING()函数
  4. 学习卷积神经网络后的一些心得
  5. 20个HTML5/CSS3超酷应用
  6. Java课程设计-小学生计算器
  7. Eclipse运行时概述1(运行时插件模型,首选项)
  8. 快速学Python,走个捷径~
  9. 【1】WIN10连接上了wifi,但显示无网络访问权限的解决方法
  10. 什么是限流及如何限流