Redis解决秒杀中一人一单问题

前言在上一篇,通过实例演示了在高并发场景下多人抢购优惠券的超卖问题,并且利用redis+lua解决了超卖问题,但是一人只能抢一单的问题是否还在呢?一人抢多单压测可以发现,在经过改造时候,虽然解决了超卖问题,但是一人可以抢购多单的问题仍然存在为什么会存在这个问题呢?简单分析下面这段代码,扣减库存和下单操作分割为2步,在多线程并发抢购时,第二步判断用户是否抢过和下面的第三步,第四步都是隔开的,假设多个线程都走到第二步,这时候发现当前1111这个用户还没有抢过,继续走到第二步时候,当库存不为0时,
分类: 其他 发布时间: 03-09 09:43 阅读次数: 0

rabbitmq实现秒杀中订单流量削峰

前言在Redis秒杀功能设计与实现一篇中,我们使用redis实现了商品的秒杀抢购功能,在当前的设计中,只涉及到商品抢购,即用户锁定名额,并将成功抢购到的用户信息保存到redis中了但是一个完整的抢购流程在业务流程中看到,包括锁定名额和下单,在超卖问题分析这篇中,我们是将抢购与订单放在一起进行的仔细分析这样的做法,在高并发的抢购环境下,这样做是欠妥的,因为使用了分布式锁,尽管时间很短,但分布式锁的存在仍然会耗费不少性能而且从系统的整体设计层面中,在微服务架构中,如果像双11那样瞬时订单量特别大的情况下
分类: 其他 发布时间: 03-09 09:43 阅读次数: 0

Redis好友关注设计与实现

前言
分类: 其他 发布时间: 03-09 09:43 阅读次数: 0

Redis签到功能设计与实现

前言在很多社交类APP中,签到功能似乎成了标配,签到功能一方面可以促进APP中用户的活跃度,而且可以绑定一些促销活动刺激用户消费等关联功能设计实现与分析但从此功能的实现上来说,似乎并不是太难,我们完全可以通过创建一个如下简单的表实现和上一篇一样的思路,设想你的APP的用户量是像QQ或微信那种量级的,每天签到的人数加起来该有多少?你的这张表够不够承载一年365天这么庞大用户体量的数据就算可以借助mysql的索引功能加速查询,但是总有一天,该表所在的服务器会有撑不住的一天,而使用那些分库分表之类的
分类: 其他 发布时间: 03-09 09:42 阅读次数: 0

Redis积分排行榜设计与实现第一篇

前言越来越多的社交类APP为了提升应用的用户活跃度,刺激用户消费,采取签到功能,通过签到进行一系列的促销活动,比如签到赠送积分,通过积分可以兑换相应的礼品,购物抵扣券之类的在某些APP上,有一种积分排行榜的功能,或者游戏APP应用上面也有类似的得分排行榜,这个排行榜一定程度上对玩家来说,如果能上榜,也是不错的成就感以签到送积分为例简单分析下,当前账号绑定的信息,每天签到一次,就往一张签到表中插入一条数据,同时在积分表增加一条数据,最终根据业务需要,展示排行前10或者20的积分用户关于签到 -&gt
分类: 其他 发布时间: 03-09 09:42 阅读次数: 0

Redis积分排行榜设计与实现第二篇

前言在上一篇,讨论了积分排行榜基于mysql的实现方案,并且在文章的末尾我们抛出了一个问题,就是当用户量越来越大的时候,性能的问题将会成为此功能的瓶颈,因此需要寻找更好的解决方案在Redis中,提供了一个叫做SortedSet的数据结构,该数据结构有2个特性,有序性和数据的可压缩性,利用这2个特点,结合上篇分析到的积分排行的业务场景,下面来尝试下如何利用Redis的这种数据结构来实现topN的积分排行榜吧实现思路用户签到插入积分时,同时插入到zset中获取topN的排行信息时候,直接从zset中
分类: 其他 发布时间: 03-09 09:42 阅读次数: 0

RabbitMq分布式事务解决方案第一篇

前言微服务架构下,相比单机事务,一个比较复杂的地方在于,在分布式环境下,面对的是分布式事务,分布式事务整体来说无法严格遵循传统的ACID4个特性,而只能根据系统的业务指标,通常满足可用性,和最终一致性,这也是不少互联网产品的实践结果的选择在分布式事务一章中,探讨了有关常用分布式事务的几种解决方案,可以依据自己所在项目的特点,有选择的使用,比如对数据的一致性要求严格而对并发数可容忍的,可以考虑使用seata解决,对并发要求高,同时对数据一致性的要求也比较高的,可以考虑使用rocketMq事务消息下面要介
分类: 其他 发布时间: 03-09 09:42 阅读次数: 0

创建SpringCloud父工程

SpringCloud之整体聚合父工程Project1.New Project创建父工程pom文件报错解决方法为导入依赖,暂时不用做这一步,下面还会涉及到<!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-project-info-reports-plugin --><dependency> <groupId>org.apache.maven.plug
分类: 其他 发布时间: 03-09 09:41 阅读次数: 0

微服务模块的创建

