自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(757)
  • 资源 (1)
  • 收藏
  • 关注

原创 尚品汇-sku存入Redis缓存(二十三)

定义一个注解后面两个注解可加可不加/*** 缓存key的前缀* @return*/定义一个切面类加上注解/*** 处理环绕通知*/@Component@Aspect@Autowired@Autowired// 切GmallCache注解// 声明一个对象// 在环绕通知中处理业务逻辑 {实现分布式锁}// 获取到注解,注解使用在方法上!// 获取到注解上的前缀// sku// 方法传入的参数。

2024-07-24 23:05:34 328

原创 尚品汇-(二十二)

目录:(1)使用redisson 解决分布式锁(2)可重入锁(Reentrant Lock)

2024-07-20 18:32:35 556

原创 尚品汇-(二十一)

1加锁// 1. 从redis中获取锁,set k1 v1 px 20000 nx2.使用lua释放锁// 2. 释放锁 del// 设置lua脚本返回的数据类型// 设置lua脚本返回类型为Long3.重试testLock();为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件:- 互斥性。在任意时刻,只有一个客户端能持有锁。- 不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。- 解铃还须系铃人。

2024-07-18 23:34:38 350

原创 尚品汇-(二十)

目录:一:商品详情页面优化(1)思路(2)整合redis到工程(3)使用redis进行业务开发相关规则(4)缓存常见问题二:分布式锁本地锁的局限性(1)并发请求Redis的问题(2)本地锁 解决(3)集群下,并发访问Reids(4)分布式锁实现的解决方案。

2024-07-17 23:02:08 721

原创 尚品汇-(十九)

目录:一:搭建service-client父模块(1)搭建service-product-client(2)service-item模块汇总数据(3)搭建service-item-client模块(4)搭建web-util模块二:搭建web父模块(4)搭建web-util模块(5)构建web-all模块。

2024-07-14 17:25:40 831

原创 尚品汇-(十八)

(1)实现商品切换(2)获取海报信息(3)Sku对应的平台属性。

2024-07-13 16:52:51 268

原创 尚品汇-(十七)

销售属性跟销售属性值表,没有外键,他们之间不是通过外键关联的,他们是通过两个字段进行关联的。通过spuid和skuid查询 选中sku的销售属性。3、点击其他销售属性值的组合,跳转到另外的sku页面。选中关系表:选中了sku,然后跟销售属性关联过滤。继续编写接口:ManagerService。1、查出该商品的spu的所有销售属性和属性值。继续编写接口ManageService 接口。查询的是sku_info里面的价格。查询出sku对应spu的销售属性。2、标识出本商品对应的销售属性。,并关联某skuid。

2024-07-12 23:41:51 691

原创 尚品汇-(十六)

点击service,选择New–>Module,操作如下修改配置pom.xml添加配置文件bootstrap.properties添加启动类因为父模块引入了mysql的依赖,由于自动配置,如果没有配置会报错,我们把他关了class排除数据库链接jar表示当前项目不参与数据库查询service-item服务接口封装说明:商品详情相关信息在微服务都可以获取,所以我们在模块编写所需要的接口在service-product微服务提供api接口。

2024-07-10 22:17:04 636

原创 尚品汇-(十五)

Sku基本信息Sku图片信息Sku分类信息Sku销售属性相关信息Sku价格信息(平台可以单独修改价格,sku后续会放入缓存,为了回显最新价格,所以单独获取)展示商品的海报获取skuId 对应的商品规格参数...

2024-07-08 22:13:19 622

原创 尚品汇-(十四)

商品详情页,简单说就是以购物者的角度展现一个sku的详情信息。用户点击不同的销售属性值切换不同的商品点击添加购物车,将商品放入购物车列表中Thymeleaf 简介Thymeleaf是一款用于渲染内容的模板引擎。类似JSPVelocityFreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎。与其它模板引擎相比,Thymeleaf最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个Web应用!

2024-07-07 19:09:29 273

原创 尚品汇-(十三)

查询sku列表。

2024-07-07 12:02:50 339

原创 尚品汇-(十二)

根据以上的需求,以此将SKU关联的数据库表结构设计为如下:base_attr_value:前面学的平台属性值表我们进行关联,可以从分类导向平台,通过平台过滤商品(2)平台属性添加按照提供的属性进行添加更改修改AB:改为价格:修改尺寸:修改长度:为机身存储:机身内存就是机身存储:重复了,可以删除这个机身存储添加cpu型号:商品spu管理添加销售属性信息。

