自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 跨服务HTTP请求和响应

getForEntity方法的返回值是一个ResponseEntity对象,在这个对象中还包含了HTTP消息头等信息,而getForObject方法返回的则是业务对象本身,这是两个方法组的主要区别。在RestTemplate中,默认情况下当请求状态码不是返回200时就会抛出异常并中断接下来的操作,如果要排除这个处理过程就需要覆盖默认的ResponseErrorHandler。

2023-12-05 00:46:20 41

原创 多租户机制

实现如何在多用户环境下公用相同的系统或程序组件,并且确保各个用户间数据的隔离性,多租户技术在公用的数据中心以单一系统架构与服务提供多数用户相同甚至可定制化的服务。

2023-12-04 23:26:28 43

原创 02 | 一条SQL更新语句是如何执行的?

本文介绍MySQL更新语句执行流程。解析器解析出更新语句,优化器选索引。执行器与存储引擎交互查找并更新行。引擎更新内存、记录redo log。两阶段提交写入binlog和redo log保证一致性。更新导致查询缓存失效。Redo Log是物理日志,WAL技术保证事务持久性。Binlog是逻辑日志,记录语句逻辑。两者配合可保证数据一致性。所以更新涉及解析、优化、引擎交互、日志等步骤,实现事务ACID,但查询缓存效果差。

2023-08-13 12:01:29 52

原创 01 | 一条SQL语句是如何查询的?

本文介绍了MySQL的内部逻辑架构,以及一个SQL查询语句的执行流程。MySQL可分为Server层和存储引擎层,Server层包含连接器、查询缓存、分析器、优化器、执行器等组件,实现核心服务功能和内置函数,以及跨存储引擎的处理。存储引擎层负责数据的存储和提取。详细剖析了连接器的身份验证、权限检查功能;查询缓存的工作原理及其局限性;分析器完成SQL语句的语法解析工作;优化器负责选择最优执行计划;执行器基于优化结果,调用存储引擎API执行SQL。另外,文章还介绍了如何权衡长短连接的利弊,以及长连接可能带来的内

2023-08-13 00:06:46 56

原创 几分钟,使用docker 或者 docker compose 部署elasticSearch7.17.1 和 kibana 7.17.1

一分钟(bushi,主要是拉镜像要时间),用docker 或 docker-compose 部署 elasticSearch 和 kibana

2023-04-03 22:20:00 338 1

原创 几分钟,搞定部署ElasticSearch7.17.1 和 kibana7.17.1

一分钟,带你安装 elasticSearch 和 kibana

2023-04-03 22:07:05 377 1

原创 Docker 安装

新手安装docker

2022-10-08 15:18:13 62

原创 互斥锁:解决原子性问题

互斥锁:解决原子性问题

2022-08-29 17:26:45 235

原创 Java 如何解决可见性和有序性问题

​java如何解决可见性和有序性

2022-08-24 18:21:27 410

原创 出现并发问题背后的原因

并发编程出现bug的原因

2022-08-22 22:50:29 385

原创 MyBatis-Plus,MetaObjectHandler没生效,完美解决

若依框架集成mybatis-plus,自动填充字段不生效

2022-08-08 21:43:44 3291 4

原创 GC的背景和一般原理

为什么会有Gc?本质上时内存资源的有限性,稀缺:CPU 、内存没有Gc,大伙手动释放。为什么不用引用计数?引用计数,即对象被引用的时候,引用加1,不用的时候引用减1。当计数为0的时候,对象为不可用,即会被GC清除掉,但是会有一个问题,A引用B,B引用A,那么A和B的计数永远不可能为0,B永远都被A引用,A也永远被B引用。类似于这种情况久而久之就会造成堆内存溢出的问题。因此Gc算法不采用这种算法,而是采用了一种叫做标记清楚算法。首先我们要先搞清楚什么是可达性算法。...

2021-05-21 12:22:12 84

原创 数据库的垂直拆分和水平拆分

在容量性能可用性运维成本这三方面已经难于满足互联网的海量数据场景,我们在单库单表数据量超过一定容量水位的情况下,索引树层级增加,磁盘IO也很可能出现压力,会导致很多问题。 从性能方面说,由于关系型数据库大多采用B+树类型的索引,在数据量超过阈值的情况下,索引深度的增加也将使得磁盘访问的IO次数增加,进而导致查询性能的下降;同时,高并发访问请求也使得集中式数据库成为系统的最大瓶颈。 从可用性方面来讲,服务化的无状态型,能够达到较小成本的随意扩容,这必然导致系统的最终压力都落在数据库之...

2021-05-16 22:15:46 1069

原创 阿轩的复习笔记--切片集群

多个实例生成RDB,数据量小很多,fork子线程也不会给主线程带来较长时间的阻塞纵向扩展 简单直接 但是受硬件和成本的限制横向扩展 面向百万千万级别的用户规模时,横向扩展3.0之后 Redis Cluster方案种,一个切片集群共有16384个哈希槽,把Redis 实例放在哈希槽中。cluster addslots 手动配置哈希槽手动分配哈希槽时,需要把16384个槽都分配完,否则集群无法正常工作redis-cli -h IP地址 -p 端口号 cluste...

2021-04-27 17:40:31 52

原创 阿轩的复习笔记--哨兵集群

多个实例组成哨兵集群,有哨兵实例出现故障挂掉,还能继续工作sentinel monitor <master-name> <ip> <redis-port><quorum>在配置哨兵 设置主库和端口 哨兵并不知道其他哨兵连接关系pub/sub机制和主库建立连接 就能从主库订阅消息,获得其它哨兵的连接消息。应用程序也会发消息,redis以频道的形式 ,同一频道才能相互发送。除了哨兵之间的连接,还需要跟从库建立连接,...

