业务场景 基于mysql+redis的抢红包活动业务场景
目录
1. 活动的配置
2. 触发抢红包动作时,有4台机器并行处理抢红包业务
1. 活动的配置
抢红包可以支持3种类型
- 固定的总金额,固定的红包数,每个红包金额随机,但总和必须等于总金额(总计100元,10个红包-二倍均值算法)
- 指定每一个红包的金额,以及红包个数(5个1元,6个2元,7个3元...)
- 指定总金额,以及单个红包金额的上下限(资金池100元,每个红包1-2元)
每个人可以抢的次数有以下两种情况
- 一人一次
- 一人多次
完成配置后
- 数据库中生成一条活动信息记录(活动id+活动开始时间+活动结束时间+每个人可抢次数),以及若干条红包信息记录(红包id+归属活动id+是否经redis处理标记位+归属人)
- 以活动id作为key,在redis中申请一个list作为队列,取20条红包信息记录使用lpush加入redis队列
- 以活动id+"info"作为key,在redis中申请一个hash,并把活动信息存入(活动id+活动开始时间+活动结束时间+每个人可抢次数)
2. 触发抢红包动作时,有4台机器并行处理抢红包业务
客户端发起请求(时间戳+用户手机号+参与活动id)
- 每台机器尝试获取redis的分布式锁,基于stringRedisTemplate.putIfAbsent,并设置超时时间为10s防止死锁
- 若每人只允许抢一次,可以考虑适用布隆过滤器
- 若每人允许抢多次,则:使用redisTemplate.opsForHash.putIfAbsent,key为活动id+“info”,field为用户手机号,value为用户可抢次数
- 若返回true,表示该用户还未抢过
- 使用lpop获取redis队列中的元素(红包id+红包信息)
- 使用redisTemplate.opsForHash.increment,key为活动id+“info”,field为用户手机号,delta为-1(用户剩余可抢次数-1)
- 直接返回客户端成功,并通过rocketMq异步发送手机号+红包id,更新数据库
- 若返回false,则说明该用户已经抢过一次,获取用户剩余可抢次数
- 若>0,说明该用户仍可以抢,重复3.1.1步骤
- 若<=0,说明该用户不可以抢了,直接返回客户端失败
- 若返回true,表示该用户还未抢过
- 使用llen判断redis中队列长度,若<10,则重新查询20条库表中redis处理标记位为空的记录,使用lpush加入redis队列
- 释放分布式锁
业务场景 基于mysql+redis的抢红包活动业务场景相关推荐
- 如何基于MySQL及Redis搭建统一的kv存储服务 | 秦波
一.MySQL+Redis常用部署方式 1.1 拓扑 1.2 特点 业务层通过双写同时写MySQL及Redis.读通常在Redis,若读取不到,则从MySQL读取,然后将数据同步到Redis,Re ...
- 来个硬货——长文解读:基于业务场景的MySQL千万级大表优化
千万级大表如何优化,这是一个很有技术含量的问题,通常我们的直觉思维都会跳转到拆分或者数据分区,在此我想做一些补充和梳理,想和大家做一些这方面的经验总结,也欢迎大家提出建议. 从一开始脑海里开始也是火光 ...
- 基于springboot+redis+bootstrap+mysql开发一套属于自己的分布式springcloud云权限架构(七)【权限架构生产者(数据字典)】
在我们的编码中我们经常会存放一些静态常量,而这些静态变量我们通常都是写死的,如果我们需要改变这些静态变量的值那么我们必须要修改代码,并重新发布程序,这很明显很不符合我们现实中的业务场景,我们现实中的业 ...
- Redis核心数据结构List应用场景-商品列表、缓存击穿、PV阅读量、抢红包、推送帖子、普通分布式锁、Redis可重入锁与红锁
List应用场景 Redis之List 一. Redis list命令实战 二.商品列表 高并发的淘宝聚划算实现技术方案 SpringBoot+Redis实现商品列表功能 二.缓存击穿 什么是缓存击穿 ...
- 什么业务场景适合使用Redis?
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言 ...
- 解读:在什么业务场景适合使用Redis?
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言 ...
- B2C商城项目源码,基于Java开发的高可用分布式B2C商城系统,Java+Spring MVC+Dubbo+Zookeeper+MySQL+Redis+FastDFS+Nginx+Solr
目录 前言 B2C商城-AIYOU 一.项目总体架构 二.系统软硬件设施总体规划 1.系统服务规划 2.应用服务规划 3.应用系统域名规划 三.系统运行环境构建 四.项目数据库创建 五.项目拉取 六. ...
- MySQL 和 Redis 的区别以及应用场景
目录 一.mysql 和 redis 的区别 1. 数据类型 2. 本质区别 二.redis 优缺点及使用场景 1. 使用redis有哪些好处? 2. redis 相比memcached 有哪些优势? ...
- 基于redis实现抢红包功能(包括余额退回处理)
本文将讲述使用redis实现抢红包功能,采用发红包时将红包拆好存储,解决红包金额平衡问题(两种算法).解决超发现象.将数据通过消息队列传递给另一个服务写入数据库,现阶段不考虑redis宕机的情况. - ...
最新文章
- Python3中装饰器介绍
- 苏大JAVA题库_苏州大学Java程序设计课程试卷含答案(B)
- phpword 模板 多页_高中数学:各题型答题模板,吃透,灵活运用数学公式,解题更快!...
- 最小可行产品是什么_无论如何,“最小可行产品”到底意味着什么?
- Beyond Compare 4
- 从1.5k到18k, 一个程序员的5年成长之路 2019-03-15
- 回顾2017系列篇(二):移动端APP设计趋势
- 计算机c语言知识点txt,计算机二级C语言(重要知识点)
- 创意十足!25个酷炫的服饰行业网站设计
- jquery 弹出层
- python3连接redis
- 红外接收头图片_红外接收头引脚定义图解
- Zhuperb!朱婷登顶知名排球网站年度搜索热度榜
- qt 获取用户缩放,Qt-如何创建随窗口缩放并保持纵横比的图像?
- 《 没有业绩怎么写好年终总结.ppt 》
- geoserver样式(SLD方式)—— 图层元素在不同比例尺显示不同样式
- 赛百味的中英文菜单对照
- BLE_BQB Test_Intermodulation Performance, uncoded data at 1 Ms/s_RF-PHY/RCV/BV-05-C
- 网易2017春招 魔力手环 矩阵快速幂
- 看这篇就够了!能源企业数字化升级,推动绿色低碳发展
热门文章
- redis的哨兵模式测试
- 软件项目管理 8.1.软件质量基本概念
- 【机器学习】基于A股新闻共现网络的股票收益分析
- python还是c++量化_从Python到C++,对量化回测的一点思考
- css伪类last,css 伪类:last-child等不起作用(示例代码)
- 一款轻量级项目工时统计系统,源码分享
- Latent Dirichlet Allocation (LDA)
- Java中 Controller、Service 、Dao/Mapper层的区别
- Python安装教程(Windows10)
- 字符串的模式匹配(KMP)算法