随笔分类 -  SpringBoot

摘要:1. 简介 Caffeine是一个用于Java应用程序的高性能缓存框架。它提供了一个强大且易于使用的缓存库,可以在应用程序中使用,以提高数据访问的速度和效率。 下面是一些Caffeine缓存框架的主要特点: 高性能:Caffeine的设计目标之一是提供卓越的性能。它通过使用高效的数据结构和优化的算法 阅读全文 »
posted @ 2025-01-06 22:59 张铁牛 阅读(56) 评论(0) 推荐(0) 编辑
摘要:1. 简介 Liquibase是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据)都保存在XML文件中,便于版本控制。 Liquibase使参与应用程序发布过程的任何人都可以轻松地: 不依赖于特定的数据库,Liquibase会自动适配目标数据库进行脚本初 阅读全文 »
posted @ 2022-09-10 15:03 张铁牛 阅读(2257) 评论(0) 推荐(2) 编辑
摘要:1. 简介 Canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费功能。 工作原理 Mysql主备复制原理 MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以 阅读全文 »
posted @ 2022-06-15 00:14 张铁牛 阅读(2847) 评论(0) 推荐(3) 编辑
摘要:1. 简介 我们在上一篇博文中遗留了一个小问题,就是虽然TTL + DLX能实现延迟队列的功能,但是有两个问题。 首先业务场景为:比如海底捞预约,每个人预约的时间段不一致,有个可能一个小时后,有的可能三个小时等,当快到预约时间点需要给用户进行短信通知。 通过给Queue设置过期时间的方式不现实,因为 阅读全文 »
posted @ 2021-09-16 23:34 张铁牛 阅读(2467) 评论(4) 推荐(7) 编辑
摘要:1. 简介 死信队列,简称:DLX,Dead Letter Exchange(死信交换机),当消息成为Dead message后,可以被重新发送到另外一个交换机,这个交换机就是DLX。 (一般会将DLX和与其binding 的 Queue,一并称为死信队列或DLX,习惯而已,不必纠结) 那么什么情况 阅读全文 »
posted @ 2021-09-16 00:06 张铁牛 阅读(660) 评论(0) 推荐(3) 编辑
摘要:1.简介 为什么要对消费端进行限流? 其实很好理解,比如我们常能接触到的消费场景:春运期间12306火车票的抢购,双11期间的下单等。这些场景都有一个共同点就是都会导致短暂时间内请求数激增,如果我们的Consumer最多只支持每秒1000的QPS,而由于请求的激增导致每秒2000甚至更多的并发,此时 阅读全文 »
posted @ 2021-09-12 15:59 张铁牛 阅读(1189) 评论(2) 推荐(1) 编辑
摘要:1. 简介 MQ虽然帮我们解决了很多问题,但是也带来了很多问题,其中最麻烦的就是:如何保证消息的可靠性传输。 我们在聊如何保证消息的可靠性传输之前,先考虑下哪些情况下会出现消息丢失的情况。 首先,上图中完整的展示了消息从生产到被消费的完整链路,我们通过图列举下各种情况。 Producer在把Mess 阅读全文 »
posted @ 2021-09-12 12:47 张铁牛 阅读(1630) 评论(4) 推荐(5) 编辑
摘要:1. 简介 MQ(Message Queue)消息队列,是基础数据结构中“FIFO(先进先出)”的一种数据结构。 一般用来解决应用解耦,异步消息,流量削峰等问题,实现高性能,高可用,可伸缩和最终一致性架构。 应用解耦 MQ相当于一个中介,生产方通过MQ与消费方交互,它将应用程序进行解耦合。 异步消息 阅读全文 »
posted @ 2021-09-09 23:28 张铁牛 阅读(201) 评论(0) 推荐(4) 编辑
摘要:1. 简介 我们在之前的博文中讲解了如何使用redis实现分布式锁,其实除了 redis 还有 zookeeper 也能实现分布式锁。 废话不多说,直接上图。 从整个流程中可以看出,zk实现分布式锁,主要是靠zk的临时顺序节点和watch机制实现的。 2. quick start Curator 是 阅读全文 »
posted @ 2021-09-06 22:54 张铁牛 阅读(684) 评论(0) 推荐(5) 编辑
摘要:1. 简介 zookeeper是一个开源的分布式协调服务, 提供分布式数据一致性解决方案,分布式应用程序可以实现数据统一配置管理、统一命名服务、分布式锁、集群管理等功能. ZooKeeper主要服务于分布式系统,使用分布式系统就无法避免对节点管理的问题(需要实时感知节点的状态、对节点进行统一管理等等 阅读全文 »
posted @ 2021-08-31 23:01 张铁牛 阅读(529) 评论(0) 推荐(1) 编辑
摘要:1. 简介 官方地址 MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。 MinIO是一 阅读全文 »
posted @ 2021-08-23 23:07 张铁牛 阅读(6320) 评论(1) 推荐(3) 编辑
摘要:1. 简介 布隆过滤器是防止缓存穿透的方案之一。布隆过滤器主要是解决大规模数据下不需要精确过滤的业务场景,如检查垃圾邮件地址,爬虫URL地址去重, 解决缓存穿透问题等。 布隆过滤器:在一个存在一定数量的集合中过滤一个对应的元素,判断该元素是否一定不在集合中或者可能在集合中。它的优点是空间效率和查询时 阅读全文 »
posted @ 2021-08-16 22:21 张铁牛 阅读(832) 评论(0) 推荐(2) 编辑
摘要:1. 简介 随着技术的快速发展,业务系统规模的不断扩大,分布式系统越来越普及。一个应用往往会部署到多台机器上,在一些业务场景中,为了保证数据的一致性,要求在同一时刻,同一任务只在一个节点上运行,保证同一个方法同一时刻只能被一个线程执行。这时候分布式锁就运用而生了。 分布式锁有很多的解决方案。常见的有 阅读全文 »
posted @ 2021-08-16 00:46 张铁牛 阅读(3163) 评论(0) 推荐(2) 编辑
摘要:1. 简介 当我们对redis的基本知识有一定的了解后,我们再通过实战的角度学习一下在SpringBoot环境下,如何优雅的使用redis。 我们通过使用SpringBoot内置的Redis注解(文章最后有解释)来操作User相关的信息, 再通过Redis工具类的方式操作Role相关信息来全面的学习 阅读全文 »
posted @ 2021-08-13 23:31 张铁牛 阅读(5278) 评论(2) 推荐(5) 编辑
摘要:1. 简介 我们都知道前台的验证只是为了满足界面的友好性、客户体验性等等。但是如果仅靠前端进行数据合法性校验,是远远不够的。因为非法用户可能会直接从客户端获取到请求地址进行非法请求,所以后台的校验是必须的;特别是应用如果不允许输入空值,对数据的合法行有要求的情况下。 2. 开撸 2.1 项目结构 结 阅读全文 »
posted @ 2021-08-08 01:25 张铁牛 阅读(1066) 评论(2) 推荐(2) 编辑
摘要:1. 简介 通过了解SpringBoot的原理后,我们可以手撸一个spring-boot-starter来加深理解。 1.1 什么是starter spring官网解释 starters是一组方便的依赖描述符(根据功能特点将用到的依赖标记封装到同一个pom中),可以将其包含在应用程序中。 通过sta 阅读全文 »
posted @ 2021-08-03 23:51 张铁牛 阅读(916) 评论(0) 推荐(3) 编辑
摘要:1. 简介 通过源码探究SpringBoot的自动装配功能。 2. 核心代码 2.1 启动类 我们都知道SpringBoot项目创建好后,会自动生成一个当前模块的启动类。如下: import org.springframework.boot.SpringApplication; import org 阅读全文 »
posted @ 2021-08-02 22:47 张铁牛 阅读(774) 评论(1) 推荐(6) 编辑
摘要:1. 简介 @Import导入的类会被Spring加载到IOC容器中。而@Import提供4中用法: 导入Bean 导入配置类 导入 ImportSelector 实现类。一般用于加载配置文件中的类 导入 ImportBeanDefinitionRegistrar 实现类。 2. 定义 @Impor 阅读全文 »
posted @ 2021-08-01 20:22 张铁牛 阅读(412) 评论(0) 推荐(2) 编辑
摘要:1. 简介 @Conditional注解在Spring4.0中引入,其主要作用就是判断条件是否满足,从而决定是否初始化并向容器注册Bean。 2. 定义 2.1 @Conditional @Conditional注解定义如下:其内部只有一个参数为Class对象数组,且必须继承自Condition接口 阅读全文 »
posted @ 2021-08-01 18:27 张铁牛 阅读(524) 评论(2) 推荐(2) 编辑

点击右上角即可分享
微信分享提示