1、建module在父工程中新建一个module,具体操作不再赘述这里需要注意的地方就在于parent的选择,默认没有选上,需要勾选上Maven,创建完毕后在父工程的pom文件中就会看到自动生成了modules标签。2、改POM由于父工程中已经指定了相关的gav(groupId,version,artifactId),所以子模块中的pom文件会有很多地方不需要写version以及groupId<?xml version="1.0" encoding="UTF-8"?>
分类: 其他 发布时间: 03-09 09:41 阅读次数: 0

IDEA提取公共代码模块

1、创建公共代码模块2、更改POM文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://ma
分类: 其他 发布时间: 03-09 09:41 阅读次数: 0

Devtools&JRebel 热部署

目的:代码改动后自动重启生效,不用每次手动点击运行,这里工程以SpringCloud工程为例Devtools1、添加devtools依赖在子module的POM文件添加依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runt.
分类: 其他 发布时间: 03-09 09:41 阅读次数: 0

服务注册中心(Eureka)

1、简介Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。2、组成Eureka包含两个组件:Eureka Server和Eureka Client。Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这
分类: 其他 发布时间: 03-09 09:40 阅读次数: 0

在使用Eureka的时候,@LoadBalanced注解无效,无法通过服务名获取注册中心服务的URL的问题记录

1、工程介绍2、问题描述我的消费者和Eureka集群都搭建成功,测试没有问题,问题出在服务提供者集群的时候,开始我只搭建一个Payment的时候,对于消费者访问的时候就是指定的我的8001Payment,如图然后我着手搭建第二个Payment8003,然后他的application name和8001保持一致,也可以看见Eureka管理界面是都启动成功了的其中CloudPaymentService就是我的Payment集群然后我的消费者访问地址就不再是指定8001,应该指定集群
分类: 其他 发布时间: 03-09 09:40 阅读次数: 0

DevEco Studio拉取Git仓库

1、绑定Github设置找到Version Control版本控制下的GitHub,Github是国外的网站,不怎么稳定,反正我在登录的时候一致登不上,所以可以换一种方式登录登录Github官网创建完毕复制token即可2、配置Git同级目录找到Git,添加上Git.exe文件,如果配置了环境变量,这里是可以自动识别出来的3、拉取远程仓库一路next,完成后打开鸿蒙工程,等待Gradle编译结束完了后,commit,pull,push操作就在这
分类: 其他 发布时间: 03-09 09:40 阅读次数: 0

DevEco Studio配置注释模板

添加注释模板类模板找到Includes下的File Header.java,添加如下内容/** * @author ${USER} * @createTime ${DATE} ${TIME} * @projectName ${PROJECT_NAME} * @className ${NAME}.java * @description TODO */方法模板新建一个模板组,在组内添加一个模板模板名称这里写的MethodAnnotation选中MethodAnnot
分类: 其他 发布时间: 03-09 09:40 阅读次数: 0

服务注册中心(Zookeeper)

1、Zookeeper的安装①、拉取Zookeeper镜像#拉取Zookeeper镜像docker pull zookeeper#启动Zookeeperdocker run --name zookeeper_1 -p 2181:2181 --restart always -d zookeeper②、开放安全组此步骤针对云服务器,本地虚拟机可关闭防火墙2、注册服务提供者①、建module②、POM<?xml version="1.0" encoding="UTF-
分类: 其他 发布时间: 03-09 09:39 阅读次数: 0

服务注册中心(Consul)

1、简介官方文档中文文档下载地址Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司用Go语言开发。提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案。它具有很多优点。包括:基于raft协议,比较简洁;支持健康检查,同时支持HTTP和DNS 协议支持跨数据中心的WAN广域网集群提供图形界面跨平台,支持Linux、Mac、 Window
分类: 其他 发布时间: 03-09 09:39 阅读次数: 0

Eureka,Zookeeper,Consul三者异同点以及CAP规则

三者之间的比较组件名语言CAP服务健康检查服务健康检查对外暴露接口SpringCloud集成EurekaJavaAP可配支持HTTP已集成ConsulGoCP支持HTTP/DNS已集成ZookeeperJavaCP支持客户端已集成CAP规则鉴于现在的微服务架构,这个P,我们永远都要保证,系统要么是AP,要么是CP,三个里面不可能全占CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需
分类: 其他 发布时间: 03-09 09:39 阅读次数: 0

在使用Zookeeper以及Consul的时候,@LoadBalanced注解无效,无法通过服务名获取注册中心的URL的问题记录

太惨了我,这个问题我至少郁闷了四五天,在搞服务注册中心的时候,我第一个看的是Eureka,当时也是类似的错误,我稀里糊涂解决了以后,却又死在了Zookeeper和Consul上,要不是见哥,我真都快放弃这个问题了,呜呜呜,全网感谢见哥。1、问题描述在练习Zookeeper和Consul分别作为服务注册中心的时候,给我莫名其妙报了这个错误。2021-02-04 12:27:37.269 ERROR 9112 --- [nio-8002-exec-3] o.a.c.c.C.[.[.[/].[dis.
分类: 其他 发布时间: 03-09 09:39 阅读次数: 0

服务调用(Ribbon)

1、简介Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具,也就是存在于我们的客户端,而不像Nginx一样在服务端简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们
分类: 其他 发布时间: 03-09 09:38 阅读次数: 0