自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(365)
  • 收藏
  • 关注

原创 SpringCloudAlibaba 2023.0.1、SpringBoot 3.2.5 - 项目完整搭建(Nacos、OpenFeign、Gateway、Sentinel)

c)点击 “创建配置”,然后就可以把 kt-gateway 微服务中的 application.yml 文件中的所有内容都放在 nacos 上进行统一管理,随后点击发布.这里需要配置路由规则,分别将将请求通过负载均衡引入到 kt-user 和 kt-product。b)接着分别给 kt-user 和 kt-product 引入 kt-feign 模块,如下。kt-product 微服务拿到 kt-user 微服务的数据,远程调用引入成功.a)在 feign 模块的 pom.xml 中引入如下依赖。

2024-05-12 22:35:04 1346 1

原创 点赞功能真的有必要上 Redis 吗?(Mongo、MySQL、Redis、MQ 实测性能对比)

除了单表操作比较耗时外,对于中小型项目而言,频繁的读写操作场景,使用 mongo 就够用了. 甚至都不用上 mq,更甚至有的场景下 redis 性能还不如 mongo...

2024-03-10 20:00:34 1611 1

原创 架构师成长之路 - 结合领域设计项目架构总结(持续更新,暂不公开)

每个人项目架构设计风格千姿百态,导致项目难以维护、可读性低... 于是将自己接触过的大型企业级项目经验总结一下,最终目的是为了提高我的团队协作效率,降低维护成本。

2024-01-24 15:00:56 357

原创 SpringCloudAlibaba 2021.0.1 - Java/Kotlin 项目完整搭建(Nacos + OpenFeign + Getway + Sentinel)

a)先创建一个空项目,名字自定义.b)在刚刚的空项目下创建整个项目的父模块c)父工程下的 src 可以删了,没用d)最后直接用 IDEA 打开空项目下的父工程(否则 Java 文件不生效)

2023-11-05 00:13:41 3240 2

原创 Prometheus 云原生 - 基于 file_sd、http_sd 实现 Service Discovery

我们知道在 Prometheus 配置文件中可以通过 static_configs 来配置静态地址来获取数据,但是在云环境下,特别是容器环境下,抓取的 地址 经常是变动的,也就是说,地址每次变动因此,我们不但需要去修改 prometheus.yml 文件,还需要重启 prometheus 来加载配置,十分麻烦.这个示例中,Prometheus 会每 10s 读取 '/root/prometheus/targets/' 目录下的所有以 .json 结尾的文件,获取最新的监控目标.

2024-07-14 22:56:07 893

原创 Prometheus 云原生 - 监控 Linux、MySQL、Redis、RabbitMQ、Docker、SpringBoot 3.x

docker restart 重启 Prometheus,接着在 Prometheus 的 Targets 就可以观察到。docker restart 重启 Prometheus,接着在 Prometheus 的 Targets 就可以观察到。docker restart 重启 Prometheus,接着在 Prometheus 的 Targets 就可以观察到。docker restart 重启 Prometheus,接着在 Prometheus 的 Targets 就可以观察到。Ps:这里有点问题。

2024-07-14 17:54:03 1632

原创 Prometheus 云原生 - Prometheus 数据模型、Metrics 指标类型、Exporter 相关

所有可以向 Prometheus 提供监控样本数据的程序都可以被称为一个 Exporter,而 Exporter 的一个实例被称为 Target.Exporter 可以用户自定义,也可以使用社区提供的,例如 MySQL_Exporter、Redis_Exporter、RabbitMQ_Exporter......Prometheus 通过轮询的方式,定期的从这些 target 中获取样本数据.

2024-07-14 13:54:40 1288

原创 Rainmeter - windows 美化、编写 .ini 文件实现自定义应用

这里我们可以任意选择 Windows 12X RE,右键点击 “打开皮肤目录”(下图中,我已经都是自定义的了,所以可能跟你的不太一样,不过自定义的方式都是一样~)a)自己多点点,多加载几个 .ini 文件,就会发现这些文件可能不是我们想要的 应用/图标,那我们怎么才能自定义呢?查看这些文件的 .ini 文件,点击 “加载”,就会显示在桌面,可以自己任意拖动,更改位置~c)安装成功之后,找到你需要提取的 .exe 文件的图标,右键点击 “属性”d)保存文件后,右键你的应用图标,点击刷新皮肤就可以看到效果啦~

