Redis数据结构Set实战之京豆抽奖
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实战之京豆抽奖相关推荐
- Redis数据结构Hash实战之淘宝短链接
网址链接过长给用户不好的体验,缩短链接长度方便社交化传播,还能跟踪点击量和统计. 算法解析 生成a~z A~z 0~9的字符,后面有用 public static void main(String[] ...
- Redis数据结构Set应用场景--黑名单校验器、京东与支付宝抽奖、微博榜单与QQ群的随机展示、帖子点赞、关注与粉丝、微关系计算、HyperLogLog的入门使用
Set应用场景 set命令使用 淘宝黑名单 一.黑名单过滤器业务场景分析 二 .解决的技术方案 三.SpringBoot+redis模仿实现校验器 京东京豆抽奖 一.京东京豆抽奖的业务场景分析 二.京 ...
- 《Redis实战》一1.2 Redis数据结构简介
本节书摘来异步社区<Redis实战>一书中的第1章,第1.2节,作者: [美]Josiah L. Carlson(约西亚 L.卡尔森)译者: 黄健宏 责编: 杨海玲,更多章节内容可以访问云 ...
- redis 自减命令_Redis 实战 —— 04. Redis 数据结构常用命令简介
字符串 P39 Redis 的字符串是一个有字节组成的序列,可以存储以下 3 种类型的值:字节串(byte string).整数.浮点数. 在需要的时候, Redis 会将整数转换成浮点数.整数的取值 ...
- AutoJS4.1.0实战教程---京东领京豆
虽然给的少,但是咱也不放过将薅羊毛大业进行到底.其实有一天我也忘记了,喝酒误事啊,千秋大事一壶茶,万丈红尘三杯酒.少喝酒...看看截图,有图有真像是吧! 代码: auto.waitFor(); app ...
- 玩转Redis-京东签到领京豆如何实现
<玩转Redis>系列文章主要讲述Redis的基础及中高级应用,文章基于Redis 5.0.4+.本文是<玩转Redis>系列第[8]篇,最新系列文章请前往公众号"z ...
- Redis入门到实战
redis入门与实战 一.Nosql概述 1.为什么要用Nosql 1.1 单机 MySQL 的美好时代 来源博客(https://www.cnblogs.com/lukelook/p/1113520 ...
- 为了拿捏 Redis 数据结构,我画了 40 张图
Redis 为什么那么快? 除了它是内存数据库,使得所有的操作都在内存上进行之外,还有一个重要因素,它实现的数据结构,使得我们对数据进行增删查改操作时,Redis 能高效的处理. 因此,这次我们就来好 ...
- 《Redis核心技术与实战》学习总结(1)
[Redis]| 总结/Edison Zhou 0写在开头 作为Key/Value键值数据库,Redis的应用非常广泛.在之前多年的工作生涯中,我也只是关注了零散的技术点,没有对Redis建立起一套整 ...
最新文章
- ios app内嵌入http服务器
- HDOJ 5421 Victor and String 回文串自己主动机
- 每日一皮:上线前加了一个小特性,结果......
- wxWidgets:wxActiveXEvent类用法
- python的self
- Java并发(十九):final实现原理
- linux在mak时候出现错误,在使用yocto构建linux映像时出现“memfd戋create的静态声明跟随非静态声明”错误...
- [置顶] UDP协议---心德(1)
- CompletableFuture详解~applyToEither
- 分析模板方法设计模式
- 在storm中使用定时保存
- Matplotlib作业一
- matlab butter 低通,matlab butter 用法
- jquery监听html状态,jquery监听页面刷新
- Kubernetes CKA认证运维工程师笔记-Kubernetes存储
- npm报错Beginning October 4, 2021, all connections to the npm registry - including for package installa
- maven找不到,变小蜘蛛问题
- 脱离低级趣味- Python ‘\r‘, ‘\n‘, ‘\r\n‘ 的彻底理解
- 《黑马程序员》通讯录管理系统实战
- css直角线_css斜切角 斜边 倒角