2024-07-04 23:33:29 416

原创 尚品汇-(十一)

这个页面选择了手机之后,会调用查询分类品牌的接口,显示品牌,在分类品牌中添加了两个品牌后也会在这里显示出来销售属性名称需要查询base_sale_attr表:实体类:BaseSaleAttr加载销售属性创建mapper:BaseSaleAttrMapper继续在MangeService添加接口实现类。

2024-07-03 23:41:24 393

原创 尚品汇-(十)

MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。

2024-07-01 23:58:59 1096

原创 尚品汇-(九)

创建实现类:BaseCategoryTrademarkServiceImpl。创建mapperBase:CategoryTrademarkMapper。创建接口:BaseCategoryTrademarkService。查询品牌的时候有好几种方式,我们用selectBatchIds。创建mapper:BaseTrademarkMapper。创建接口BaseTrademarkService。实体类:BaseTrademark。点击三类下拉框后就会查询分类品牌。删除后,再关联就多了关联选项。

2024-06-30 16:19:47 244

原创 尚品汇-(八)

销售属性销售属性,就是商品详情页右边,可以通过销售属性来定位一组spu下的哪款sku。可以让当前的商品详情页,跳转到自己的“兄弟”商品。一般每种商品的销售属性不会太多,大约1-4种。整个电商的销售属性种类也不会太多,大概10种以内。比如:颜色、尺寸、版本、套装等等。不同销售属性的组合也就构成了一个spu下多个sku的结构。因此,在制作spu之前要先确定当前商品有哪些销售属性!

2024-06-28 23:42:06 345

原创 尚品汇-(七)

全局配置类实现包名:创建CorsConfig类。

2024-06-26 23:02:50 786

原创 尚品汇-(六)

CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。- 浏览器端:不用考虑目前,所有浏览器都支持该功能(IE10以下不行)。整个CORS通信过程,都是浏览器自动完成,不需要用户参与。- 服务端:进行相关设置。

2024-06-24 22:48:22 203

原创 尚品汇-(五)

改变了数据库的结果,我们需要往ES中推送数据,为了更好的在两个服务建解耦,无论是依赖它调用还是Feign调用,都有依赖性,最终要保证原子性,保证原子性,如果一个不成功会影响其他的操作,这个是不允许的,我们会用到一种方式消息队列,完成数据修改,发送消息到消息队列,ES中的索引库会监听消息对列,进而操作索引库,达到数据同步。根据一级分类Id 查询二级分类数据:getCategory2/{category1Id}随着分类的增加,下面的属性会逐渐增多,走到哪一级就会显示哪一级的修改。--三级下拉列表-->

2024-06-23 19:50:31 938

原创 尚品汇-(四)

一般情况可以分为两级或者三级。咱们的项目一共分为三级,即一级分类、二级分类、三级分类。比如:家用电器是一级分类,电视是二级分类,那么超薄电视就是三级分类。数据库结构。

2024-06-22 18:58:58 723

原创 尚品汇-(三)

这里我们是Maven创建的项目,想要项目变成SpringBoot的项目,需要引入SpringBoot父工程:也可以通过SpringBoot的方式创建项目。点击common,选择New–>Module,搭建过程同common-util。修改pom:不声明就是jar,可以声明一下,说明他是jar包。引入依赖管理:这里是对依赖进行管理,并不是引入实际的依赖。导入实体类:给的资料中,搭建过程同common父模块。RedisConfig :Redis配置类,序列化。Maven:仓库地址:这里是腾讯云仓库。

2024-06-22 12:16:06 608

原创 尚品汇-(二)

本地域名解析器:当我们在浏览器输入域名的时候,它首先找的不是远程的DNS,而是去本地的host中去找这个域名有没有对应的,如果有对应的,那么就根据对应的ip进行访问。

2024-06-16 13:46:03 1149

原创 尚品汇-(一)

为了防止出现问题:可以设置快照:保存虚拟机快照。可以稍后配置镜像:选第二个。重启网卡:有两个命令都可以。不选择界面的,选择基础的。

2024-06-12 23:42:00 370

原创 SpringCloud-面试篇(二十六)

(1)Sentinel核心API-ProcessorslotChain

2024-06-12 21:36:09 107

原创 SpringCloud-面试篇(二十五)