2024-07-13 23:55:50 54

原创 Prometheus 云原生 - 微服务监控报警系统 (Promethus、Grafana、Node_Exporter)部署、简单使用

prometheus 是一个开源的系统监控和报警系统,本身是机遇 Go 开发的一套开源的系统监控报警框架和时序列数据库(TSDB)基本原理:通过 HTTP 协议周期性的抓取被监控组件的状态,任意组件只要提供对应的 HTTP 接口就可以接入监控,不需要任何的 SDK 或者其他集成过程. 这样非常适合做虚拟化环境监控,例如 VM、Docker、Hubernetes 等,被监控组件信息的 HTTP 接口叫做 exporter.

2024-07-13 17:37:37 1094

原创 谷粒商城 - 编写一个自定义校验注解

a)注解解释:这个注解表示使用该注解的注解应该包含在生成的Kotlin文档中。换句话说,当使用KDoc生成文档时,应用了 MustBeDocumented 的注解将会出现在文档中。这个注解定义了该注解是一个校验约束,并且指定了用来校验该注解的逻辑类。ListValueConstraintValidator::class 是一个自定义校验类(下文中详细讲)@Target这个注解定义了自定义注解可以应用的目标元素。可以是方法、字段、注解类型、构造函数、参数或类型使用。

2024-07-09 22:15:02 686

原创 MinIO - 服务端签名直传(前端 + 后端 + 效果演示)

传统的,我们有两种方式将图片上传到 OSS:a)前端请求 -> 后端服务器 -> OSS好处:在服务端上传,更加安全.坏处:给服务器带来压力.b)直接写在前端 js 代码中好处:效率高,不用给服务器带来额外压力.坏处:危险,用户直接可以看得到 OSS账号密码 信息.用户直接去服务器请求获取上传签名(账号密码加密生成的防伪签名,一般有过期时间),服务器就返回防伪签名,然后用户就可以拿着签名和要上传的文件,通过表单直接上传到 OSS 中.

2024-07-08 00:14:33 598

原创 阿里云 OSS - 开通到使用、服务端签名直传(前后端代码 + 效果演示)

传统的,我们有两种方式将图片上传到 OSS:a)前端请求 -> 后端服务器 -> OSS好处:在服务端上传,更加安全.坏处:给服务器带来压力.b)直接写在前端 js 代码中好处:效率高,不用给服务器带来额外压力.坏处:危险,用户直接可以看得到密钥信息.用户直接去服务器请求获取上传签名(账号密码生成的防伪签名,一般有过期时间),校验安全,服务器就返回该用户的防伪签名,然后用户就可以拿着签名和要上传的文件,通过表单直接上传到 OSS 中.

2024-07-07 18:38:03 901

原创 MinIO - 从 环境搭建 -> SpringBoot实战 -> 演示,掌握 Bucket 和 Object 操作

案例:获取 文件夹"dir1" 中的 "test.gif"文件 ,保存到本地磁盘的 "D:/tmp/" 路径下,并重命名为 "123.gif"案例:将本地 "D:/tmp/滑稽.gif" 图片上传到 MinIO 的 "dir1" 文件夹下,并重命名为 "test.gif"案例:给 MinIO 上的 "dir1" 文件夹下的 "test.gif" 文件生成一个带签名的 url 路径(get 请求).案例:查询 "dir1" 文件夹下的 "test.gif" 文件的状态。

2024-07-06 18:02:38 842

原创 谷粒商城 - 树形菜单递归流查询、三级分类数据查询性能优化、Jmter 性能压测

asSequence 在处理大数据量时速度更快的原因主要是因为它采用了惰性求值策略,避免了不必要的多次迭代和中间集合的创建(原本的集合操作,每进行例如 filter 就会创建中间集合),从而减少了内存和处理时间的消耗。最直接的方法就是先从数据库中查到所有一级分类数据,然后再拿着每一个一级分类 id 去查对应的二级分类数据,最后拿着每个二级分类的 id 去查对应的三级分类数据.一开始就从数据库中拿到 分类表 中的所有数据,然后在内存中操作,过滤出每一个一级分类下的所有二级分类数据.......

2024-07-06 13:25:09 1010

原创 设计模式 - 外观(门面)模式就要这样学!

