谷粒商城收获记录1

谷粒商城【商城系统】完整总结 gulimall(谷粒商城) 是一个综合性的B2C平台,包括前台商城系统以及后台管理系统,基于 SpringCloud + SpringCloudAlibaba + MyBatis-Plus实现,采用 Docker 容器化部署。前台商城系统包括:用户登录、注册;商品搜索、商品详情、购物车、下订单流程、秒杀活动等模块。后台管理系统包括:系统管理、商品系统、优惠营销、库存系统、订单系统、用户系统、内容管理等七大模块。 阅读详情

谷粒商城收获记录1

尚硅谷鼎鼎大名的谷粒商城,B站开源,最近看了,准备记录下笔记。
多记录下,留下些痕迹。

关于mybatis查询,嵌套查询这种

看了雷神好多的查询方法,包括树形结构,非树形结构查询,采用的是简单查询,mybatis中不进行连接查询,减少连接查询,这种情况会降低mysql查询出现笛卡儿积形式的查询,拖慢效率。

引入jmeter工具进行压力测试

写完了接口之后,往往不知道效率如何并发量怎样,可以采用jmeter来进行测试,拖累吞吐量的地方往往是网络连接,IO操作,主要由以下几个方面造成:

  1. jvm内存分配不足
  2. 项目中使用了各种远程调用,包括业务和中间件的使用,链路长也会造成响应时间长,吞吐量低
  3. 业务代码编写问题,比如大量查询数据库,还有效率低下的sql,应该在业务中减少低效率的sql和引入缓存方式来减少数据库的操作

nginx反向代理,动静分离

  1. nginx反向代理保护了服务端的服务,还可以对网关层进行负载均衡;
  2. 采用动静分离方式,将业务中的图片,js,css等静态资源放入nginx的指定路径下,可以减少这些资源到tomcat中访问,缩短了这类的访问路径,提升了吞吐量。
  3. 真正的产品都是有域名的,咱们可以设置子域名和主域名,在nginx中配置将url转发到特定的服务上。
www.gulimail.com   主域名
search.gulimail.com 子域名

在这里插入图片描述

使用ES进行检索服务

es可以进行多条件的检索,使用倒排索引,根据词找到具体的内容,东西有点多,不写了。。

引入缓存

为了解决吞吐量问题,我们使用缓存,当属redis,我们可以显示的进行redisTemplate进行设置,也可以引入spring-cache来使用redis(redis相关配置和包自行引入),如下几步操作:

  1. 引入依赖
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>

2、配置文件中配置使用redis作为缓存

spring.cache.type=redis

3、配置注解

@EnableCaching   开启注解

@Cacheable 查询完数据库缓存
@CacheEvict 增删改方法,删除缓存(失效模式)
@CachePut 增删改方法,修改完数据库,写入缓存(双写模式)
@Caching 组合上面几种注解

分布式锁

有些业务避免不了使用到锁,但是涉及到分布式项目部署,所以采用了分布式锁来进行解决,使用redis作为分布式锁考虑。

redis满足分布式锁的条件:

  1. redis每步操作都是原子操作;
  2. 锁要满足自动解锁,因为可能宕机,redis可以设置到期时间
  3. 锁重入,可能会进行多次调用,redis设置key时把当前线程id放入,也可以加入定时
  4. 锁续期,可能预定期间无法完成处理请求,引入定时,或者时间稍微长点

redission分布式锁引入

//springboot整合包
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson-spring-boot-starter</artifactId>
    <version>3.16.4</version>
</dependency>

使用方式采用java JUC包中Lock使用方式即可

异步编排任务

有时候执行操作时,并发操作可以提高我们的效率,降低响应时间。比如一个场景,先查询数据表1,再查询数据表2,最终将1,2的结果整合再返回给界面,这期间操作,查询1,查询2的操作都是没有关联的,我们可以用异步来进行操作,拼装结果时需要等待1,2的结果。

CompletableFuture

CompletableFuture,结合了Future的优点,提供了非常强大的Future的扩展功能,可以帮助我们简化异步编程的复杂性,提供了函数式编程的能力,可以通过回调的方式处理计算结果,并且提供了转换和组合CompletableFuture的方法,真香!

