Redis实战之年会抽奖

2023-10-23 14:12
文章标签 实战 redis 抽奖 之年

本文主要是介绍Redis实战之年会抽奖,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言🔍

上一篇:Redis实战之微博点赞

本篇涉及相关命令:Sadd、Spop

示例基于SpringBoot 2.7.14

Sadd

Sadd 命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合。

返回值:被添加到集合中的新元素的数量,不包括被忽略的元素。

Spop

Spop 命令用于移除并返回集合中的一个随机元素。

示例🚀

年会抽奖就是分1、2、3等奖,再来一些安慰奖。比如说一等奖抽1个人,那从公司员工号中随机抽取一个,再将该号码剔除,也就是每个人最多一次中奖。

controller

/*** @author lonewalker*/
@RequestMapping("/redis")
@RestController
public class RedisController {/*** 初始化数据* @return 提示信息*/@GetMapping("/init")public String init(){return redisSetService.init();}/*** 抽奖* @return 用户id*/@GetMapping("/prizeDraw")public Integer prizeDraw(){return redisSetService.prizeDraw();}
}   

Service

/*** @author lonewalker*/
@Slf4j
@Service
public class RedisSetService {/***提前先把数据刷新到redis缓存中。*/public String init(){log.info("启动初始化..........");Boolean checkResult=RedisUtil.checkKey(RedisKey.PRIZE_KEY);if(!checkResult){//模拟加入工号  从DB查询Integer[] employees = new Integer[10];for (int i = 0; i < 10; i++) {employees[i] = i+1;}RedisUtil.setAdd(RedisKey.PRIZE_KEY,employees);}return "初始化数据完成";}public Integer prizeDraw(){String key = RedisKey.PRIZE_KEY;Object userId = RedisUtil.setPop(key);if (ObjectUtil.isNotNull(userId)){return (Integer) userId;}return 0;}

RedisUtil

/*** @author lonewalker*/
@Slf4j
@Component
public class RedisUtil {private static RedisTemplate<String, Object> redisTemplate;@Autowiredpublic void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {RedisUtil.redisTemplate = redisTemplate;}/*** 检查是否已存在key* @param key 键* @return true代表已存在*/public static Boolean checkKey(String key){try {return redisTemplate.hasKey(key);} catch (Exception e) {e.printStackTrace();return false;}}/*** 将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。* @param key     键* @param values  值* @return 被添加到集合中的新元素的数量,不包括被忽略的元素。*/public static Long setAdd(String key, Object... values) {try {return redisTemplate.opsForSet().add(key, values);} catch (Exception e) {e.printStackTrace();return 0L;}}/*** 用于移除并返回集合中的一个随机元素。* @param key 键* @return 被移除的随机元素。 当集合不存在或是空集时,返回 nil 。*/public static Object setPop(String key){try {return redisTemplate.opsForSet().pop(key);} catch (Exception e) {e.printStackTrace();return null;}}
}

常量

public class RedisKey {/*** 抽奖*/public static final String PRIZE_KEY = "prize";}

测试

抽到4号

就把4号剔除了

扩展🧲

Srandmember 命令用于返回集合中的一个随机元素。Srandmember 命令接受可选的 count 参数:

  • 如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。
  • 如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。

该操作和 Spop 相似,但 Spop 将随机元素从集合中移除并返回,而 Srandmember 则仅仅返回随机元素,而不对集合进行任何改动。

这篇关于Redis实战之年会抽奖的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/268369

相关文章

基于Canvas的Html5多时区动态时钟实战代码

《基于Canvas的Html5多时区动态时钟实战代码》:本文主要介绍了如何使用Canvas在HTML5上实现一个多时区动态时钟的web展示,通过Canvas的API,可以绘制出6个不同城市的时钟,并且这些时钟可以动态转动,每个时钟上都会标注出对应的24小时制时间,详细内容请阅读本文,希望能对你有所帮助...

Redis客户端工具之RedisInsight的下载方式

《Redis客户端工具之RedisInsight的下载方式》RedisInsight是Redis官方提供的图形化客户端工具,下载步骤包括访问Redis官网、选择RedisInsight、下载链接、注册... 目录Redis客户端工具RedisInsight的下载一、点击进入Redis官网二、点击RedisI

Redis实现RBAC权限管理

《Redis实现RBAC权限管理》本文主要介绍了Redis实现RBAC权限管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1. 什么是 RBAC?2. 为什么使用 Redis 实现 RBAC?3. 设计 RBAC 数据结构

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

Spring AI与DeepSeek实战一之快速打造智能对话应用

《SpringAI与DeepSeek实战一之快速打造智能对话应用》本文详细介绍了如何通过SpringAI框架集成DeepSeek大模型,实现普通对话和流式对话功能,步骤包括申请API-KEY、项目搭... 目录一、概述二、申请DeepSeek的API-KEY三、项目搭建3.1. 开发环境要求3.2. mav

Python与DeepSeek的深度融合实战

《Python与DeepSeek的深度融合实战》Python作为最受欢迎的编程语言之一,以其简洁易读的语法、丰富的库和广泛的应用场景,成为了无数开发者的首选,而DeepSeek,作为人工智能领域的新星... 目录一、python与DeepSeek的结合优势二、模型训练1. 数据准备2. 模型架构与参数设置3

Java实战之利用POI生成Excel图表

《Java实战之利用POI生成Excel图表》ApachePOI是Java生态中处理Office文档的核心工具,这篇文章主要为大家详细介绍了如何在Excel中创建折线图,柱状图,饼图等常见图表,需要的... 目录一、环境配置与依赖管理二、数据源准备与工作表构建三、图表生成核心步骤1. 折线图(Line Ch

Java使用Tesseract-OCR实战教程

《Java使用Tesseract-OCR实战教程》本文介绍了如何在Java中使用Tesseract-OCR进行文本提取,包括Tesseract-OCR的安装、中文训练库的配置、依赖库的引入以及具体的代... 目录Java使用Tesseract-OCRTesseract-OCR安装配置中文训练库引入依赖代码实

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.