外观模式(Facade):也叫门面模式,为子系统中的一组接口提供了一个一致的界面,此模式定义了高层接口,这个接口使得这堆子系统更加容易使用.通俗来讲,就是 外观类 对 大量的子系统又进行了一层封装,对外提供一个聚合了多个子系统功能的接口.例如上述我们讲的 用户表 分表的情况,就可以在外观类中提供一个 查询接口,这个查询接口的工作就是 调用三张表的 Repo,查询到数据,然后聚合成 VO,并返回. 这样将来外部只需要调用这个 外观类 的查询接口,就实现了复杂查询和组装操作,无需知道内部实现细节~

2024-06-30 19:16:10 351

原创 设计模式 - 桥接模式,就要这样学!

桥接模式:是一种结构性设计模式,将抽象(Abstraction)和实现(Implementation)放在两个不同的类层次中,使两个层次可以独立改变.抽象:抽象类:就是真个桥接的桥梁,里面聚合了行为的 实现接口 .精确抽象:是具体的逻辑实体,通过父类中提供的聚合行为接口来完成不同的交互.行为:实现接口:这里就定义了实体的行为. 此接口被抽象类聚合.具体实现:实现了具体的实体行为.

2024-06-30 15:29:39 410

原创 设计模式 - 原型模式,就该这样学!

原型模式(Prototype Pattern)是一种创建型的设计模式,运行一个对象通过复制自身的实例来创建新的对象. 简而言之,提供了一个快速创建新对象的方法,这个新对象是已有对象的精确复制品(根据具体的业务场景,决定是深拷贝 还是 浅拷贝).简化对象创建:复制复杂对象时,可以通过原型模式简化对象的复制过程,并且可以动态的配置对象状态.

2024-06-30 01:08:21 697

原创 Nginx - 反向代理、负载均衡、动静分离、底层原理(案例实战分析)

Nginx 是一个高性能的 HTTP 和反向代理服务器,特点是占用内存少,并发能力强(有报告表明支持高达 50 000 个并发连接数).b)何为正向代理代理客户端(在浏览器中配置代理服务器). 通过代理服务器进行互联网访问.例如,在中国大陆是不能直接访问到谷歌,因此就需要在浏览器中配置代理服务器,通过代理服务器来访问谷歌.c)何为反向代理。

2024-06-15 23:34:38 1087

原创 Vite - 项目打包从 0 到 1(完美解决打包后访问白屏问题)

在自定义配置的 router.js 中,配置 HashHistory (其他的不行!前端不要自己配置 server {proxy ...}!,否则会和上面配置冲突!使用 npm run build 命令打包,直接访问 dist/index.html 即可。Ps:主要 regenerator-runtime/runtime 在解决跨域警告。

2024-06-13 21:19:51 643

原创 Vite - 开发初体验,以及按需导入配置

a)这里我们只需要在 vite.config.js 文件中引入 elementPlus 的解析器,然后把她交给 Components 按需引入插件即可.之后就可以观察到项目中多出了 node_modules 文件(这个文件中存放的就是下载好的依赖),然后通过 npm run dev 就可以成功了。c)接下来你会发现,在 Home.vue 组件中使用 Foo.vue 组件,就可以不用写 import 了~a)例如我们在 Home.vue 文件中使用 ref 写了一个计数器(点击按钮,count++).

2024-06-09 16:20:20 1067

原创 SMS - 基于阿里云实现手机短信验证码登录(无需备案,非测试)

c)建议将短信服务专门到一个微服务中(专门用例处理调用第三方服务的接口),将来其他服务需要使用时,进行远程调用接口,解耦合(不要跟我张口闭口性能优化...).c)调整参数,点击发送请求,随后返回响应,显示 "ok",说明调试成功(此时你就可以看到发送到你手机上的验证码了).a)进入阿里云首页,然后从云市场中找到 “短信” (一定要从 云市场 去找短信服务,否则需要企业证明,备案)e)之后你就可以在控制台里搜索 “云市场”,找到你购买的服务。a)进入你购买的服务后,找到 API 接口,点击 “去调试”

2024-06-08 17:04:18 1362

原创 SpringCache 缓存 - @Cacheable、@CacheEvict、@CachePut、@Caching、CacheConfig 以及优劣分析

对于读多写少,一致性要求不高的数据,完全可以使用 SpringCache 来简化开发(只要缓存的数据有过期时间就可以).对于一致性要求高的场景,也没必要引入引入缓存,直接对数据库进行读写即可.特殊数据特殊处理.

