Alias的博客

缓存穿透、缓存雪崩和缓存击穿简述缓存穿透缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远都不会生效,这些请求都会打到数据库。若不断发起这样的请求,就会带给数据库巨大的压力 常见的解决方案: 1、缓存空对象:在第一次请求缓存未命中,进而请求数据库也没查到数据时,我们可以在redis中缓存一个空对象,这样后续重复的请求就不会达到数据库。 优点:实现简单,维护方便 缺点:额外的...

执行一条select语句期间发生了什么例: 1select * from product where id = 1; MySql的执行流程 由此可见,mysql的架构分为两层:Server层和存储引擎层 Server 层负责建立连接、分析和执行 SQL。MySQL 大多数的核心功能模块都在这实现,主要包括连接器,查询缓存、解析器、预处理器、优化器、执行器等。另外,所有的内置函数...

fail-fast和fail-safe什么是fail-fast在维基百科中,关于fail-fast的解释翻译如下: 在系统设计中,快速失效系统一种可以立即报告任何可能表明故障的情况的系统。快速失效系统通常设计用于停止正常操作,而不是试图继续可能存在缺陷的过程。这种设计通常会在操作中的多个点检查系统的状态,因此可以及早检测到任何故障。快速失败模块的职责是检测错误,然后让系统的下一个最高级别处理...

关于Java中的StreamStream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。 Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。 这种风格将要处理的元素集合看作一种流,流在管道中传输,并且可以在管道的节点上进行处理,比如筛选,排序,聚合等。 Stream有以下特性及优点: 无存...

关于Java中的集合(二)为什么HashMap默认容量设置成16什么是容量在Java中,保存数据有两种比较简单的数据结构:数组和链表。数组的特点是:寻址容易,插入和删除困难;而链表的特点是:寻址困难,插入和删除容易。HashMap就是将数组和链表组合在一起,发挥了两者的优势,我们可以将其理解为链表的数组。 在HashMap中,有两个比较容易混淆的关键字段:size和capacity ,这其中...

关于数据库和缓存不一致问题为什么会出现缓存一致性问题在非并发的情况首先,我们在非并发的场景中,出现不一致的问题大家都能比较容易的理解,因为缓存的操作和数据库的操作是存在一定的时间差的。 而且这两个操作是没办法保证原子性的,也就是说,是有可能一个操作成功,一个操作失败的。 所以,这就必然会存在不一致的情况。 但同时,因为我们的业务系统是开放给用户使用的,所以经常会出现各种各样的并发的场景,因为...

关于Java中的集合(一)Collection和Collections区别Collection 是一个集合接口。 它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。是list,set等的父接口。 Collections 是一个包装类。 它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collect...

Springboot整合MongoDB导入依赖123<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> ...

关于Java的类加载机制什么是类加载类加载分为三个步骤:加载、连接、初始化 加载类加载指的是将class文件读入内存,并为之创建一个java.lang.Class对象,即程序中使用任何类时,系统都会为之建立一个java.lang.Class对象,系统中所有的类都是java.lang.Class的实例。类的加载由类加载器完成,JVM提供的类加载器叫做系统类加载器,此外还可以通过继承ClassL...

关于序列化什么是序列化和反序列化序列化是将对象转换为可传输格式的过程,是一种数据持久化的手段。一般广泛用于网络传输、RMI、RPC等场景中。 反序列化是序列化的逆操作。 序列化是将对象的状态信息转换为可存储或传输的形式的过程。一般是以字节码或XML格式传输。而字节码或XML编码格式可以还原为完全相等的对象。这个相反的过程称为反序列化。 Java实现对象序列化和反序列化在Java中,我们可以通...