Python微信发红包编码案例 微信发红包的架构模式

  • A+
所属分类:营销技巧

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/env <a class="st_tag internal_tag" title="Posts tagged with Python" href="https://www.jiloc.com/tag/python" rel="tag">python</a>
# 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升级剩余金额和红包数量。

 

红包怎样进库入帐?

 

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

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: