GO微服务实战之红包系统

业务模型

在这里插入图片描述

2-3 红包数据库表结构讲解

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

红包序列

在这里插入图片描述

红包算法

在这里插入图片描述

红包算法逻辑6点要求

在这里插入图片描述
在这里插入图片描述

微信两倍平均算法

在这里插入图片描述
在这里插入图片描述

package main

import (
	"fmt"
	"math/rand"
	"time"
)

//二倍均值算法,count剩余个数,amount剩余金额
// DoubleAverage
func DoubleAverage(count, amount int64) int64 {
	//最小钱
	min := int64(1)

	if count == 1 {
		//返回剩余金额
		return amount
	}

	//计算最大可用金额,min最小是1分钱,减去的min,下面会加上,避免出现0分钱
	max := amount - min*count
	//计算最大可用平均值
	avg := max / count
	//二倍均值基础加上最小金额,防止0出现,作为上限
	avg2 := 2*avg + min
	//随机红包金额序列元素,把二倍均值作为随机的最大数
	rand.Seed(time.Now().UnixNano())
	//加min是为了避免出现0值,上面也减去了min
	x := rand.Int63n(avg2) + min

	return x
}


func main() {
	//初始10个红包, 10000分 = 100元钱
	count, amount := int64(10), int64(10000)
	//剩余金额
	remain := amount
	//验证红包算法的总金额,最后sum应该==amount
	sum := int64(0)
	//进行发红包
	for i := int64(0); i < count; i++ {
		x := DoubleAverage(count-i, remain)
		//金额减去
		remain -= x
		//发了多少钱
		sum += x
		//金额转成元
		fmt.Println(i+1, "=", float64(x)/float64(100))
	}
	fmt.Println()
	fmt.Println("总和 ", sum)
}

2-6 红包系统架构演进概述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3-2 代码架构之how-怎样来设计代码架构

在这里插入图片描述

五 业务开发

账户转账流程

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值