gateway可以基于redis可以实现限流,但是我们不去做,因为依赖第三方组件redis,会给redis带来压力,这种限流比较单一,Sentinel的限流比较丰富,强大。滑动窗口有时候,也可能出现问题比如在1250-2100之间才850放行了四次请求,虽然解决了固定窗口的问题,但是有时候也出现问题,这个时候可以再进行区间数细分可以解决。固定窗口计数器算法,可能再其他的时间两个窗口的交界内超过了请求阈值 ,所以就有了滑动窗口算法。滑动窗口会计算滑动区间的是否超过阈值,超过则丢弃。

2024-06-11 23:29:40 209

原创 SpringCloud-面试篇(二十四)

当服务原来越多时,除了服务注册以外,还有服务的定时更新,心跳啊等等各样的请求,压力是很大的,nacos如何抗住折磨打的并发压力呢 ,一方面nacos将来肯定做集群,做负载均衡分担压力,另一方面在代码层面做很多优化,从而提升代码执行时的性能,下面分析nacos的源码,看一下做了那些优化。跟新的时候是,copy一份原来的数据,然后在这copy的数据中做修改,然后再覆盖原来的数据,当copy过来做修改的过程中,其他的微服务要来读取注册表的时候读取到的就是旧的实力列表,不会受到影响,就可以避免读写的操作。

2024-06-10 16:05:11 497

原创 SpringCloud-面试篇(二十三)

就是保存在注册表当中,只有把服务的信息保存下来了,将来消费者获取服务时,才能够在注册表里得到服务的信息:ip,端口等才能进行访问,nacos是如何创建注册表呢?环境隔离开了,在这个namespace下有很多服务,这些服务可以继续去分,进行分组,按照业务模块,比如交易模块涵盖微服务很多:订单有关,支付有关等等相关的服务作为一个组。下面是nacos的页面展示的是nacos的控制台,控制台页面会向服务端发送ajax的请求,进行交换,交互的就是那些controller。这么多服务做配置管理该怎末办,需要。

2024-06-04 23:21:37 645 1

原创 SpringCloud-高级篇(二十二)

前面解决了消息的可靠性、消息的延迟问题,消息的堆积的问题,下面研究mq可用性、并发能力问题,这就需要mq集群来实现了。

2024-02-12 21:03:32 516

原创 SpringCloud-高级篇(二十一)

前面解决了消息的可靠性、消息的延迟问题,下面研究一下消息的堆积的问题: 消息产生堆积,上限后,最早的消息成为死信,有消息被丢弃,这对安全性较高的业务中是不行的,需要去解决消息堆积的问题。前两种是消费者角度,第三种是队列的角度 ,提高队列的容积,可以缓解消息堆积问题开启线程池也是有限制的,如果消息很多,需要开启很多很多线程,开启的线程很多对cpu是一种浪费,cpu需要在多个线程之间做上下文的切换,因此这种方案适合,这个消息处理的业务耗时比价长的情况,可以开多个线程,cpu可以并行处理多个业务我们下面将一下第三

2024-02-12 12:19:37 445

原创 SpringCloud-高级篇(二十)

下面我们研究MQ的延迟性问题。

2024-02-12 11:31:20 365

原创 SpringCloud-高级篇(十九)

我们已经学过使用 SpringAMQP去收和发消息,但是发和收消息是只是MQ最基本的功能了,在收发消息的过程中,会有很多的问题需要去解决,下面需要学习rabbitMQ的高级特性去解决死信交换机:这个可以帮助我们实现消息的延迟的特性惰性队列:可以去解决成百万更高消息堆积的问题MQ集群:解决单点MQ的可用性问题。

2024-02-09 10:47:08 1357

原创 SpringCloud-高级篇(十八)

修改商品的业务不需要修改,来了以后直接写数据库,写完结束,这个时候canal监听数据库的变化发现数据库变了之后,直接通知缓存服务完成更新,做到了代码0侵入。上面我们只是对Redis跟JVM做了修改,nginx本地缓存没有修改,浏览器用户前端页面上不太容易看到,只能查看看接口直接访问。如果openResty也做了集群,nginx也要修改负载均衡的算法,让查询你一个商品,请求的是同一个openResty。这个是直接查询接口,查询tomcat返回的数据,页面进行了修改,这样则可以证明,Redis和tomcat。

2024-01-28 18:07:11 604

原创 SpringCloud-高级篇(十七)