//无反回值任务,并使用提供的线程池执行
public static CompletableFuture<Void> runAsync(Runnable runnable, Executor executor);
//有反回值任务,并使用提供的线程池执行
public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier, Executor executor);
f1.thenRun(Runnable b)  //f1的结果无法传入到b中,并且整个方法没有返回值
f1.thenAccept(FunctionalInterface b) //f1的值b可以使用,但是整个方法没有返回值
f1.thenApply(FunctionalInterface b) //f1的值b可以使用,整个方法有返回值
f1.thenRun(Runnable b)  //f1的结果无法传入到b中,并且整个方法没有返回值
f1.thenAccept(FunctionalInterface b) //f1的值b可以使用,但是整个方法没有返回值
f1.thenApply(FunctionalInterface b) //f1的值b可以使用,整个方法有返回值

具体详查这个方法的使用吧!

Feign调用加入必要参数

Feign底层是封装了httpclient,通过代理模式来进行调用,注意在调用远程接口时,有些接口是需要带着特殊参数的请求或者特殊header的请求,这些要给自动设置上。

1、同一线程调用feign

设置RequestInterceptor,feign调用前会使用这个拦截器进行包装,在feign配置类中可以使用bean注解,注入一个拦截器,里面把原始上下文的请求信息设置上

@Bean
public RequestInterceptor requestInterceptor() {
	return new RequestInterceptor() {
		@Override
        public void apply(RequestTemplate template) {
           //spring提供从当前线程上下文拿到请求参数
	 ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
	 	//设置进template 
	 	template.header("token",token);	
        }
	} 	
}
2、非同一个线程调用feign

上述方式获取不到,因为是两个线程,获取不到第一个请求的头信息
所以在上面的基础上还得加上一步,就是把带请求参数的线程头信息同步到异步线程中

// 获取当前线程上下文环境器
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
//异步线程
CompletableFuture<Void> addressFuture = CompletableFuture.runAsync(() -> {
     // 同步上下文环境器,解决异步无法从ThreadLocal获取RequestAttributes
     RequestContextHolder.setRequestAttributes(requestAttributes);
    //调用feign
 	memberFeignservice.getAddress();     
        }, executor);
谷粒商城 - 个人笔记(基础篇三) 电商后台管理系统+电商系统,掌握微服务的全套方案。该系统有商品服务、仓储服务、订单服务、购物车服务、检索服务、认证中心服务、网关服务、用户服务、秒杀服务、第三方服务。使用SpringBoot+SpringCloud并配套SpringCloud Alibaba系列,引入全套微服务治理方案:Nacos注册中心/配置中心、Feign远程调用、Gateway网关、Redisson缓存、基于ElasticSearch7全文检索、异步编排与线程池、RabbitMQ柔性事务方案、Redisson分布式锁、分布式信号量等。 阅读详情

相关推荐

谷粒商城第一天-项目概述、架构、Linux环境搭建

收获其实也并不是很大,主要是从项目的宏观的角度整体的看那些组件,技术栈,浅浅的了解微服务,其实这一天主要还是对微服务的相关概念,一些组件了解。

m0_63445035的博客 2557

2022谷粒商城学习笔记(二十二)rabbitMQ学习

61613, 61614 (STOMP协议端口)25672 (Erlang发现&集群端口)1883, 8883 (MQTT协议端口)5672, 5671 (AMQP端口)15672 (web管理后台端口)

1274

谷粒商城项目(学习笔记一)

第一章:环境的搭建 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 第一章:环境的搭建 一、安装虚拟机 二、配置docker 1.官方网站 2.快速安装docker 三、测试docker 三、docker安装MySQL5.7 1.拉取MySQL5.7的镜像 2.运行MySQL并配置参数 三、docker安装Redis 1.用docker拉取最新的redis 2.配置参数并运行Redis 3.持久化redis 4.进入redis客户端进行检测 ..

qq_46396128的博客 2103

简单介绍一下谷粒商城这个项目。

谷粒商城(Gulimall)是一个基于 Spring Boot 和 Vue.js 的电子商务项目。通过学习和实践谷粒商城项目,您可以掌握许多有关 Web 开发、电子商务和技术栈的知识。通过学习谷粒商城项目,您将掌握许多有关 Web 开发、电子商务和技术栈的知识,为您未来的项目打下坚实的基础。

qq_44872509的博客 4160

谷粒商城项目(学习笔记三)

谷粒商城项目(学习笔记一) 谷粒商城项目(学习笔记二) 第三章:分布式部署 一、引入spring-cloud-alibaba 根据自己的版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub,引入需要的版本 我这里是2.2.6.RELEASE版的 <dependencyManagement> <dependencies> <dependency> <grou

qq_46396128的博客 1786

谷粒商城项目(学习笔记二)

