摘要:
分布式ID介绍 在分布式系统中,我们经常需要生成全局唯一的标识符,例如订单号,用户id,消息id等。这些标识符通常被称为分布式id。分布式id有以下几个常见的要求: 全局唯一:不同的节点或服务不能生成重复的id。 高性能:生成id的速度要快,不能成为系统的瓶颈。 低延迟:生成id的过程要尽可能简单, 阅读全文
摘要:
BeanFactory与ApplicationContext的区别与联系 在SpringBoot项目中我们通过SpringApplication.run(SpringLearnApplication.class, args);来启动项目,实际上这个方法有一个返回值,类型为 ConfigurableA 阅读全文
摘要:
什么是数据一致性 我们常说的数据一致性指的是在程序运行过程中本地缓存、分布式缓存、数据库三者之间的数据一致性 常见的本地缓存有 hashmap、currenthashmap、guava cache、caffeine 分布式缓存常见的有 redis、memcache 常见数据不一致常见有: 本地缓存与 阅读全文
摘要:
SpringBoot外部化配置定时任务cron表达式 背景 在日常开发中我们经常会使用到定时任务的情况,SpringBoot为我们很方便的集成了定时任务。我们只需要简单的几部就可以配置好一个定时任务。 @Component public class LocationTask { @Scheduled 阅读全文
摘要:
MySQL带排序的分页查询优化 需求 在日常开发中,经常会遇到这么一种情况,一张表的数据量较大(500万左右)的时候,对其进行分页查询的时候,在分页比较深的情况下,查询效率会急剧下降。对于这种情况,我们需要做一些分页查询的优化。 准备 创建脚本 CREATE TABLE student ( id I 阅读全文
摘要:
SpringSecurity 实战 前言 本文通过一系列章节介绍SpringSecurity的基础用法(基本认证、filter链、密码加密、rememerMe、会话管理、CSRF、授权、oauth2)以及项目中的实践使用场景(多因子认证、JWT、SSO单点登录)。本文示例代码使用kotlin,参考书 阅读全文
摘要:
《1453:君士坦丁堡之战》 《1453:君士坦丁堡之战》是一本关于君士坦丁堡沦陷的历史非小说类图书。本书详细讲述了导致君士坦丁堡被奥斯曼土耳其人占领的事件,以及拜占庭帝国的终结。作者通过全面而深入的分析,介绍了宗教、经济、外交等政治、军事和社会因素对君士坦丁堡沦陷的影响。 此外,本书还详细讲述了沦 阅读全文
摘要:
化妆公式 化妆=50%审美+30%技术+20%产品 我们在学习化妆的时候需要知道化妆不是美图秀秀,不能解决所有的问题。 比方说有的同学想通过化妆让自己脸变小:如果你用手摸一摸自己的脸很容易摸到下颌骨,那么说明你们的脸大是由你的骨骼决定的,那么只能通过一些骨骼整形手上来解决。 如果长期使用一边吃东西那 阅读全文
摘要:
前言 SpringMVC是我们平时用的最多的异步编程框架,但是我们在使用的时候基本上只是用到了它的同步编程。一般情况下是够用的,但是在并发量比较大的时候可能就不会够用了,因为一个请求会占用一个tomcat线程,这个时候我们可以尝试使用异步编程的方式来提高吞吐量。 环境准备 maven依赖: <dep 阅读全文
摘要:
JAVA集合 说说有哪些常见集合? 集合相关类和接口都在java.util中,主要分为3种:List(列表)、Map(映射)、Set(集) 其中Collection是集合List、Set的父接口,它主要有两个子接口: List:存储的元素有序,可重复。 Set:存储的元素不无序,不可重复。 Map是 阅读全文
摘要:
前言 前段时间为了学习k8s集群搞了三台树莓派作为服务器,现在空闲了出来。因为它的功耗比较低,所以想着来弄一个web服务器搭一个博客服务。这里有一个需要解决的问题就是我家宽带没有公网地址,所以只能选择内网穿透。我这里选择花生壳,一个月有1G的免费流量。 我的腾讯云服务器还有2年多到期,到时候续费太贵 阅读全文
摘要:
前言 在日常开发中,我们经常会用到事件总线,SpringBoot通过事件多播器的形式为我们提供了一个事件总线,但是在开发中我们经常会用到其他的实现,比如Guava、Disruptor的。我们将基于SpringBoot封装一套底层驱动可扩展的,统一api的事件驱动组件。 环境准备 jdk1.8 spr 阅读全文
摘要:
原文地址:kubernetes入门教程 简介 Kubernetes 是一个开源的容器编排引擎和容器集群管理工具,用来对容器化应用进行自动化部署、 扩缩和管理。 Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有8个字符。 Google 在 阅读全文
摘要:
前言 之前项目中由于几张表的数据量特别的大,在查询的时候特别耗时,所以决定对其进行分表处理。考虑到项目中用的MyBatis作为ORM框架,所以便决定使用它的插件功能来实现动态的替换查询的表来实现分表功能。 功能实现 整体的目录结构如下 TableShard :注解,用来标记需要分表的接口或者类 几个 阅读全文
摘要:
前言 我们知道在mysql中存在四种隔离级别(读未提交、读已提交、可重复读、序列化),它默认的就是隔离级别就是可重复读,它能够解决脏读、不可重复读问题,并且在innodb引擎下能部分解决幻读问题。在mysql innodb存储引擎下RC(读已提交),RR(可重复读)基于MVCC(多版本并发控制)进行 阅读全文
摘要:
前言 在日常开发中常常需要引入一些其他依赖组件,但是准备配置文件却是一件麻烦的事情,本文旨在整理收集一些日常开发中需要用到的一些组件的配置。 SpringBoot整合Mybatis 整体目录结构如下 pom.xml 添加mysql、mybatis相关依赖 <dependency> <groupId> 阅读全文
摘要:
前言 我们在做日常开发中经常会进行数据库的操作,ORM框架可以帮助我们更便捷的进行数据的操作。SpringDataJPA就是我们经常用到的ORM框架,我们只需要定义一些实体类以及实现一些接口,它便为我们生成了一些丰富的SQL操作功能。但是如果涉及到多表动态查询, JPA 的功能就显得有些捉襟见肘了, 阅读全文
摘要:
前言 我们在日常开发中经常会用到一些中间件,用docker快速部署是一个不错的选择。本帖将记录一些日常开发中用到的一些软件的docker部署命令,方便查阅。 PostgreSql docker run --name dockerPG11 -e POSTGRES_PASSWORD=123456 -p 阅读全文
摘要:
前言 由于客观原因(穷)导致博客首页加载时间有点慢,大概需要3秒才能加载出服务端渲染的基础页面。所以想着能够提高首页加载速度,我决定在nginx上做个缓存。为了不影响内容的及时更新,我设置的缓存的有效期仅为10分钟。这样导致在缓存过期后第一次加载页面会cache miss,所以为了解决这个问题。我决 阅读全文
摘要:
前言 reids是我们在进行后端开发的时候常用到的一个中间件,常用于实现分布式缓存,分布式锁。我们在SpringBoot中可以很方便的通过stater来集成redis。在Quarkus中官方为我们提供了redis的client虽然比起Spring用起来略显简陋但是稍微改造下也能满足我们日常需要。 准 阅读全文