2021-04-27 17:13:47 55

原创 阿轩的复习笔记--哨兵机制

哨兵 主要负责的任务 监控 选主 和 通知监控:周期性地给所有主从库发送ping命令检测是否在线运行,若没在规定时间内相应,则被标记为下线状态;主库的话,就自动切换主库的流程选主通知 让从库执行replicaof,与新竹库同步 通知客户端,与新主库连接 误判:主库实际上没有下线,但是哨兵误以为他下线了。原因:误判一般会发生在集群网络压力较大、网络拥塞,或者是主库本身压力较大的情况下‘减少误判??哨兵机制。 多实例组成的集群模式...

2021-04-27 16:43:49 56

原创 阿轩的复习笔记-主从库数据一致性

Redis 高可靠性 数据少丢失 --AOP RDB 服务少中断 --增加符本冗余量 主库 写读操作从库 读操作主从库间如何进行第一次同步?启动多个Redis实例,通过replicaof命令形成主从库关系实例1(ip:172.16.19.3) 和实例2(ip:172.16.19.5),在实例2执行命令,2就变成1的从库replicaof 172.16.19.3 6379第一次同步分三阶段: 建立连接,协商同步-从库发psy...

2021-04-27 11:11:24 55

原创 阿轩的复习笔记--RDB

Redis 提供两个命令来生成RDB文件 save:在主线程执行,会导致阻塞 bgsave:创建子进程,专门用于写RDB,避免主线程阻塞,也是默认配置 在快照的期间,主线程修改数据怎么办?如果主线程修改数据,这块数据会被复制一份,生成副本,bgsave进程会把副本数据写入RDB文件。既保证快照的完整性,也允许主线程同时对数据进行修改。快照时长越快越好?虽然bgsave不阻塞主线程,如果频繁执行全量快照,也会带来两方面开销 大量数据写入磁盘,...

2021-04-27 10:37:35 53

原创 阿轩的复习笔记---AOF

不进行语法检查,所以写后日志,且还不会阻塞当前写操作AOF主线程两潜在风险 跟写回磁盘时机有关。 命令执行完就宕机,作缓存,还能从数据库读,作数据库,就没法恢复 日志写入磁盘导致后续操作无法执行 写回策略: Always 有慢速的落盘,影响性能 Everysec 一旦宕机对应数据就会丢失 No 前两者取个折中 AOF太大: 文件大小有限 文件太大追加命令,效率降低 发生宕机,恢复缓慢 重写机制: 多变一...

2021-04-27 10:10:31 72

原创 高速缓存(下)

不知道上篇文章还记得多少,咱们讲到,多核CPU的每个CPU核都有自己的L1 和 L2。L3和主内存是公用的。CPU Cache解决的内存访问速度和CPU的速度差距太大的问题,而多核CPU提供的是,在主频难以提升的时候,通过增加CPU核心来提升CPU的吞吐率的办法,我们把多核和CPU Cache两者议结合,怎么办,又来问题了,缓存一致性的问题。啥是缓存一致性呢,拿有两个核心的CPU来看,看下图。比方说,iphone降价了,把最新价格更新到内存,为了性能为题,采用写回策略,先写...

2021-04-11 01:07:19 66

原创 高速缓存(中)

学过java都知道volatile这个关键字。不知道也没关系,简单的说就是告诉JVM这个我声明的这个变量,你别去缓存里面读,直接去内存里读。来看一段小代码。public class VolatileTest {private static volatile int COUNTER = 0;public static void main(String[] args) {new ChangeListener().start();...

2021-04-11 00:30:06 86

原创 高速缓存(上)

现代CPU进行数据读取的时候,无论数据是否已经存储在Cache中,CPU始终会首先访问Cache,只有当CPU在Cache中找不到数据的时候,才回去访问内存,并将读取到的数据写入Cahce之中,当事件局部性原理起作用后,这个最近刚刚被访问的数据,会很快再次被访问,而Cache的访问速度远远快于内存,这样CPU在等待内存访问上的事件就大大变短了。转存失败重新上传CPU如何知道要访问的内存数据,存储在Cache...

2021-04-10 23:44:33 77

原创 1-2 Java NIO

NIOJDK1.4版本以来,JDK发布了全新的I/O类库,简称NIO,是一种同步非阻塞IO模型非阻塞IO模型应用程序调用recvfrom系统调用,如果内核数据没有准备好,会直接返回一个EWOULDBLOCK错误,应用进程不会阻塞,但是需要应用进程不断的轮询调用recvfrom,知道内核数据准备就绪,之后等待数据从内核复制到用户空间(这段时间会阻塞,但是耗时极小),复制完成后返回。简单一点说,就是去餐厅,餐厅人满了,客人拿完号码后可以出去别的地方玩,但是你得自己去问餐厅有没有空位。..

2021-04-05 22:34:03 66 1

原创 1-1 Java BIO

Java 中 IO 系统可以分为Bio,Nio,AIO 三种IO模型 BIO,同步阻塞IO模型,Bio操作的对象:流,以及如何使用Bio进行网络编程,使用Bio进行网络编程的问题。 NIO,同步非阻塞IO模型,多路复用IO模型,以及NIO中的Buffer,Channel,Selector概念,以及如何使用Nio进行网络编程 AIO,异步非阻塞IO模型,AIO可以使用集中方式实现异步操作,以及如何使用Aio进行网络编程。 BIOBIO是同步阻塞IO,JDK之前只有这一个IO模

2021-04-05 17:51:22 72 1

空空如也

空空如也

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

TA关注的人

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