2024-06-05 21:47:31 1236

原创 Redisson 分布式锁 - RLock、RReadWriteLock、RSemaphore、RCountDownLatch(配置、使用、原理)

目录前言Redisson 分布式锁环境配置1)版本说明2)依赖如下3)配置文件如下4)项目配置RLock1)使用方式2)加锁解释3)加锁时手动设置时间4)加锁时,到底要不要手动设置过期时间?(最佳实践)RReadWriteLock1)使用方式2)加锁原理RSemaphore1)使用方式2)信号原理RCountDownLatch1)使用方式2)原理解释前面讲过一篇 Redisson 分布式锁的底层原理,而这篇文章着重实战,因此对原理不清楚的,可以看看我之前的文章:http://t.csdnimg.cn/LU5

2024-06-04 22:55:51 1127

原创 项目总结 - 红皮书(从 0 到 1 自研)

目录专辑业务处理专辑新增或修改(图片的批量新增和修改),体现 @Transation 的使用评论楼中楼设计(避免递归查询)搜索推荐(用户画像)tag 专栏分类(体现 es 分词功能)专辑访问量、点赞量、收藏量、评论量的统计设计点赞收藏功能的实现数据存储处理(ES 到底需要保存哪些数据)如何控制 redis 的 list 中每一个元素的声明周期(体现优化业务)用户业务处理站内信设计好友离线消息处理jwt 令牌 + redis 实现用户信息鉴权Kotlin 语言设计DO & Entity 和 Repo 交互 ?

2024-06-03 00:59:08 67

原创 Protobuf - 语法、字段使用规则、注意事项

前面在讲gRPC 的时候有讲到Protobuf 的语法,但实际上远没有这么简单,有很多坑和注意事项,所以这篇文章就是来补坑的~

2024-05-25 12:48:25 1471 1

原创 Linux - 整理工作中常用的 Linux 命令(目录、文件、系统、进程、网络)持续更新~

整理了一下工作中常用的 Linux 命令(目录、文件、系统、进程、网络)

2024-05-16 17:51:16 1145

原创 微服务项目 - SpringBoot 2.x 升级到 SpringBoot 3.2.5,保姆级避坑

a)先说结论:收益没有特别直观的感受,并且迁移成本比较高,坑很多(有时候一个坑能卡上几个小时,别问我是怎么过来的),如果是新项目,可以试试~b)改造的项目是一个 AI 图片社区,基于 JDK17、SpringBoot 2.6.3、SpringCloud 2021.0.1 的微服务项目,主要使用到的中间件有 MySQL、MongoDB、Redis、RabbitMQ、ElasticSearch、Nacos... 就是说,五脏俱全,该有的坑都有了...

2024-05-11 22:38:12 877 4

原创 SpringBoot 3.2.5 + ElasticSearch 8.12.0 - SpringData 开发指南

因此,一般会将需要进行模糊查询的字段存 Document 中(es 就擅长这个),而其他数据则可以在 Document 中以 id 的形式进行存储. 这样就既可以借助 es 高效的模糊查询能力,也能减少为保证一致性而带来的系统开销. 从 es 中查到数据后,再通过其他表的 id 从数据库中拿数据即可(这点开销,相对于从大量数据的数据库中进行 like 查询,几乎可以忽略).a)CriteriaQuery:允许创建查询来搜索数据,而不需要了解 Elasticsearch 查询的语法或基础知识。

2024-05-11 17:04:07 1243 1

原创 RabbitMQ - 以 MQ 为例,手写一个 RPC 框架 demo

本篇文章来自于笔者之前写过的一个系列 —— “根据源码,模拟实现 RabbitMQ” 系列,不妨可以去看看~

2024-05-08 09:52:36 1096

原创 SpringData JPA - ORM 框架下,打造高效数据访问层

全英文名叫 Java Persistence API,就是 java 持久化 api ,是SUN公司推出的一套基于 ORM 的规范。ORM(Object Relational Mapping)表示对象关系映射. 简单来讲,通过 ORM,就可以把对象映射到关系型数据库中(为了不用 JDBC 那套方法来操作数据库).

2024-05-03 17:35:14 1318

原创 设计模式 - 命令模式,就该这样学!