第二章:初始化工程 一、初始化数据库 gulimall_oms #订单数据库 gulimall_pms #商品数据库 gulimall_sms #优惠券数据库 gulimall_ums #用户数据库 gulimall_wms #仓储数据库 二、引入人人开源 1.下载renren-fast和renren-fast-vue 在码云上下载renren-fast和renren-fast-vue 将renren-fast部署到idea上去 修改application-dev...

qq_46396128的博客 2966

【面试】【项目】谷粒商城

谷粒商城项目

m0_46179147的博客 1万+

谷粒商城课件(雷丰阳雷神的商城项目)

谷粒商城项目的课件,不包括代码,侵删

【java后端学习路线7】项目推荐:谷粒商城学习指南,985本海硕自学转码

欢迎大家关注我的微信公众号:程序员城南,回复关键字获取相应资料。这期视频是谷粒商城学习指南,祝大家元宵节快乐,同时在今年的春招和秋招拿到自己心仪的offer!

985本海硕自学转码经历分享 2381

开关电源三大基本拓扑:反激、正激与桥式选型本质

开关电源拓扑是电力电子系统设计的核心基础概念,其本质决定能量传递路径、器件应力分布与系统物理边界。反激拓扑以耦合电感形式实现隔离与升降压,适用于小功率AC-DC场景;正激拓扑依赖实时能量传递与强制复位机制,支撑中功率高效率需求;桥式拓扑(含推挽/半桥/全桥)通过电压应力分摊与双向磁化,成为大功率系统的刚性选择。理解三者在磁芯工作模式、电流连续性、直流偏磁抑制等方面的原理差异,直接关系到效率、温升、EMI及可靠性等关键技术指标。本文聚焦反激、正激、桥式三大工程级基本拓扑的物理本质与落地约束,揭示从需求参数到电

cqwmy840702的博客 377

【数学基础】基于欧拉角表达的旋转顺序

欧拉角旋转顺序

FalschxMico 1385

谷粒商城-个人总结

java学习步骤-谷粒商城-个人总结 参考https://www.bilibili.com/read/cv5216534 尚硅谷韩顺平Netty核心技术教程 一、Java基础阶段 1.尚硅谷Java基础教程(√) 2.尚硅谷MySQL核心技术教程(√) 3.尚硅谷JDBC教程教程(√) 4.尚硅谷IDEA教程(√) 5.尚硅谷Eclipse&IDEA中Maven和Git快速配置及使用 6.尚硅谷Java15新特性教程 二、JavaWEB阶段 1.尚硅谷J...

多思考思考 544

MaaS 商业模式全面分析报告:从技术赋能到商业变现的全链条探索

MaaS(模型即服务)商业模式正成为AI产业主流,2024年上半年中国市场规模达2.5亿元,预计2027年占比将提升至47%。该模式通过云服务提供预训练AI模型,大幅降低企业应用AI的技术门槛和成本。核心盈利方式包括按使用量计费、订阅制、定制化服务等,其中混合模式因灵活性成为趋势。MaaS产业链包含模型提供商、云平台、应用开发商和最终用户,重塑了AI产业格局。随着《数据法案》等监管加强,数据增值服务面临更严格合规要求。未来五年,中国MaaS市场增速预计超50%,用户规模将从2025年2.1亿增至2030年5

芯片行业20年 · 参与定义实现千万级量产出货 · AI芯片PM 2893

谷粒商城笔记+踩坑汇总篇

环境的搭建、商品服务-三级分类、品牌服务、阿里云云存储+JSR303数字校验+统一异常处理、spu+sku、分页拦截器、商品服务、仓库服务、Nginx反向代理,thymeleaf+动态展示三级分类、缓存与分布式锁,Redisson+缓存数据一致性、ElasticSearch检索服务、异步和线程池、商品详情搭建+异步编排、认证服务、阿里云短信+验证码防刷+BCrypt加密、用户名密码登录+微博社交登录+SpringSession+xxl-sso单点登录、购物车、订单服务、幂等性、库存自动解锁。MQ延迟队列

种一棵树最好的时间是十年前,其次是现在 2万+

PCB设计AD规则设置(按照嘉立创设置)

按照嘉立创的相关加工能力进行设置: 1.Hole Size(钻孔孔径) 嘉立创要求钻孔孔径在0.2-6.3mm,并给了公差(如下图给出了钻孔孔径和公差) 规则设置位置:Manufacturing->Hole Size,这里就改一下数值,最小设置为0.2mm,最大设置为6.3mm 2.Width(线宽) 嘉立创要求线宽多层板双层板最小为3.5mil,单双层板最小为5mil(如下图给出了线宽) 规则设置位置:Routing->Width,我目前只画过双层板,按我的设置如下,最小的线宽设置为10

