您现在的位置是:网站首页> 编程资料编程资料
Redis 抽奖大转盘的实战示例_Redis_
2023-05-27
457人已围观
简介 Redis 抽奖大转盘的实战示例_Redis_
1. 项目介绍
这是一个基于Spring boot + Mybatis Plus + Redis 的简单案例。
主要是将活动内容、奖品信息、记录信息等缓存到Redis中,然后所有的抽奖过程全部从Redis中做数据的操作。
大致内容很简单,具体操作下面慢慢分析。
2. 项目演示
话不多说,首先上图看看项目效果,如果觉得还行的话咱们就来看看他具体是怎么实现的。
3. 表结构
该项目包含以下四张表,分别是活动表、奖项表、奖品表以及中奖记录表。具体的SQL会在文末给出。
4. 项目搭建
咱们首先先搭建一个标准的Spring boot 项目,直接IDEA创建,然后选择一些相关的依赖即可。
4.1 依赖
该项目主要用到了:Redis,thymeleaf,mybatis-plus等依赖。
org.springframework.boot spring-boot-starter-data-redis org.springframework.boot spring-boot-starter-thymeleaf org.springframework.boot spring-boot-starter-web mysql mysql-connector-java runtime org.springframework.boot spring-boot-starter-test test com.baomidou mybatis-plus-boot-starter 3.4.3 com.baomidou mybatis-plus-generator 3.4.1 com.alibaba fastjson 1.2.72 com.alibaba druid-spring-boot-starter 1.1.22 org.apache.commons commons-lang3 3.9 org.projectlombok lombok 1.18.12 org.apache.commons commons-pool2 2.8.0 org.mapstruct mapstruct 1.4.2.Final org.mapstruct mapstruct-jdk8 1.4.2.Final org.mapstruct mapstruct-processor 1.4.2.Final joda-time joda-time 2.10.6
4.2 YML配置
依赖引入之后,我们需要进行相应的配置:数据库连接信息、Redis、mybatis-plus、线程池等。
server: port: 8080 servlet: context-path: / spring: datasource: druid: url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver initial-size: 30 max-active: 100 min-idle: 10 max-wait: 60000 time-between-eviction-runs-millis: 60000 min-evictable-idle-time-millis: 300000 validation-query: SELECT 1 FROM DUAL test-while-idle: true test-on-borrow: false test-on-return: false filters: stat,wall redis: port: 6379 host: 127.0.0.1 lettuce: pool: max-active: -1 max-idle: 2000 max-wait: -1 min-idle: 1 time-between-eviction-runs: 5000 mvc: view: prefix: classpath:/templates/ suffix: .html # mybatis-plus mybatis-plus: configuration: map-underscore-to-camel-case: true auto-mapping-behavior: full mapper-locations: classpath*:mapper/**/*Mapper.xml # 线程池 async: executor: thread: core-pool-size: 6 max-pool-size: 12 queue-capacity: 100000 name-prefix: lottery-service-
4.3 代码生成
这边我们可以直接使用mybatis-plus的代码生成器帮助我们生成一些基础的业务代码,避免这些重复的体力活。
这边贴出相关代码,直接修改数据库连接信息、相关包名模块名即可。
public class MybatisPlusGeneratorConfig { public static void main(String[] args) { // 代码生成器 AutoGenerator mpg = new AutoGenerator(); // 全局配置 GlobalConfig gc = new GlobalConfig(); String projectPath = System.getProperty("user.dir"); gc.setOutputDir(projectPath + "/src/main/java"); gc.setAuthor("chen"); gc.setOpen(false); //实体属性 Swagger2 注解 gc.setSwagger2(false); mpg.setGlobalConfig(gc); // 数据源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl("jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true"); dsc.setDriverName("com.mysql.cj.jdbc.Driver"); dsc.setUsername("root"); dsc.setPassword("123456"); mpg.setDataSource(dsc); // 包配置 PackageConfig pc = new PackageConfig(); // pc.setModuleName(scanner("模块名")); pc.setParent("com.example.lottery"); pc.setEntity("dal.model"); pc.setMapper("dal.mapper"); pc.setService("service"); pc.setServiceImpl("service.impl"); mpg.setPackageInfo(pc); // 配置模板 TemplateConfig templateConfig = new TemplateConfig(); templateConfig.setXml(null); mpg.setTemplate(templateConfig); // 策略配置 StrategyConfig strategy = new StrategyConfig(); strategy.setNaming(NamingStrategy.underline_to_camel); strategy.setColumnNaming(NamingStrategy.underline_to_camel); strategy.setSuperEntityClass("com.baomidou.mybatisplus.extension.activerecord.Model"); strategy.setEntityLombokModel(true); strategy.setRestControllerStyle(true); strategy.setEntityLombokModel(true); // 公共父类 // strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController"); // 写于父类中的公共字段 // strategy.setSuperEntityColumns("id"); strategy.setInclude(scanner("lottery,lottery_item,lottery_prize,lottery_record").split(",")); strategy.setControllerMappingHyphenStyle(true); strategy.setTablePrefix(pc.getModuleName() + "_"); mpg.setStrategy(strategy); mpg.setTemplateEngine(new FreemarkerTemplateEngine()); mpg.execute(); } public static String scanner(String tip) { Scanner scanner = new Scanner(System.in); StringBuilder help = new StringBuilder(); help.append("请输入" + tip + ":"); System.out.println(help.toString()); if (scanner.hasNext()) { String ipt = scanner.next(); if (StringUtils.isNotEmpty(ipt)) { return ipt; } } throw new MybatisPlusException("请输入正确的" + tip + "!"); } }
4.4 Redis 配置
我们如果在代码中使用 RedisTemplate 的话,需要添加相关配置,将其注入到Spring容器中。
@Configuration public class RedisTemplateConfig { @Bean public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate
4.5 常量管理
由于代码中会用到一些共有的常量,我们应该将其抽离出来。
public class LotteryConstants { /** * 表示正在抽奖的用户标记 */ public final static String DRAWING = "DRAWING"; /** * 活动标记 LOTTERY:lotteryID */ public final static String LOTTERY = "LOTTERY"; /** * 奖品数据 LOTTERY_PRIZE:lotteryID:PrizeId */ public final static String LOTTERY_PRIZE =
点击排行
本栏推荐
