粒商城项目总结(二)-高级篇

这篇博客详细介绍了商品上架到检索服务的全过程,涉及ES存储模型、nested数据模型处理、库存查询、远程上架接口及Feign调试。深入探讨了缓存使用场景、Redis缓存优化、分布式锁原理与实践,包括Redisson的使用,以及SpringCache的整合。此外,还涵盖了前端Thymeleaf整合、压力测试、Nginx负载均衡和域名访问环境搭建。同时,文章讨论了线程池、CompletableFuture的异步任务处理,以及商品详情和认证服务的实现,包括社交登录和分布式session解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

P102-P127ES使用

九.业务代码:商品上架

P128.sku在es中存储模型分析

商品信息上架到Es中进行检索。
es存储模型选择

P129.nested嵌入式数据模型处理

es扁平化处理

130.构建基本数据

传递商品上架Id到后端,后端查询数据上传到es中。
基本数据信息
流程步骤
发送到es模块远程添加

P131.构建sku检索属性

sku的销售规格属性的集合

P132.远程查询库存,泛型结果进行封装

库存量等于总库存量减去锁定库存量;
泛型封装

P133远程上架接口

调用远程接口实现添加sku数据
es存储数据

P134上架接口调试,feign源码

feign调用流程

十、前端thymeleaf、nginx、性能压测

P136首页thymeleaf整合

前后分离
引pom,改yml(缓存关闭)
静态资源放在static包下面可以按照路径直径访问
页面放在template下,直接访问
SpringBoot访问时,默认找index页面

P137整合dev-tools渲染一级分类数据

返回模板方法

P138渲染二级三级分类数据

返回三级分类方法封装返回结果数据

P139搭建域名访问环境

nginx内容

P140nginx搭建域名访问环境,负载均衡到网关

nginx配置
网关修改
域名映射效果

P141-143压力测试

(1)主要关注三点:
吞吐量,每秒系统能处理的请求书、任务数。
响应时间,服务处理一个请求或者一个任务的耗时。
错误率:一批请求中结果出错所占比例
(2)JMeter压力测试
P144-150压力测试心梗监控与优化

nginx动静分离优化
三级分类优化:由多次查询诗句库转为一次,优化业务逻辑

十一、缓存和分布式锁

P151.缓存使用

(1)哪些数据适合使用缓存?
即时性要求不高
访问量大且更新频率不高的数据
(2)本地复杂均衡缺点:
① 每个服务A缓存B没有缓存就要查数据库
②A服务丢该缓存,B服务接收不到通知

P152.redis缓存

pom.yml(地端口),使用注解使用

P153.redis改变三级分类查询缓存步骤

查询redis,没有就插入

P154.压力测试内存溢出

springboot2.0默认使用lettuce作为操作redis客户端,使用的netty网络通信,导致内存溢出。
解决:
(1)升级lettuce客户端
(2)切换使用jedis

P155.缓存击穿、穿透、雪崩

穿透:访问空数据->空结果缓存,设置短暂的过期时间
雪崩:大片数据同时失效,都访问数据库->缓存失效时间设置为随机
击穿:某个高频key失效,同时大量数据缓存->加锁,大量数据只允许一个去查,其他排队等待

P156加锁解决缓存击穿问题?

方案1:
加同步代码块
同步代码块方式
本地锁原子操作

P157.本地锁分布式问题

只能锁住当前请求,不能锁住其他服务请求

P158.分布式锁原理与使用

分布式锁基本原理
分布式锁死锁
设置锁过期时间 ,设置锁id1保证原子操作。
锁时间短10s,业务执行30s未完成,qos后删除第一个锁,下一个进程占用,10S进行删锁,删除的是第二个锁。
分布式锁不加id问题
在这里插入图片描述

P159、分布式锁Redisson简介&整合

分布式锁解决方案功能。
pom
创建redisson分布式锁类
redisson分布式锁类

P160lock锁 测试

1.可重用锁:A加1号锁,B发现1号锁,可进行重用
redisson锁使用

161.redisson看门狗锁原理

设置锁时间

162.读写锁

读写锁相互等待
读锁是共享锁,写锁时互斥锁。只要有写锁就等待

P163.读写锁补充

P164闭锁测试

任务全部完成才算完成

P165信号量

三个车位,站车位,有车位可以停,没有不能停,也可以用作限流
P166缓存一致性
双写模式模式失效模式
解决方案

P167.SpringCache

springCache

