随笔分类 - 一些问题
摘要:Nacos实现配置的动态刷新,主要是靠客户端的长轮询去请求服务端获取更新的配置,在通过Spring的ApplicationContext.publishEvent() 发布事件的方式去刷新容器。 其实主要是靠Nacos—config包下的NacosContextRefresher、NacosConf
阅读全文
摘要:项目内部配置文件spring boot 启动会扫描一下位置application.properties或者application.yml 文件作为springboot的默认配置文件 1、file:./config/ 2、file:./ 3、classpath:/config/ 4、classpath
阅读全文
摘要:1、Redis的使用规范 1.1、 key的规范要点 我们设计Redis的key的时候,要注意以下这几个点: 以业务名为key前缀,用冒号隔开,以防止key冲突覆盖。如,live:rank:1 确保key的语义清晰的情况下,key的长度尽量小于30个字符。 key禁止包含特殊字符,如空格、换行、单双
阅读全文
摘要:Redis 的 KEYS 命令用于获取与指定模式匹配的所有键。然而,需要注意的是,KEYS 命令在性能方面存在一些限制,特别是在处理大型数据库时。 1.时间复杂度 KEYS 命令的时间复杂度为 O(N),其中 N 是数据库中键的数量。这是因为 Redis 需要遍历整个数据库来查找匹配指定模式的键。当
阅读全文
摘要:B-树内部节点是保存数据的;而B+树内部节点是不保存数据的,只作索引作用,它的叶子节点才保存数据。 B+树相邻的叶子节点之间是通过链表指针连起来的,B-树却不是。 查找过程中,B-树在找到具体的数值以后就结束,而B+树则需要通过索引找到叶子结点中的数据才结束 B-树中任何一个关键字出现且只出现在一个
阅读全文
摘要:Hash哈希,只适合等值查询,不适合范围查询。 一般二叉树,可能会特殊化为一个链表,相当于全表扫描。 红黑树,是一种特化的平衡二叉树,MySQL 数据量很大的时候,索引的体积也会很大,内存放不下的而从磁盘读取,树的层次太高的话,读取磁盘的次数就多了。 B-Tree,叶子节点和非叶子节点都保存数据,相
阅读全文
摘要:InnoDB的页结构 在InnoDB中,索引默认使用的数据结构为B+树,而B+树里的每个节点都是一个页,默认的页大小为16KB。 非叶子节点存的是索引值以及页的偏移量,而叶子节点上存放的则是完整的每行记录 在计算机中,磁盘存储数据最小单元是扇区,一个扇区的大小是512字节。文件系统中,最小单位是块,
阅读全文
摘要:一、消息队列常用的场景 1、削峰 例如我们做得考试系统中,用户通过人脸识别登录系统,考虑到考试系统的特殊性,三万名考生参加考试,需要记录人脸识别登录照片。从考试完结果上看,用户最大并发数在4000,于是我们采用rocketMq来进行异步消费用户人脸识别图片,当时统计rocketMq每秒1000消费消
阅读全文
摘要:最左前缀匹配原则:在MySQL建立联合索引时会遵守最左前缀匹配原则,即最左优先,在检索数据时从联合索引的最左边开始匹配。 要想理解联合索引的最左匹配原则,先来理解下索引的底层原理。索引的底层是一颗B+树,那么联合索引的底层也就是一颗B+树,只不过联合索引的B+树节点中存储的是键值。由于构建一棵B+树
阅读全文
摘要:https://zhuanlan.zhihu.com/p/608120345?utm_id=0
阅读全文
摘要:1、自动装配是什么及作用 springboot的自动装配实际上就是为了从spring.factories文件中获取到对应的需要进行自动装配的类,并生成相应的Bean对象,然后将它们交给spring容器来帮我们进行管理 2、spring自动装配的原理 2.1、启动类上注解的作用 @SpringBoot
阅读全文
摘要:SpringBoot启动过程 1、运行 SpringApplication.run() 方法 可以肯定的是,所有的标准的springboot的应用程序都是从run方法开始的 package com.spring; import org.springframework.beans.factory.co
阅读全文
摘要:一、注意事项 不要在接口上声明@Transactional ,而要在具体类的方法上使用 @Transactional 注解,不然注解可能无效。不要将@Transactional放置在类级的声明中,放在类声明,会使得全部方法都有事务。所以@Transactional应该放在方法级别,不需要使用事务的方
阅读全文
摘要:在 Java 中,可以使用 synchronized 关键字来标记一个方法或者代码块,当某个线程调用该对象的synchronized方法或者访问synchronized代码块时,这个线程便获得了该对象的锁,其他线程暂时无法访问这个方法,只有等待这个方法执行完毕或者代码块执行完毕,这个线程才会释放该对
阅读全文
摘要:使用Redis存储相比直接使用Java内存的Map有以下几个优势: 持久化:Redis支持数据持久化,即使发生服务器重启或意外宕机,数据仍然可以被恢复。而使用Java内存的Map,当应用程序关闭或重启时,数据将会丢失。 分布式支持:Redis是一个分布式数据库,可以通过配置集群来水平扩展和处理大规模
阅读全文
摘要:一、概述 缓存穿透是指查询一个不存在的数据,由于缓存和数据库都没有命中,导致每次请求都需要从数据库中读取数据,增加了数据库的负担。解决缓存穿透的方法有以下几种: 布隆过滤器(Bloom Filter):使用位数组来表示一个集合,并通过哈希函数将元素映射到数组上。在查询数据时,先判断该数据是否存在于布
阅读全文
摘要:快照读:读取快照中的数据,不需要进行加锁。看到快照这两个字,各位肯定马上就想到 MVCC 了,是这样,MVCC 作用于读取已提交和可重复读(默认)这两个隔离级别,这俩隔离级别下的普通 select 操作就是快照读 当前读:读取的是最新版本的数据, 并且对读取的记录加锁, 阻塞其他事务同时改动相同记录
阅读全文
摘要:select for update 是为了在查询时,避免其他用户以该表进行插入,修改或删除等操作,造成表的不一致性。 Select …forupdate语句是我们经常使用手工加锁语句。通常情况下,select语句是不会对数据加锁,妨碍影响其他的DML和DDL操作。同时,在多版本一致读机制的支持下,s
阅读全文
摘要:参考:https://blog.csdn.net/weixin_52962125/article/details/130556400?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefa
阅读全文
摘要:gateway作为网关,与其他网关技术不同的是它能实现限流。gateway使用的是令牌桶算法实现限流。常见的限流算法有: 1、计数器算法:以QPS为100举例,如果1秒钟内钱200ms请求数量到达了100,后面800ms中的请求都会被拒绝,这种情况称为”突刺现象“ 2、漏桶算法:可以解决突刺现象。比
阅读全文