谷粒商城
文章平均质量分 82
AlvinUnity
这个作者很懒,什么都没留下…
展开
-
26. 谷粒商城整合支付宝、内网穿透、支付宝Demo
加密对称加密什么是对称加密所谓对称加密,就是发送方要给接收方在网络上发送一段明文,但是不能直接发。发送方需要加密,对称加密指的就是加密和解密用的是同一把密钥。假设发送方准备了一串明文,123456,想要传出去,他先用 密钥A 把123456加密成一个密文,然后把这个密文通过网络传输给接收方,即使有人在中间截取到这个密文,由于他不知道加密用的是什么算法,什么密钥,他就办法解密得到明文,而接收方收到这个密文之后,他知道发送方用的是哪个密钥,所以接收方使用跟发送方用同一把密钥解密就行了解密出来原创 2021-07-26 16:01:18 · 2652 阅读 · 0 评论 -
25. 谷粒商城订单系统
简介电商系统涉及到 3 流,分别时信息流,资金流,物流,而订单系统作为中枢将三者有机的集合起来。订单模块是电商系统的枢纽,在订单这个环节上需求获取多个模块的数据和信息,同时对这些信息进行加工处理后流向下个环节,这一系列就构成了订单的信息流通。订单构成1、 用户信息用户信息包括用户账号、用户等级、用户的收货地址、收货人、收货人电话等组成,用户账户需要绑定手机号码,但是用户绑定的手机号码不一定是收货信息上的电话。用户可以添加多个收货信息,用户等级信息可以用来和促销系统进行匹配,获取商品折扣,同时用户原创 2021-07-26 15:59:57 · 1950 阅读 · 0 评论 -
Seata 基本使用、Linux 安装Seata 0.7.1、Spring Boot 整合 Seata0.7.1
术语首先在Seata里边有这么几个概念,TC、TM、RMTC 事务协调者维护我们全局这些事务状态的,要维护全局。我们现在假设是下单业务,下单业务要调用我们三个远程服务。那通过TC 就要协调这三个远程服务到底是都要提交还是都要回滚。这个 TC 类似于我们二阶提交协议的那个 Transaction Manager(总事务管理器),TM 事务管理器它是Business 这一块的,负责负责控制我们的总事务相当于我们要做 Business 方法的时候,它要调用三个远程方法。所以 Business原创 2021-07-22 15:09:42 · 1121 阅读 · 4 评论 -
分布式事务常见的解决方案
1、2PC 模式2PC 就是我们说的二阶段提交,又叫做 XA Transactions。MySQL 从 5.5 版本开始支持,SQL Server 2005 开始支持,Oracle 7 开始支持。这个二阶提交协议呢,就是把我们整个分布式事务拆成了两个阶段。假设我们这有一个本地资源管理器,一个事务管理器。本地资源管理器是每一个服务的事务管理器比如我们有一个订单服务,还有一个库存服务,那现在这是两个服务,这两个服务呢想要做一个分布式事务,两个一起成或者一起败。接下来得有一个总的事务管理器总原创 2021-07-21 10:54:54 · 225 阅读 · 0 评论 -
BASE 理论
前言在我们整个互联网系统,我们这个大型微服务,我们拆分出了好多微服务。然后集群规模非常大,肯定会存在网络故障,假设有几个机器可能就访问不通了,这个网络就中断了,或者有几个机器宕机了。那么节点故障网络故障这都是常态。但是无论是网络怎么故障,节点怎么故障。我们肯定要保证我们整个集群系统是一个可用状态,不应该出现。有两三个服务出现问题了,或者网络不通了,然后导致我们整个商城不可用了。所以我们最终都是想要保证我们的服务可用性能达到百分之九十九点九九九九这个效果。最终我们还是来选择使用 AP,也就是分区容错原创 2021-07-21 09:15:01 · 229 阅读 · 0 评论 -
本地事务基础
本地事务一个或一组SQL语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行一、ACID特性原子性:一个事务的整体操作不可拆分,要么都成功,要么都失败一致性:一个事务执行会使数据从一个一致状态切换到另一个一致状态以转账为例,转账之前 A 有 1000,B 有 1000, 如果 A 给 B 转 200,成功了,那么 A 就是 800,B 就是 1200,业务前后它们的总量都是 2000,不可能出现转完账之后,A 扣了 200,B 没加 200隔离性:事务之间互相隔离假原创 2021-07-21 00:01:34 · 220 阅读 · 1 评论 -
分布式系统实现一致性的 Raft 算法
简介我们来看一下 raft 算法,它帮我们来理解我们这个分布式系统 Consunsus,这个就是一致性。首先我们来说它说什么是我们分布式系统的一致性。我们以一个例子来作为示范那假设我们现在有一个单节点的系统,假设就一个节点我们一台机器,我们现在就一台机器举一个例子,我们现在就是这个节点,这个机器想要保存一个数据,那我们就给它保存一个数据,比如我们就叫 x 它保存了一个数据。然后我们有一个客户端(绿的),还有一个数据库(蓝的),客户端可以让数据库保存数据,可以理解成订单服务让数据库保存一条数原创 2021-07-20 23:59:18 · 430 阅读 · 0 评论 -
接口幂等性
一、什么是幂等性接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用;类似于数学里的幂等,1的1次幂,和1的100次幂,结果都是1比如说支付场景,用户购买了商品支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录也变成了两条,这就没有保证接口的幂等性二、 哪些情况需要防止用户多次点击按钮用户页面回退再次提交微服务互相调用,由于网络问题,导致请求失败原创 2021-07-17 23:09:48 · 245 阅读 · 0 评论 -
24. 谷粒商城购物车
需求描述用户可以在 未登录状态下将商品添加到购物车 【游客购物车/ 离线购物车/ 临时购物车】浏览器即使关闭,下次进入, 临时购物车数据都在用户可以在 登录状态下将商品添加到购物车 【用户购物车/ 在线购物车】登录以后,会将 临时购物车的数据全部合并过来,并清空 临时购物车;用户可以使用购物车一起结算下单给购物车 添加商品用户可以 查询自己的购物车用户可以在购物车中 修改购买商品的数量。用户可以在购物车中 删除商品。选中不选中商品在购物车中展示商品优原创 2021-07-14 22:54:12 · 382 阅读 · 0 评论 -
sso(单点登录)
# 准备工作修改windows的host文件```# 测试sso127.0.0.1 ssoserver.com127.0.0.1 client1.com127.0.0.1 client2.com```原创 2021-07-11 16:40:07 · 760 阅读 · 0 评论 -
23. 谷粒商城分布式Session原理、SpringSession
Session原理-常规流程1、第一次登录首先浏览器访问服务器,比如:进行了一次登录操作,如果登录成功,一般会将成功的用户保存到 session 中,session 其实就是服务器的一个内存工具,可以将其理解为是一个 Map2、登录成功之后假设商城只有一个服务器,可能会有很多用户操作浏览器对服务器进行访问,比如:张三、李四等都在用,他们都在访问商城,服务器为了保存这些人的登录状态,会为每一个人创建一个 session 对象, 这个 session 对象当成是一个 Map,所有的 session 服原创 2021-07-10 18:21:34 · 717 阅读 · 1 评论 -
22. 谷粒商城OAuth2.0接入Gitee登录
简介OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容。OAuth2.0 :对于用户相关的 OpenAPI(例如获取用户信息,动态同步,照片,日志,分享等),为了保护用户数据的安全和隐私,第三方网站访问用户数据前都需要显式的向用户征求授权。流程以CSDN注册,使用QQ登录为例Gitee登录准备工作首先登录Gitee鼠标移到头像处,进入设置界面左侧列表原创 2021-07-09 12:56:14 · 923 阅读 · 0 评论 -
21. 谷粒商城搭建检索页面
商品名称分类多个品牌是否有货商品属性价格区间排序分页高亮包装模糊匹配过滤(属性、分类、品牌、价格区间、是否有货)排序、分页、高亮聚合分原创 2021-06-26 18:21:39 · 337 阅读 · 0 评论 -
20. 谷粒商城Spring Cache
介绍Spring 从 3.1 开始定义了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口来统一不同的缓存技术;并支持使用 JCache(JSR-107)注解简化我们开发;Cache 接口为缓存的组件规范定义,包含缓存的各种操作集合;Cache 接 口 下 Spring 提 供 了 各 种 xxxCache 的 实 现 ; 如 RedisCache、 EhCacheCache 、ConcurrentMa原创 2021-06-24 22:44:53 · 277 阅读 · 1 评论 -
19. 谷粒商城缓存一致性解决
缓存一致性解决初始方案 /** * 使用RedissonLock解决缓存击穿 * * @return */ private Map<Long, List<Category2VO>> getCategoryJsonWithRedissonLock() { // 锁的粒度,越细越快 RLock rLock = redissonClient.getReadWriteLock("categoryJson原创 2021-06-24 22:42:36 · 383 阅读 · 1 评论 -
18. 谷粒商城分布式锁Redisson
1 、简介Redisson 是架设在 Redis 基础上的一个 Java 驻内存数据网格(In-Memory Data Grid)。充分的利用了 Redis 键值数据库提供的一系列优势, 基于 Java 实用工具包中常用接口,为使用者提供了一系列具有分布式特性的常用工具类。 使得原本作为协调单机多线程并发程序的工具包获得了协调分布式多机多线程并发系统的能力,大大降低了设计和研发大规模分布式系统的难度。同时结合各富特色的分布式服务,更进一步简化了分布式环境中程序相互之间的协作。官方文档:https:原创 2021-06-23 21:40:05 · 430 阅读 · 1 评论 -
17. 谷粒商城缓存、缓存中间件、本地锁、分布式加锁
一、 缓存1 、缓存使用为了系统性能的提升,我们一般都会将部分数据放入缓存中,加速访问。而 db 承担数据落盘工作。哪些数据适合放入缓存?即时性 、数据一致性要求不高的访问量大且更新频率不高的数据(读多,写少)举例:电商类应用,商品分类,商品列表等适合缓存并加一个失效时间(根据数据更新频率来定),后台如果发布一个商品,买家需要 5 分钟才能看到新的商品一般还是可以接受的。2、本地缓存问题一本地缓存与当前工程在同一个项目里面,相当于是一个副本,如果我们的应用只是一个单体应原创 2021-06-23 21:36:41 · 361 阅读 · 1 评论 -
16. 谷粒商城性能压测、优化、Nginx动静分离
性能指标响应时间(Response Time: RT)响应时间指用户从客户端发起一个请求开始,到客户端接收到从服务器端返回的响应结束,整个过程所耗费的时间。HPS(Hits Per Second) :每秒点击次数,单位是次/秒。TPS(Transaction per Second):系统每秒处理交易数,也可以理解成每次处理的事务数,单位是笔/秒。具体的场景,比如:查询商品详情、下订单,可以将其理解为一个个事务,当里面的各项业务都做完了之后,就代表这个事务完成了(此处的事务,不能狭义的理原创 2021-06-19 21:18:32 · 842 阅读 · 0 评论 -
15. 谷粒商城搭建域名访问、Nginx配置网关
修改 hosts 配置文件路径:C:\Windows\System32\drivers\etc在后面追加以下内容:# gulimall #你的ip gulimall.comNginx 配置文件分析Nginx配置文件cat /mydata/nginx/conf/nginx.conf user nginx;worker_processes 1;error_log /var/log/nginx/error.log warn;pid /var/run/nginx.原创 2021-06-18 21:58:36 · 1973 阅读 · 2 评论 -
14. 谷粒商城首页Thymeleaf、热部署
热部署pom <!-- 热部署--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>Thymeleafpom <!-原创 2021-06-18 18:54:58 · 270 阅读 · 0 评论 -
13. 谷粒商城商品上传至Elasticsearch具体实现思路以及步骤
功能拆分 仓储服务:查询sku是否有库存 商品服务:查询出所有允许被检索的规格参数 商品服务:调用仓储服务查询sku是否有库存 商品服务:查询品牌、分类信息 商品服务:准备好保存到Es的所有数据 商品服务:调用检索服务将数据保存到Es 商品服务:根据保存结果决定是否更新商品状态 检索服务:将商品服务传过来的上传数据保存到Es前言以下步骤及思路,有部分出入,具体请参考代码,https://gitee.com/UnityAlvin/gulimall/commits/master统计提原创 2021-06-17 21:27:48 · 510 阅读 · 0 评论 -
12. 谷粒商城商品上架-es中sku的存储模型分析
前言在决定哪些信息应该存储到es之前,首先要明确一点,es中的数据是存储到内存中的,虽然它原生支持分布式,理论上容量无限,但是毕竟内存的价格要比硬盘的价格贵的多,所以尽量能节省的就节省。就是只保存有用的数据,没用的数据全部不保存,要用的时候,大不了检索出来,去数据库再查一遍。哪些信息应该存储到es中1. sku可能通过 sku 的标题、销量、价格区间检索2. 品牌、分类点击分类,检索分类下的所有信息点击品牌,检索品牌下的商品信息3. spu选择规格,检索拥有这个规格的商品原创 2021-06-15 22:18:15 · 864 阅读 · 1 评论 -
11. 谷粒商城MapStruct、规格参数以及销售属性的CRUD
MapStruct简单使用,都说它的性能高,这里主要用来替代BeanUtils.copyProperties()导入依赖 <!--mapstruct--> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-jdk8</artifactId> <version>1.2.0.Final</ver原创 2021-05-30 18:51:09 · 295 阅读 · 0 评论 -
10. 谷粒商城查询、新增品牌分类关联,优化更新品牌、更新分类
查询品牌的关联分类需求后端AdminCategoryBrandRelationController.java /** * 获取当前品牌关联的所有分类列表 */ @ApiOperation("获取当前品牌关联的所有分类列表") @GetMapping("/category/list/{brandId}") public R categoryList(@PathVariable Long brandId){ QueryWrapper&原创 2021-05-29 17:30:26 · 384 阅读 · 0 评论 -
9. 谷粒商城PubSub提示undefined、添加MyBatisPlus分页插件、查询品牌优化
PubSub提示undefined订阅发布错误(缺少包)1. 安装依赖npm install --save pubsub-js2. 导包src\views\modules\common\category-cascader.vue<script>import PubSub from 'pubsub-js'</script>3. 使用PubSub.方法名(...)添加MyBatisPlus分页插件MybatisPlusConfig.javapackag原创 2021-05-29 17:22:12 · 1230 阅读 · 0 评论 -
8. 谷粒商城树形列表添加过滤、属性分组查询全部、级联选择器
树形列表添加过滤src\views\modules\common\category.vue添加了树形菜单过滤,但是清空过滤条件时,节点无法收起在原有的基础上修改template<!-- 树形列表 --><template> <div> <el-input placeholder="输入关键字进行过滤" v-model="filterText"></el-input> <el-tree ref="c原创 2021-05-28 08:37:09 · 347 阅读 · 3 评论 -
7. 谷粒商城商品属性介绍、前端组件抽取、父子组件传递数据、根据分类id查询数据
基础概念SPUStandard Product Unit 标准化产品单元:是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。SPU: Standard Product Unit(标准产品单位)SPU 是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。通俗点讲,属性值、特性相同的商品就可以称为一个 SPU。例如:iPhone 12就是一个 SPU,与商家,与颜色、款式、套餐都无关。SKUStock原创 2021-05-28 08:31:18 · 422 阅读 · 1 评论 -
6. 谷粒商城统一处理异常、JSR303校验
统一处理异常后端1、创建异常枚举类通用模块:gulimall-commonBizCodeEnum.javapackage com.indi.common.enums;@Getter@AllArgsConstructorpublic enum BizCodeEnum { // 通用异常 UNKOWN_EXCEPTION(10000,"系统未知异常"), VAILID_EXCEPTION(10001,"参数格式校验失败"); private int cod原创 2021-05-26 11:15:02 · 592 阅读 · 5 评论 -
5. 谷粒商城商品管理优化、文件上传、表单校验
商品管理优化需求品牌logo:显示图片显示状态:添加开关前端先把VS Code里面vetur的ESLint关闭templateproduct/brand.vue <el-table-column prop="logo" header-align="center" align="center" label="品牌logo" > <!-- 自定义列模板:显示图片-->原创 2021-05-26 11:13:18 · 518 阅读 · 3 评论 -
4. 谷粒商城网关以及跨域、商品分类树状列表
网关以及跨域前端static/config/index.js后端1、修改网关的yml网关服务:gulimall-gatewayapplication.ymlspring: cloud: gateway: routes: # 商品服务的跨域,将商品相关的所有请求,转到商品服务 - id: product_route uri: lb://gulimall-product predicates:原创 2021-05-23 21:31:58 · 578 阅读 · 12 评论 -
3. 谷粒商城初始化项目、提交到码云、初始化数据库
初始化项目商品服务、订单服务、仓储服务、优惠券服务、用户服务共同点:全部选择依赖web、openfeign每一个服务,包名 com.indi.gulimall.xxx(product/order/ware/coupon/member)模块名:gulimall-xxx(product/order/ware/coupon/member)谷粒商城-商品服务:gulimall-product谷粒商城-订单服务:gulimall-order谷粒商城-仓储服务:gulimall-ware谷粒商城-原创 2021-05-16 16:43:15 · 353 阅读 · 0 评论 -
2. 谷粒商城Docker环境配置
Docker安装Docker参考:Docker 安装文档1. 删除老版本# 卸载docker,不要轻易尝试yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-engine# 删除原创 2021-05-15 19:01:20 · 1176 阅读 · 1 评论 -
1. 谷粒商城架构
客户通过任意客户端(app/Web)向服务器发送请求,请求首先来到Nginx集群,Nginx将请求转交给Api网关(SpringCloud Gateway),Api网关:可以根据当前请求,动态路由到指定的服务假如请求对应的服务过多,例如是查询商品,而商品在3个服务里面都有,网关可以通过Ribbon负载均衡的调用服务。如果服务出现问题,也可以在网关这个级别通过Sentinel做熔断降级还可以对请求进行认证授权, 请求过来以后,看是否合法,合法了以后再放行还可以通过Sentinel对请求进行限.原创 2021-05-15 18:14:14 · 892 阅读 · 3 评论