P168-169.整合springcache

使用
原理
类上使用

P170.springcache自定义缓存配置器

加入自定义缓存配置类缓存问题解决方案

P171.@CalieEvict和@Cacheable

P172.SpringCache原理不足

不足

十二.业务代码:检索服务

P173.检索服务页面搭建

nginx动静分离
动静分离

P174调整页面跳转

P175检索查询参数模型分析抽离

检索条件

176.返回检索模型抽离

返回信息返回信息

P177-178查询构建+聚合构建分析

P179.代码检索构建

构建

P180-181.构建检索

检索

P182-183构建结果验证正确性

结果

P184-192.页面结果渲染

页面渲染,分页渲染,分页排序,价格区间,面包屑导航,条件联动删除或增加

十二、异步线程池

P193线程复习

四种实现方式
继承Thread:不能得到返回值,不能控制资源
实现Runnable接口:不能得到返回值,不能控制资源
实现Callable接口+FutureTable(可以拿到返回结果,处理异常)::能得到返回值,不能控制资源
线程池::能得到返回值,能控制资源
创建:①Executors②new ThreadPoolExecutor
P194线程池详解
线程池参数
线程池工作策略

P195.CompletableFuture

为什么使用线程池?
降低资源消耗
提高响应速度
提高线程的可管理性
异步编排场景

P196.启动异步任务

创建异步任务

P197计算完成时回调方法

回调方法
handle方法

199.线程串行化

线程串行化

200.两个任务组合

两个任务组合
两个组合

201.一个完成执行操作

方法
有一个完成即可

202.多任务组合

多任务

十三.业务代码:商品详情

P203商品详情环境搭建

网关修改,nginx动静分离修改

P204、模型抽取

获取内容
封装信息
规格属性

P205规格参数

获取规格参数信息

P206获取spu销售属性组合

P207商品详情属性渲染

P208商品SPU销售属性渲染

P209sku组合交换

P210异步编排信息

添加自己的线程池,可以把数据改为yml配置
自己的线程池
异步编排1
异步编排2

十四.认证服务

211认证服务环境搭建

新建模块,网关,nginx动静分离,

211验证码倒计时

页面
视图映射,避免再写空界面返回方法

P213整合短信验证码

前端调用后端,后端生成一个验证码给第三方验证码。
发送模板
抽取为前端调用类

P214验证码防刷校验

防刷验证

P215注册环境页

后端进行属性校验返回结果

P216异常机制

从redis获取验证码,验证验证码
验证码确定流程
异常处理机制

P217密码加密处理

MD5加密原理
MD5加盐加密处理
spring提供的加密方法

218注册完成

219账户密码登录

P220社交登录OAuth2登录

OAuth2流程

P221微博登录

超链接跳转到登录页
通过获取得到的code验证获取得到信息

P222社交登录回调

获取信息

223.社交登录完成

根据微博获取得到的信息完成注册。判断该第三方服务账户是否已经注册,没有进行注册,已经注册,返回信息。
第三方登录流程

P224社交登录测试完成

P225分布式session不共享不同步问题

session不共享问题·

P226分布式session解决

方案一:
客户端存储session
方案2:
hash一致性
方案3
redis统一存储session
不同服务间session跨域

227.整合springSession

pom。yml。注解
yml指定session存储到redis
其他项目也整合springSession,取得session。
存储session

228.完成session跨服务共享

新建一个类解决session共享问题

P229SpringSession原理

原理

P230页面效果完成

P231单点登录

一处登陆处处登录
单点

P232框架效果演示

P233-234 单点登录实现

中央认证服务器
单点登录实现原理
单点登录1
单点登录2
关键点,带token返回
单点登录3

单点登录4

cookie返回界面
查看是否有token
主要思路

十五.业务代码:购物车服务

236.环境搭建

搭建模块,pom,nginx动静分离,网关路由

237.购物车数据模型分析

购物车储存进redis

238.VO模型抽取

购物项
整个购物车

239.ThreadLocal用户身份验证

ThreadLocal同一个线程共享数据

拦截器要拦截哪些请求

拦截器拦截请求
获取登录信息
方法执行在之后拦截

P240页面环境搭建

P241加入购物车

逻辑思路
异步任务完成

P242购物车添加细节

购物车如果有商品只添加数量

P243.RedirectAttribute

之前存在的问题
244获取购物车合并购物车
查看购物车思路

245.购物车选中项

246.改变购物车数量

P247.删除购物项

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值