python 发红包import random用redenv,Python微信发红包编码案例 微信发红包的架构模式 - push博客...

Python手机微信红包优化算法案例

#!/usr/bin/env python

# coding: utf-8

import random

# m : 红包个数

# n : 红包人数

# packet : 本次抢到的金额 , 所有金额以分为计算

def redEnvelope(m,n):

remain = m*100 #剩余金额

nn = n #剩余人数

for i in range(1,n):

if remain == 0 :

print('已经全部发完了')

else :

packet = random.randint(1,int(remain/nn*2))

nn -= 1

remain -= packet

print('第%d位成员红包的金额为%.2f元 , 余额为%.2f , 剩余%d人未领红包'%(i,packet/100,remain/100,nn))

print('最后一个成员红包金额为%.2f元'%(remain/100))

Python启用方式

redEnvelope(100,4)

运作結果

第1位成员红包的金额为45.65元 , 账户余额为54.35 , 剩余3人未领红包

第2位成员红包的金额为16.10元 , 账户余额为38.25 , 剩余2人未领红包

第3位成员红包的金额为20.98元 , 账户余额为17.27 , 剩余1人未领红包

最后一个成员红包金额为17.27元

概述:2014年手机微信红包应用数据库查询抵抗全部总流量,2015年应用cache抗总流量。

手机微信的金额何时算?

答:手机微信金额是拆的那时候即时算出去,并不是事先分派的,选用的是纯运行内存测算,不用费用预算室内空间储存。。

采用即时测算金额的考虑到:费用预算必须占储存,即时高效率很高,费用预算才高效率低。

实用性:为何本来抢到红包,打开后发觉沒有?

答:2014年的红包一点开就了解金额,分2次实际操作,先抢到金额,随后再转帐。

2015年的红包的拆和抢是分离出来的,必须点2次,因而会出現抢到红包了,但打开后告之红包早已被领完的情况。进到到第一个网页不意味着抢到,只表达那时候红包也有。

分派:红包里的金额咋算?为何出現每个红包金额相距挺大?

答:任意,信用额度在0.01和剩余均值*2中间。

比如:发100元钱,一共10个红包,那麼均值是10元钱一个,那麼传出来的红包的信用额度在0.01元~20元中间起伏。

当前边3个红包一共被领了40元钱时,剩余60元钱,一共7个红包,那麼这7个红包的信用额度在:0.01~(60/7*2)=17.14中间。

留意:这儿的优化算法是每被抢一个后,剩余的会再度实行上边的那样的优化算法(Tim教师也感觉所述优化算法太繁杂,不知道根据哪些的考虑到)。 那样算下去,会超出最初的所有金额,因而来到最终面假如不足那么算,那麼会采用以下优化算法:确保剩余客户能取得最少1一分钱就可以。 假如前边的人手气好不太好,那麼后边的账户余额越大,红包信用额度也就会越多,因而具体几率一样的。

红包的设计方案

答:手机微信从qq钱包获取金额信息郭莱,转化成数量/红包种类/金额放进redis群集里,app端将红包ID的恳求放进恳求序列中,假如发觉超出红包的数量,立即回到。依据红包的裸祭解决取得成功获得令牌恳求,则由qq钱包开展一致性启用,根据像BTC一样,两侧储存交易明细,买卖后交到第三方服务项目财务审计,假如交易方式中出現不一致就强制性重归。

发性解决:红包怎样测算被抢完?

答:cache会抵御失效恳求,将失效的恳求过虑掉,具体进到到后台管理的量并不大。cache纪录红包数量,原子操作开展数量下降,到0表达被抢空。qq钱包依照20万笔每秒钟入帐提前准备,但具体还不上8万每秒钟。

通怎样维持8w每秒钟的载入?

答:多主sharding,水准拓展设备。

据容积是多少?

答:一个红包只占一条纪录,有效期限只能几日,因而不用过多室内空间。

询红包分派,压力太大不?

答:抢到红包的总数和红包都会一条cache纪录上,沒有很大的查寻工作压力。

一个红包一个序列?

答:沒有序列,一个红包一条信息,信息上带一个电子计数器字段名。

有木有从信息上证实每一红包的几率是否平等?

答:并不是絕對平等,就是说一个简易的拍脑壳优化算法。

拍脑壳优化算法,是否会出現2个最好?

答:会出現金额一样的,可是手气好最好只能一个,先抢到的哪个最好。

每领一个红包就升级信息么?

答:每抢到一个红包,就cas升级剩余金额和红包数量。

红包怎样进库入帐?

数据库查询会累积早已领到的数量与金额,插进一条领到纪录。入帐则是后台管理多线程实际操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值