初始化类的时候需要实现一个InitialializingBean,需要实现里面的一个方法,afterPropertiesSet方法,会在这个类创建之后,成员变量初始化之后@Autowire注入以后去执行,需要在这个方法的内部初始化缓存的业务逻辑,就能实现项目已启动就能做初始化。在nginx里有一个master进程,多个worker进程,多个worker进程可以处理用户请求,他们可以共享,相等于共享内存了,这只限于nginx内部做共享,如果部署多态openResty,他们之间是无法共享的。

2024-01-28 15:53:08 769

原创 SpringCloud-高级篇(十六)

前面学习了Lua的语法,就可以在nginx去做编程,去实现nginx类里面的业务,查询Redis,查询tomcat等 ,业务逻辑的编写依赖于其他组件,这些组件会用到OpenResty的工具去实现。

2024-01-28 12:49:54 1129

原创 SpringCloud-高级篇(十五)

下面要做的是Nginx的业务集群 ,在里面实现本地缓存,本地缓存未命中查Redis,Redis未命中查tomcat,这样的业务,在nginx集群中实现的,通过nginx来做业务编码,不在是用tomcat做编码了前面利用tomcat做编码,其实是用java语言去写业务逻辑,nginx中用一种新的语言去写业务逻辑Luanginx和tomcat都是Web服务,java和Lua是开发的语言。

2024-01-21 14:36:12 612

原创 SpringCloud-高级篇(十四)

缓存的作用是其实就是为了减轻对数据库的压力,缩短服务响应的时间,从而提高整个服务的并发能力,Redis单节点并发其实已经很高了,但是它依然有自己的上限,随着互联网的发展,用户低量越来越大,想淘宝、京东、12306这样的网站,它们的并发量,往往能达到亿级一上的并发量,这个时候仅仅使用Redis是不能够满足高的并发需求的。下面学习的多级缓存正是为了应对亿级流量的并发。

2024-01-20 18:03:02 915

原创 SpringCloud-高级篇(十三)

前面的主从集群可以应对Redis高并发读的问题,Redis主从之间可以做同步,为了提高主从同步时的性能,单节点Redis的内存不要设置太高,如果内存占用过多,做RDB的持久化,或者做全量同步的时候,导致大量的IO性能会有一定的下降, 如果单节点Redis的内存降低了,比如说只能存10g,20g,那么有海量的数据要存储的时候改怎么办?这个问题解决不了,虽然应对高并发读的问题,如果我写的问题高并发也挺高,该怎么办,这就需要Redis的分片集群来解决。

2024-01-07 18:27:03 1110

原创 SpringCloud-高级篇(十二)

在主从集群中slave节点发生了宕机,不用担心,只要它重启就能从master节点上完成数据的同步,恢复数据,如果宕机的不是slave而是master,是不是master重启就可以呢?如果你做了master节点的数据持久化,如果你重启,数据也不会丢失,但是在master宕机这一段时间,重启数据恢复分过程当中,用户是无法执行写操作的,因为master挂了,整个集群的可用性就下降了,不能做写,只能做读了,这是我们不想看到的,我们要的是整个集群是一直可用的。

2024-01-07 12:40:35 482

原创 SpringCloud-高级篇(十一)

前面我们实现了Redis的持久化,解决了数据安全问题,但是还有需要解决的问题,下面学习Redis的主从集群,解决Redis的并发能力的问题Redis的集群往往是主从集群,Redsi为什么做成主从的集群,而不做成传统负载均衡的集群呢?因为Redis应用当中往往都是读多写少的场景,查询比较多,增删改比较少,我们更多应对的是读的压力,做读写分离,一主多从,多个从节点共同承担读的请求,并发能力能够做到很大的提升,这就是为啥搭建主从集群需要保证客户端无论访问那个从节点都要拿到相同的结果修改每个配置文件。

2024-01-06 21:58:31 1102

原创 SpringCloud-高级篇(十)

缓存大家都不陌生,在企业里面只要做缓存都会用到Redis,我们在使用的时候都是做的单节点部署,单节点部署是存在一些问题的,分布式缓存正是Redis的集群,正是为了解决单节点部署的问题的单节点Redis存在的问题:Redis是基于内存存储,并发能力非常强但是毕竟单节点,到了618等节日电商场景,还是无法满足高并发场景。

2024-01-01 15:46:09 1080

简单模拟-学生信息管理系统窗体

面对C#初级学习学习者

2022-04-16

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除