- 博客(11)
- 收藏
- 关注
原创 ArrayList源码分析
ArrayList 初始化设置: 1、初始化默认容量:10 private static final int DEFAULT_CAPACITY = 10; 2、当往里放置一个Collection集合的时候,此时用这个初始化数组EMPTY_ELEMENTDATA private static final Object[] EMPTY_ELEMENTDATA = {}; 3、如果放置一个,或者一次性放置很多对象的时候,用DEFAULTCAPACITY_EMPTY_ELEMENTDATA这个默认数组存放对象。
2021-02-24 15:10:12
188
原创 AOF 持久化
目录1、AOF简介2、AOF 配置3、开启 AOF4、AOF 文件恢复5、 AOF 重写6、AOF的优缺点7、RDB-AOF混合持久化 1、AOF简介 Redis的持久化方式之一RDB是通过保存数据库中的键值对来记录数据库的状态。而另一种持久化方式 AOF 则是通过保存Redis服务器所执行的写命令来记录数据库状态。 比如对于如下命令: RDB 持久化方式就是将 str1,str2,str3 这三个键值对保存到 RDB文件中,而 AOF 持久化则是将执行的 set,sadd,lpush 三个命令保存到
2021-02-23 21:30:31
635
原创 RDB 持久化
目录1、RDB 简介2、触发方式①、自动触发②、手动触发3、恢复数据4、停止 RDB 持久化5、RDB 的优势和劣势6、RDB 自动保存的原理 1、RDB 简介 RDB是Redis用来进行持久化的一种方式,是把当前内存中的数据集快照写入磁盘,也就是 Snapshot 快照(数据库中所有键值对数据)。恢复时是将快照文件直接读到内存里。 2、触发方式 RDB 有两种触发方式,分别是自动触发和手动触发。 ①、自动触发 在 redis.conf 配置文件中的 SNAPSHOTTING 下,在这篇文章中我们介绍过。
2021-02-23 19:47:35
450
原创 Redis的五大数据类型实现原理(三)
目录 1、对象的类型与编码 ①、type属性 ②、encoding 属性和 *prt 指针 2、字符串对象 3、列表对象 4、哈希对象 5、集合对象 6、有序集合对象 7、五大数据类型的应用场景 8、内存回收和内存共享 ①、内存回收 ②、内存共享 9、对象的空转时长 前面两篇博客,第一篇介绍了五大数据类型的基本用法,第二篇介绍了Redis底层的六种数据结构。在Redis中,并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这些对象系统也就是前面说的五大数据类型
2021-02-23 10:15:50
220
原创 Redis的底层数据结构(二)
目录 1、演示数据类型的实现 2、简单动态字符串 3、链表 4、字典 5、跳跃表 6、整数集合 7、压缩列表 8、总结 上一篇博客我们介绍了 redis的五大数据类型详细用法,但是在 Redis 中,这几种数据类型底层是由什么数据结构构造的呢?本篇博客我们就来详细介绍Redis中五大数据类型的底层实现。 1、演示数据类型的实现 上篇博客我们在介绍 key 相关命令的时候,介绍了如下命令: OBJECT ENCODING key 该命令是用来显示那五大数据类型的底层数据结构。 比如对于 st
2021-02-22 21:34:10
93
原创 Redis的六大数据类型详细用法(一)
目录 1、string 数据类型 2、hash 数据类型 3、list 数据类型 4、set 数据类型 5、zset 数据类型 6、Redis5.0新数据结构-stream 7、系统相关命令 8、key 相关命令 我们说 Redis 相对于 Memcache 等其他的缓存产品,有一个比较明显的优势就是 Redis 不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。本篇博客我们就将介绍这些数据类型的详细使用以及顺带介绍Redis系统的相关命令用法
2021-02-22 19:57:47
176
原创 什么是BIO、NIO、AIO?
在高性能的IO体系设计中,BIO、NIO、AIO的概念,常常会让我们感到困惑不解。在Java面试中,我们也经常会被问到这个问题。譬如: BIO、NIO、AIO 的概念 同步/异步、阻塞/非阻塞的区别 NIO 如何实现多路复用功能 BIO BIO全称是Blocking IO,是JDK1.4之前的传统IO模型,本身是同步阻塞模式。 线程发起IO请求后,一直阻塞IO,直到缓冲区数据就绪后,再进入下一步操作。针对网络通信都是一请求一应答的方式,虽然简化了上层的应用开发,但在性能和可靠性方面存在着巨大瓶颈,试想一
2021-02-20 12:02:54
2074
1
原创 TCP三次握手和四次挥手
三次握手: 首先,服务器打开一个端口,变成监听状态。 客户端发送一个请求SYN = x,客户端此时状态为SYN-sent状态。 当服务器的监听端口收到客户端发过来的SYN请求后,向客户端回一个SYN = y,ACK = x + 1,这个ACK表明服务器已经收到了客户端发过来的请求,这个SYN是为了确认客户端是否真的要和自己建立连接,发送完成之后,服务器的状态变为SYN-RCVD(SYN收到状态)。 当客户端受到服务器发送来的请求之后,端口变成建立连接状态,然后给服务器回一个ACK = y + 1,表明确
2021-02-19 21:25:59
93
原创 工厂模式
工厂通俗来说就是来创建对象用的,在工厂类中定义一个创建对象的接口,通过传进来的不同参数来创建不同的实现类对象,其实定义一个创建对象的接口就规定了这个工厂只能创建这种类型的对象,就像钢铁厂只能创建钢铁以及其附属产品一样,而塑料厂只能创建塑料和塑料玩具一类的。 工厂类型接口: 用usb接口来举例,由于鼠标和键盘都是实现了usb接口,所以用这个来举例。 public interface IUSB { public void writeData(); } 实现类: 1、键盘类 public class U
2021-02-19 21:14:25
115
原创 .class文件和类加载器的那些事
1、如果将.txt的文件改为了.class文件,JVM会加载吗? 不会,如果不是.class的文件格式,JVM根本不会加载这个类。JVM会检查文件内容(魔数),如果不符合java规范的内容,并不会被加载。 在大多数情况下,我们都是通过扩展名来识别一个文件类型的,比如我们看到一个.txt类型的文件,我们就知道他是一个纯文本文件。但是,扩展名是可以修改的,那一旦一个文件的扩展名被修改过,那么怎么识别一个文件的类型呢?这就用到了我们提到的魔数了。 很多类型的文件,其起始的几个字节的内容是固定的(或有意填充,或本就
2021-02-18 09:58:30
239
2
原创 ConcurrentHashMap底层源码分析(JDK 1.8)
ConcurrentHashMap ConcurrentHashMap在JDK1.8以后使用的是Node数组+链表+红黑树的结构来实现的,并发控制使用Synchronized和CAS来操作,所以整个过程看起来是安全的,但是实际上在写入过程中是用CAS执行操作,只是表征安全,实际上不安全,但是独占锁时安全; // node数组最大容量:2^30 private static final int MAXIMUM_CAPACITY = 1 << 30; // 默认初始值大小为16,必须是2的幂数 pr
2021-02-18 09:51:11
103
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人