subtitle_的博客 4万+

ASPICE标准快速掌握「总目录」

欢迎大家来到雪云飞星的《ASPICE标准快速掌握》,开始前博主先列出本专栏学习的大纲,同时这也可以作为大家学习ASPICE协议知识点的参考。本专栏可以帮助大家快速掌握如何在项目中使用ASPICE,ASPICE的学习通常仅需要半天时间左右,掌握方法后完全就可以结合快查表来指导具体项目的质量提升了。

雪云飞星的博客 3012

谷粒商城学习记录

项目开发

bare_rain的博客 1690

基于YOLOv11的手术器械计数系统:从数据集构建到Web应用部署

m2cai16-tool数据集:包含15种腹腔镜手术器械的标注图像Cholec80数据集:包含80个胆囊切除手术视频,标注了7种器械SurgicalTools数据集:包含超过10,000张手术器械图像,涵盖21类常见器械手术剪(Scissors)止血钳(Hemostat)持针器(Needle Holder)手术刀(Scalpel)镊子(Forceps)拉钩(Retractor)吸引器(Suction)

YOLO 397

谷粒商城笔记 + 完整代码 + 课件资料(基础篇)(学习记录)

谷粒商城基础篇完整代码 + 详细笔记(学习记录)一、项目介绍1. 谷粒商场微服务架构图2. 微服务划分图二、项目环境搭建1. 虚拟机搭建环境2. Linux安装docker3. docker配置mysql4. docker配置redisredis 配置文件解析redis 可视化工具安装5. 配置开发环境6. 安装vscode7. 配置git8. IDEA配置码云9. 初始化项目架构10. 初始化数据库三、快速开发1. 人人开源搭建后台管理系统2. 人人开源逆向工程搭建3. 测试基本的CRUD功能4. 快速生

weixin_44190665的博客 7万+

YOLOv8改进策略【卷积层】| TIP 2025 MFA 多阶段特征聚合 大核扩感受 + 多梯度融合,强效增强弱小目标特征

红外弱小目标尺寸极小、信噪比低,在特征传递中极易丢失信息;常规卷积感受野单一、梯度源不足,难以同时捕捉局部细节与全局上下文,导致小目标特征表达弱、检测漏检。因此提出多阶段特征聚合 MFA,用大核卷积+多分支+通道注意力强化小目标特征提取。

Limiiiing的博客 59

Error response from daemon: Get “https://index.docker.io/v1/search?q=nginx&n=25“:

在使用docker seach 命令搜索镜像的时候遇到这个错误,docker pull是可以正常下载镜像的,关于这个问题,本文提供解决方案,完全可行。

猿小白的博客 1万+

谷粒商城学习-笔记大全

1,谷粒商城-01-项目介绍 2,谷粒商城笔记-02-项目整体效果展示

epitomizelu的专栏 5356

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

谷粒商城高级篇上(未完待续)

谷粒商城高级篇(上)保姆级整理 之前整理了基础篇,Typora提示将近20000词,在学高级篇的时候,不知不觉又整理了两万多词,当做一阶段,先发出来,剩余部分整理好了再发。自己也在学习的过程中,能力有限,如果有什么问题欢迎找我讨论。 文章目录谷粒商城高级篇(上)保姆级整理ElasticSearchDocker安装es**ubuntu中vi下删除键和上下左右键的异常解决**Docker安装KibanaElasticSearch 入门检索文档查询文档更新文档删除文档&索引bulk批量API进阶操作fi

唐尧的博客 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

谷粒商城2020学习记录

谷粒商城2020学习记录 视频链接

qq_37805900的博客 5595

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

《谷粒商城》-项目简介以及环境搭建

《谷粒商城》项目 项目简介、环境搭建、项目结构初始化

Jodie_Girl的博客 8788

谷粒商城完结

谷粒商城完成 上线的代码,我提交到prod分支了:https://gitee.com/dalianpai/gulimall 主要就是nginx的镜像制作,commit的时候,拿不到静态和配置文件,需要自己手写制作。 由于我之前K8s学过视频,跳过一些,ingress的控制器没有部署,导致一直不能访问,后来发现了,在这里把步骤补上。 还有最后几节就不看了,打算学别的了,有时间还是会在巩固一...

qq_29860591的博客 1351
上一篇: 位运算小记
下一篇: 谷粒商城收获记录2
sun_code
博客等级 码龄12年 6粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值