命令模式是一种行为型设计模式,主要就是将每种请求或对象封装为一个独立的对象,从而可以集中管理这些请求或操作,比如 多个操作打包成一个执行、请求队列化执行、对操作进行日志记录、撤销.......命令模式通过将请求的 发送者(客户端) 和 接收者(请求的执行者) 进行解耦,提高了更大的维护性和灵活性.例如,电视机和遥控器,我们就相当于客户端,通过 遥控器(命令调用者)上的按钮(具体命令),来操控电视(请求执行者)。

2024-04-24 23:47:35 464

原创 DDD 领域驱动设计 - Domain Primitive(Kotlin 落地实现)

让隐性的概念显性化、让隐性的上下文显性化、封装多对象行为......

2024-04-15 22:05:24 981

原创 PicGo + Gitee + VsCode - 搭建私人图床

本人是一个重度 vimer,并且喜欢客制化一些东西… Typora 固然好用,但不支持 vim…发现 vscode 中既可以使用 vim,也可以 md,用起来比较舒服.因此这里就搭建一个图床供 vscode 写博客使用.

2024-04-07 17:41:03 747

原创 注解式 WebSocket - 构建 群聊、单聊 系统

很久之前,咱们聊过 WebSocket 编程式的写法,但是有些过于繁琐,这次来看看更接近现代的注解式,构建 群聊、单聊 有多么便利.

2024-04-06 16:12:43 796 1

原创 SpringBoot 2.6.3 + ElasticSearch7.12.1 - SpringData 开发指南

这个东西就跟 JPA 的使用方式一样,只不过高版本的 SpringData Elasticsearch 没有给 ElasticsearchRepository 接口提供复杂搜索查询,建议还是使用 ElasticsearchTemplate。

2024-04-02 16:22:13 1513 1

原创 Kotlin,简直是 Java 的 Pro Max!(笔记4 协程篇)

协程就是一个轻量单线程通过快速切换来执行不同的任务,从而实现了非阻塞的并发执行 —— 我的总结

2024-03-21 17:46:03 1302

原创 Kotlin,简直是 Java 的 Pro Max!(笔记3 进阶篇)

a)拓展函数就是动态的给类添加方法.Java 中是不支持对系统的类进行拓展,而 Kotlin 支持.例如,统计一个 List 中,元素大于 0 的元素个数. 如果使用 Java,我们可能会创建一个 ListUtils 然后在里面编写这样一个方法.b)Kotlin 就可以拓展函数实现:创建一个 List.kt,职责就是对 List 进行拓展(创建新文件可使得拓展函数拥有全局访问域,不定义新文件也是可以的,但是郭霖大佬是建议定义新文件).

2024-03-20 23:27:04 726

原创 Kotlin,简直是 Java 的 Pro Max!(笔记2)

Kotlin 如下对应 Java 如下:@NotNullreturn aaa;可以看到,这里的 aaa 也是通过静态代码块初始化的.如果 Java 想要调用该类中的静态变量 aaa,需要通过 public 的 instance 实例才能调用到,如果在 Java 中想直接调用,可以通过 const 来解决.@NotNullstatic {可以看出,通过 const 直接将 aaa 修饰成 public.和上面的 object 定义几乎没区别.

2024-03-20 11:39:20 1063

原创 Kotlin,简直是 Java 的 Pro Max!(笔记1)

Java 虚拟机只认识 class 文件,并且不会关心 class 是 java 文件编译来的还是其他文件编译来的. 那么此时我们自己创造一个语法规则,再做一个编译器,就可以让我们的语言跑在虚拟机上.Kotlin 正是如此,运行前会先编译成 class,再供 Java 虚拟机运行.

2024-03-19 23:57:48 1221

原创 Gradle v8.5 笔记 - 从入门到进阶(基于 Kotlin DSL)

gradle:Gradle自动生成的项目缓存目录。.idea:这个是IDEA的项目配置目录,跟Gradle生成的没关系,无视掉就行。app:存放整个项目的源代码、测试等,这里面就是我们写代码的地方了(使用 gradle 命的方式创建会出现此模块,如果使用 IDEA 创建,则不会出该现模块)。build.gradle.kts:项目的gradle构建脚本。src:存放源代码和测试代码。main:编写所有项目核心代码。test:编写项目测试代码。

2024-03-19 22:06:28 1961

空空如也

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

TA关注的人

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