架构图
发红包
1.为了减轻服务器端压力,在客户端对红包金额数值进行拆分
2.用算法为每个红包加一个唯一标识id。此处我采用的是uuid(雪花算法)+ip+时间戳
3.请求通过nginx分发到各个服务器。
4.服务器把数据双写到数据库中。
5.服务器同时也把数据双写写入redis中。
抢红包
1.抢红包请求通过nginx分发到各个服务器。
2.双写到同一个消息队列中一个个处理。
3.将数据双写入同一个redis中(此时,便已经会返回你抢到了多少钱,但是真正多少钱此时还没有同步到数据库中)
4.每过一段时间便会把redis中的数据同步到数据库中。
5.返回发红包时客户端拆分成的一份金额。
如果没有同步到数据库那我查看到的金额是怎么呢?
1.如果并发不高会很快同步到数据库
2.如果并发高的情况下,会先在客户端同步假数据显示,但是这个金额依旧可以操作,客户端会帮你进行相应的处理。
为什么使用nginx?
nginx用C++写的,apache用java写,会慢一点
为什么使用redis?
1.redis的抗并发能力比数据库好很多倍。
2.存redis相当于存缓存,增删改查都很快。
为什么双写?
有备份。如果有一个崩溃,另外一个可以继续使用。