- 博客(48)
- 收藏
- 关注
原创 优惠券功能、场景简单描述
优惠券是商家为了吸引消费者购买商品或服务而发放的一种凭证。消费者凭借优惠券可以在购买时享受一定的价格优惠,如折扣、满减、赠品等。优惠券的核心是简单来说就是如何通过,以及用户如何使用优惠券来。:优惠券需要设计得足够吸引人,让用户觉得使用优惠券能带来实际的好处,比如省钱或得到额外的价值。:优惠券要易于理解和使用,用户能够清楚地知道如何获取和使用优惠券,这样才能促使他们实际去使用,从而增加购买行为。
2025-02-02 21:47:09
404
原创 Redis篇 Redis如何清理过期的key以及对应的解决方法
在 Redis 中,可以通过特定的命令,使得 Key 在一定时间后,这对于非常有用。
2025-01-31 22:15:57
1791
原创 SpringCloud篇 微服务架构
上面这张图展示了(Monolithic Architecture)的。,其中。这是整个系统的中心,包含了所有的业务逻辑和用户界面。用户通过应用程序与系统进行交互,应用程序则负责处理用户请求并返回相应的结果。这些模块代表了应用程序中的不同功能部分。:可能包含用户管理、权限管理、系统设置等功能。:处理用户相关的操作,如注册、登录、个人信息管理等。:管理商品信息,包括添加、修改、删除商品等。这些模块虽然在同一个应用程序中,但它们之间可能存在一定的耦合,因为它们共享相同的数据库和缓存资源。
2025-01-31 10:37:27
823
原创 SpringBoot篇 单元测试 理论篇
简单来说,单元测试是对软件中的最小可测试单元进行检查和验证。在 Java 中,单元测试的最小单元是类。Spring Boot 提供了依赖,包含了等常用的测试框架。
2025-01-23 22:19:08
1227
原创 JavaRestClient 客户端初始化+索引库操作
ES官方提供了,用来操作ES。这些客户端的本质就是组装DSL语句,通过发送给ES。Elasticsearch目前,其java客户端有很大变化。不过大多数企业使用的还是8以下版本。
2025-01-12 10:22:44
697
原创 分布式事务介绍 Seata架构与原理+部署TC服务 示例:黑马商城
在分布式系统中,如果一个业务需要多个服务合作完成,而且每一个服务都有事务多个事务必须同时成功或失败,这样的事务就是分布式事务。其中的每个服务的事务就是一个分支事务。整个业务称为全局事务。打个比方:就像一个跨国连锁超市的库存管理系统。它在中国、美国、欧洲等地都有仓库和数据库来记录库存。当全球统一补货的事务发生时,涉及这些不同地区的库存更新操作,这就是分布式事务。所有地区的库存更新都成功,这个补货事务才算成功;只要有一个地区更新库存出现问题,整个补货事务就要回滚,保证各地库存数据不会因为部分成功而出现混乱。
2025-01-07 20:54:25
1561
原创 Lazy Queue队列模式
一般情况下,RabbitMQ会将接收到的信息保存在内存中以降低消息收发的延迟。但在某些特殊情况下,这会导致消息积压,比如:消费者宕机或出现网络故障消息发送量激增,超过了消费者处理速度消费者处理业务发生阻塞一旦出现消息堆积问题,RabbitMQ的内存占用就会越来越高,直到触发内存预警上限为了解决这个问题,从RabbitMQ的3.6.0版本开始,就增加了的模式,也就是惰性队列。惰性队列的特征如下:接收到消息后直接存入磁盘而非内存消费者要消费消息时才会从磁盘中读取并加载到内存(也就是懒加载。
2025-01-05 17:40:54
426
原创 RabbitMQ快速入门
对于小型企业而言,出于成本考虑,我们通常只会搭建一套MQ集群,公司内的多个不同项目同时使用。发送到交换机的消息,只会路由到与其绑定的队列,因此仅仅创建队列是不够的,我们还需要将其与交换机绑定。这里的用户都是RabbitMQ的管理或运维人员。:虚拟主机,起到数据隔离的作用。生产者投递的消息会暂存在消息队列中,等待消费者处理。,因此回到users菜单,你会发现当前用户已经具备了对/hmall。我们点击任意交换机,即可进入交换机详情页面。的隔离特性,将不同项目隔离。给每个项目创建独立的运维账号,将管理权限分离。
2025-01-02 18:04:43
1317
原创 MQ介绍+RabbitMQ安装
微服务一旦拆分,必然涉及到服务之间的相互调用,目前我们服务之间调用采用的都是基于的调用。这种调用中,调用者发起请求后需要服务提供者执行业务返回结果后,才能继续执行后面的业务。也就是说调用者在调用过程中处于阻塞状态,因此我们成这种调用方式为,也可以叫。在实际生活中,采用比较多:就如同打视频电话,。因此同一时刻你只能跟一个人打视频电话。:就如同发微信聊天,,你不需要立刻给对方回应。因此你可以多线操作,同时跟多人聊天。两种方式各有优劣,主要看实际业务的情况,如果,则选择,如果追求,并且,则应该选择。
2025-01-02 16:20:44
880
原创 微服务保护—Sentinel快速入门+微服务整合 示例: 黑马商城
Sentinel是阿里巴巴开源的一款服务保护框架,目前已经加入SpringCloudAlibaba中。官方网站:Sentinel 的使用核心库(Jar包):不依赖任何框架/库,能够运行于 Java 8 及以上的版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。在项目中引入依赖即可实现服务限流、隔离、熔断等功能。控制台(Dashboard):Dashboard 主要负责管理推送规则、监控、管理机器信息等。
2024-12-31 23:36:15
1069
原创 Nacos配置管理+共享配置、配置热更新
Nacos 配置管理是一个集中管理配置的工具。它把微服务的配置集中存放,方便管理。可以动态更新配置,配置变了,微服务能马上知道并更新,不用重启。还能进行版本控制,记录配置的历史版本方便回滚。并且可以对配置分组,区分不同环境或项目组的配置。同时有一定的权限控制保障配置安全。
2024-12-29 18:21:15
663
原创 网关的介绍+使用
路由过滤器,作用范围比较灵活,可以是任意指定的路由Route.:全局过滤器,作用范围是所有路由,不可配置。自定义GlobalFilter比较简单,直接实现GlobalFilter即可,而且也无法设置动态参数在hm-gateway模块中创建一个名为filters包,包下创建类,里面实现即可// 全局过滤器 GlobalFilter@Component@Override// TODO 模拟登录校验逻辑//放行@Override//过滤器执行顺序,值越小,优先级越高。
2024-12-28 22:30:36
853
原创 OpenFeign快速入门 示例:黑马商城
所以我们使用OpenFeign只需要利用SpringMVC的相关注解来声明上述4个参数,然后OpenFeign基于动态代理帮我们生成远程调用的代码,我们就不用在写那繁琐的代码了,直接调用它帮我们生成的代码就行了,非常方便。feiqn替我们完成了服务拉取、负载均衡、发送http请求的所有工作,是不是看起来优雅多了。@FeignClient("item-service"):声明服务名称。并且这种调用方式比较复杂,一会儿远程调用,一会儿本地调用。因此,我们改变并优化远程调用的代码,让。实现了服务的远程调用。
2024-12-24 20:41:05
499
原创 黑马商城项目—服务注册、服务发现
然后到控制台去查看CartApplication和两个ItemApplication是否有sql语句输出,有则代表负载均衡成功,有一个启动类没sql语句输出则代表有问题。接下来,服务调用者cart-service就可以去订阅item-serivce服务了。,找到handCartItems,对原来的远程调用进行一个修改,之前调用时我们。的算法,从多个实例中挑选一个去访问。我们把item-service注册到Nacos,访问nacos控制台,可以发现服务注册成功。为了测试一个服务多个实例的情况,我们再。
2024-12-23 14:35:26
804
原创 搭建Nacos注册中心
目前开源的注册中心框架有很多,国内比较常见的有:Eureka:Netflix公司出品,目前被集成在SpringCloud当中,一般用于Java应用Nacos:Alibaba公司出品,目前被集成在SpringCloudAlibaba中,一般用于Java应用Consul:HashiCorp公司出品,目前集成在SpringCloud中,不限制微服务语言以上几种注册中心都遵循SpringCloud中的API规范,因此在业务开发使用上没有太大差异。
2024-12-23 09:56:35
440
原创 微服务拆分 示例:黑马商城拆分商品服务模块
在实际操作中,我们首先需要确定在项目的哪个阶段进行服务拆分最为合适。例如,是在项目初期就进行拆分,还是在项目发展到一定规模后再进行拆分。选择合适的时机可以避免不必要的风险和成本。完全解耦:每一个微服务都创建为一个独立的工程,甚至可以使用不同的开发语言来开发,项目完全解耦。:每个微服务的功能要相对独立,尽量减少对其它微服务的依赖,或者依赖接口的稳定性要强。Maven聚合:整个项目为一个Project,然后每个微服务是其中的一个Module。:每个微服务的职责要尽量单一,包含的业务相互关联度高、完整度高。
2024-12-22 18:36:20
1016
原创 黑马商城项目—服务调用
RestTemplate通过HTTP方法为常见场景提供了模板,此外还提供了支持不太常见情况的通用交换和执行方法。然而,它的配置不支持并发修改,因此它的配置通常是在启动时准备的。在这个过程中,item-service提供了查询接口,cart-service利用Http请求调用该接口。Spring给我们提供了一个RestTemplate的API,可以方便的实现Http请求的发送。之前我们完成了拆分购物车模块,但当我们进行测试查询时: 我们注意到,其中。其中提供了大量的方法,方便我们发送Http请求,例如。
2024-12-22 17:03:03
435
原创 Docker网络
Docker 容器网络模式是 Docker 容器配置中的一个重要部分,它决定了容器如何与外部世界以及其他容器进行通信;容器之间并不是物理隔离,但是它们彼此之间默认是不互通的,这也有助于保持每个容器的纯粹性,相互之间互不影响。其次,既然使用了容器,通常情况下,容器需要与宿主机通信,或者A容器与B容器通信而B不需要知道A的存在,或者A/B两容器相互通信,这样一来就用到了Docker的网络模式。其中,除了hmall以外,其它都是默认的网络dd和myn容器:3.将。
2024-12-20 11:05:27
497
原创 MybatisPlus介绍与应用
MybatisPlus不仅提供了BaseMapper,还提供了通用的Service接口及默认实现,封装了一些常用的service模板方法。通用接口为IService,默认实现为save:新增remove:删除update:更新get:查询单个结果list:查询集合结果count:计数page:分页查询由于Service中经常需要定义与业务有关的自定义方法,因此我们不能直接使用IService,而是自定义Service接口,然后继承IService以拓展方法。同时,让自定义的Service实现类继承。
2024-12-18 13:03:41
1118
原创 Mybatis的分页插件的使用方式
传递页码和每页多少条,返回值固定为PageResult,并且里面分别放入total(总记录数)和result(2.在项目中的Mapper层中对应的Mapper.xml中写动态SQL。4.最后在controller把service层的分页查询方法导入即可。通过拦截器对sql动态的添加limit,从而实现分页的效果。的插件,会把我们后面的一条SQL进行一个动态的拼接,3.在项目中的Serviceimpl层通过。使用mabatis中一个名为。1.先导入相关的依赖。
2024-11-10 18:37:22
252
原创 Swagger的介绍和使用方式+常用注解
使用Swagger你只需要按照它的规范去定义接口及接口相关的信息,就可以做到生成接口文档,以及在线接口调试页面.简单来说就是我们只需要知道使用Swagger可以帮助我们后端生成接口文档Swagger官网:因为单独使用Swagger会有些繁琐,所以用到了Knife4j框架Knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案。使用方式1.导入 knife4j的maven坐标(相关的依赖)2.在配置类中加入 knife4j相关配置。
2024-11-08 20:38:40
274
原创 @import导入样式以及scss变量应用与static目录
uni-scss页面里面定义样式变量直接把uni-scss页面里面定义的变量名拿过来即可,记得后面不要加东西,只要变量名即可common。
2024-09-06 15:34:19
935
原创 页面生命周期onLoad,onReady,onShow和onHide,onUnload和onPageScroll在vue3中组合应用
生命周期onLoad函数作用可以进行传参。
2024-09-04 14:39:58
1807
原创 使用defineExpose属性以及方法
父级里面拿到子组件里面的定义的变量和常量案例应用:先在子组件里定义一个常量,并导入ref响应状态,然后采用生命周期中的方法属性,该方法用于向外导出,把定义的常量或变量导出去,把常量放入中,格式是属性加值,但由于属性名和值是一样的,所以只写一个属性名即可updateCount()函数。
2024-09-03 21:58:56
779
原创 组件中emit的声明触发事件
作用是子组件里面向父级里面去返回,简单来说就是把数据返回给父级不能加双引号defineEmits属性声明一个要传递的事件名称defineEmits方法。
2024-09-02 22:26:48
514
原创 在组件中通过Props来传递数据
涉及到数据分配的话,一般都是父级向子级分配。先在子组件定义一个defineProps属性,里面放定义的属性(函数名),把子组件定义的属性(函数名)传过来,而后在父级这边定义输出显示的值即可,可以传多个属性名传图片属性也是类似的,先在父级那边把属性名拿过来,再把图片路径写好,最后在子组件那边src前面加冒号把属性名写上去即可
2024-09-01 11:00:36
510
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人