红包雨架构的设计汇总

news/2024/12/2 15:57:55/

一 微服务总体架构

1.1 微服务总体架构

1.2 红包雨的流程

1.3 发红包的内容

1.3.1 概述流程

1.发红包-》抢红包。

1.所有人签到的金额之和等于红包总金额。2.每个人至少抢到一分钱;3.保证所有人抢到金额的几率相等。

1.3.2 拆分红包通用流程算法

其中拆红包最为关键,设计的算法是:二倍均值算法。

二倍均值算法:剩余的余额M,剩余的人数N,每次抢到红包数=随机区间(0,(M/N)*2)

这个公式:保证每次随机金额是均值相等的,不会因为抢红包的先后顺序造成不公平。这句话不理解耶???

package com.ljf.redis.redpackage;import java.util.Arrays;
import java.util.Random;/*** @ClassName: TwoAvgSuanFa* @Description: TODO* @Author: admin* @Date: 2023/07/21 10:20:24 * @Version: V1.0**/
public class TwoAvgSuanFa {public static void main(String[] args) {Integer[] integers= sendAvgPackage(100,5);System.out.println(""+ Arrays.toString(integers));}public static Integer[] sendAvgPackage(int totalMoney,int redPackagNum){Integer[] rpNumberArrays=new Integer[redPackagNum];int useMoney=0;for(int i=0;i<redPackagNum;i++){if(i==redPackagNum-1){rpNumberArrays[i]=totalMoney-useMoney;}else {int avgMoney=((totalMoney-useMoney)/(redPackagNum-i))*2;System.out.println("avgMoney:"+avgMoney);rpNumberArrays[i]=1+new Random().nextInt(avgMoney-1);}useMoney=useMoney+rpNumberArrays[i];}return rpNumberArrays;}
}

结果:

1.3.3 红包雨的架构流程

1.发红包

1.按照金额M,红包人数N,使用二倍均值法,将M分成N个子红包。使用redis的list数据结构进行存储。

逻辑

2.抢红包

1.从redis的红包池list中使用lpop命令进行取出数据消费,且和用户进行绑定,在redis中使用hash结构记录抢红包的记录。

2.每次抢红包前从redis的 hash结构中查询是否已经存在抢红包记录,无则抢,有则不让再抢。

 1.3.4  红包雨的v2版本

待完善....


http://www.ppmy.cn/news/976664.html

相关文章

java开发岗位简历模板

Garry 1xx-xxxx-xxxx Java开发、数据库设计、脚本编写 xxxx592.com 求职意向 Java工程师 专业技能 c, oracle, sql server, mysql, javascript 熟练 java认证考试 初级程序员 全国计算机软件技术资格与水平考试 助理工程师 windows系统, linux系统 熟练 大学英…

MySQL 读写分离

目录 一、什么是读写分离&#xff1f; 二、为什么要读写分离呢&#xff1f; 三、什么时候要读写分离&#xff1f; 四、主从复制与读写分离 五、MySQL 读写分离原理 六、企业 使用MySQL 读写分离场景 1&#xff09;基于程序代码内部实现 2&#xff09;基于中间代理层实现…

华为鸿蒙HarmonyOS 4定档8月;ChatGPT之父的加密货币正式上线;微软必应聊天将推出重新生成答案功能|极客头条

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&…

echarts自定义tooltip,给tooltip增加百分号%

1.formatter为回调函数&#xff1a; 支持返回 HTML 字符串或者创建的 DOM 实例。 (params: Object|Array, ticket: string, callback: (ticket: string, html: string)) > string | HTMLElement | HTMLElement[] 在 trigger 为 ‘axis’ 的时候&#xff0c;或者 tooltip 被…

云服务器远程nacos服务注册失败/不健康Client not connected, current status:STARTING

文章目录 Nacos报错docker安装不用 docker安装 Nacos报错 docker安装 使用docker在云服务器安装Nacos之后出现Client not connected, current status:STARTING 使用docker 安装之后需要添加映射端口 docker run -e JAVA_OPTS"-Xms256m -Xmx256m"-e MODEstandalone…

使用langchain与你自己的数据对话(二):向量存储与嵌入

之前我以前完成了“使用langchain与你自己的数据对话(一)&#xff1a;文档加载与切割”这篇博客&#xff0c;没有阅读的朋友可以先阅读一下&#xff0c;今天我们来继续讲解deepleaning.AI的在线课程“LangChain: Chat with Your Data”的第三门课&#xff1a;向量存储与嵌入。 …

【机器学习】支持向量机SVM入门

优化目标 相较于之前学习的线性回归和神经网络&#xff0c;支持向量机&#xff08;Supprot Vector Machine&#xff0c;简称SVM&#xff09;在拟合复杂的非线性方程的时候拥有更出色的能力&#xff0c;该算法也是十分经典的算法之一。接下来我们需要学习这种算法 首先我们回顾…

Java设计模式之观察者(Observer)模式

观察者&#xff08;Observer&#xff09;模式可以在多个对象之间建立一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都会得到通知。 什么是观察者模式 观察者模式&#xff08;Observer pattern&#xff09;是一种非常常用的设计…