Redis开发与运维之内存优化

2022-09-22
阅读 5 分钟
1.4k
type:表示当前对象使用的数据类型,主要就是 string、hash、list、set、zset 五种。4 表示占 4 个 bit 位。📢:使用 type [key] 命令可以查看对象的所属类型,返回的是值对象的类型,键都为 string 类型。
封面图

Redis设计与实现之简单动态字符串

2022-08-16
阅读 3 分钟
968
Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组),而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型,并将 SDS 用作 Redis 的默认字符串表示。
封面图

Spring源码之容器的功能扩展和refresh方法解析

2022-06-17
阅读 36 分钟
1.1k
在之前文章中我们了解了关于Spring中bean的加载流程,并一直使用BeanFactory接口以及它的默认实现类XmlBeanFactory,在Spring中还提供了另一个接口ApplicationContext,用于扩展BeanFactory中现有的功能。
封面图

Spring源码之Bean的加载(五) populateBean 和 DisposableBean

2022-06-08
阅读 22 分钟
1.2k
前一篇文章主要讲解了创建 bean 中的 createBeanInstance 方法和实例化过程。本文继续讲解关于 bean 的加载过程中属性注入和注册 DisposableBean。
封面图

Spring源码之Bean的加载(四)

2022-06-07
阅读 25 分钟
1.4k
之前文章我们说过在经历了 resolveBeforeInstantiation 方法后,程序会有两个选择,如果创建了代理或者重写了 InstantiationAwareBeanPostProcessor 中的 postProcessBeforeInstantiation 方法并在方法 postProcessBeforeInstantiation 中改变了 bean,则会直接返回,否则会进行常规 bean 的创建。
封面图

Spring源码之Bean的加载(三)

2022-06-03
阅读 6 分钟
1.2k
之前文章主要讲解了从bean的实例中获取对象,准备过程以及实例化的前置处理。实例化bean是一个非常复杂的过程,本文主要讲解Spring是如何解决循环依赖。
封面图

Spring源码之Bean的加载(二)

2022-06-02
阅读 14 分钟
920
之前文章主要对 getBean 方法进行简单的介绍,和 FactoryBean 的作用,以及是如何从缓存中获取 bean。本文继续讲解 bean 的加载流程。
封面图

Spring源码之Bean的加载(一)

2022-05-30
阅读 14 分钟
947
bean 的加载之前文章主要分析了对 XML 配置文件的解析,接下来就是对 bean 的加载进行分析,同样开始用最开始的代码为入口。入口代码 getBean {代码...} 从这里我们快速先大致了解一下是如何实现的。从 BeanFactory 接口中我们选择对应实现类为 AbstractBeanFactory。 {代码...} {代码...} {代码...} 可以看到该方法代码...
封面图

Spring源码之默认标签解析及BeanDefinition注册

2022-04-07
阅读 36 分钟
1.3k
开篇上一篇讲解了 Spring 中的标签包含自定义标签和默认标签,这两种方式存在较大不同,所以本文主要讲解默认标签的解析过程。默认标签的解析是在 parseDefaultElement 方法中。该方法分别对不同标签做不同处理。 {代码...} Bean 标签的解析及注册这四种中,我们主要关注对 bean 标签的解析。bean 标签的解析是最复杂且...
封面图

Spring源码之容器的基本实现

2022-03-21
阅读 17 分钟
1.5k
开篇本文主要基于SpringFramework5.2.0.RELEASE版本,源码的下载步骤在别的文章中已经讲过,这里就不再赘述。容器的基本用法我们先创建一个简单的示例来看一下容器的基本用法。创建一个简单的 Java Bean。 {代码...} 创建一个简单 Spring 配置文件。 {代码...} ok,编写一个测试类进行测试。 {代码...} 运行之后可以看到...
封面图

学习Spring源码篇之环境搭建

2022-03-18
阅读 3 分钟
2k
本文是学习 Spring 源码的第一篇,下载 Spring 源码及编译运行并测试。环境准备JDK11、Gradle、Maven、SpringFramework 5.2.0.RELEASE下载源码及编译进入 github :[链接]在 Tags 中选择需要的版本,随后右侧下载即可。下载完成解压后,进入spring-framework-5.2.0.RELEASE文件中,通过终端执行以下命令: {代码...} 如...
封面图

Java JUC ThreadPoolExecutor解析

2022-02-09
阅读 14 分钟
1.3k
线程池主要解决两个问题:一是当执行大量异步任务时线程池能够提供较好的性能。在不使用线程池时,每当需要执行任务时就需要 new 一个线程来执行,频繁的创建与销毁非常消耗性能。而线程池中的线程是可以复用的,不需要在每次需要执行任务时候都重新创建和销毁。二是线程池提供了资源限制和管理的手段,比如可以限制线程...
封面图

Java JUC PriorityBlockingQueue解析

2022-02-07
阅读 8 分钟
1.5k
PriorityBlockingQueue 是一个带有优先级的无界阻塞队列,每次出队返回的都是优先级最高或者最低的元素。在内部是使用平衡二叉树堆实现,所以遍历元素不保证有序。
封面图

Java JUC LinkedBlockingQueue解析

2022-01-26
阅读 8 分钟
1.4k
上篇介绍了使用CAS算法实现的非阻塞队列ConcurrentLinkedQueue,本篇介绍的是使用独占锁实现的阻塞队列LinkedBlockingQueue。
封面图

Java JUC ConcurrentLinkedQueue解析

2022-01-25
阅读 10 分钟
1.5k
ConcurrentLinkedQueue 是线程安全的无界非阻塞队列,底层使用单向链表实现,对于入队和出队操作使用 CAS 实现线程安全。
封面图

Java JUC ReentrantReadWriteLock解析

2022-01-24
阅读 13 分钟
1.6k
ReentrantReadWriteLock 和 ReentrantLock 的区别是,ReentrantLock 是独占锁,同一时间只能有一个线程获取锁,但在实际中更多的是读多写少的情况,显然 ReentrantLock 满足不了该情况,而 ReentrantReadWriteLock 采用了读写分离的策略,可以允许多个线程同时进行读取。
封面图

Java JUC ReentrantLock解析

2022-01-21
阅读 8 分钟
1.3k
它具有与synchronized相同的基本行为和语义,但 ReentrantLock 更灵活、更强大,增加了轮询、超时、中断等高级功能,并且还支持公平锁和非公平锁。
封面图

Java JUC 抽象同步队列AQS解析

2022-01-20
阅读 12 分钟
1.5k
AbstractQueuedSynchronizer 抽象同步队列简称 AQS,它是实现同步器的基础组件,并发包中的锁底层都是使用 AQS 来实现的,下面看下 AQS 的类图结构。
封面图

Java JUC LockSupport概述

2022-01-19
阅读 3 分钟
1.2k
LockSupport 类和每个使用它的线程都会关联一个许可证,在默认情况下调用 LockSupport 类的方法是不持有许可证的。LockSupport 是使用 Unsafe 类实现的。
封面图

Java JUC CopyOnWriteArrayList 解析

2022-01-11
阅读 6 分钟
1.8k
在 Java 并发包中的并发 List 只有 CopyOnWriteArrayList,CopyOnWriteArrayList 是一个线程安全的 ArrayList,对其进行的修改操作都是在底层的一个复制的数组(快照)上进行的,也就是使用了写时复制策略。
封面图

Java 并发包原子操作类解析

2022-01-05
阅读 13 分钟
1.8k
JUC 并发包中包含 AtomicInteger、AtomicLong 和 AtomicBoolean 等原子性操作类,原理大致类似,接下来我们看一下 AtomicLong 类。
封面图

Java JUC ThreadLocalRandom类解析

2022-01-03
阅读 8 分钟
1.4k
首先我们先了解一下 Random 类。在 JDK7 以前到现在,java.util.Random 类都是使用较为广泛的随机数生成工具类,而且 java.lang.Math 的随机数生成也是使用的 java.util.Random 类的实例,下面先看看如何使用 Random 类。
封面图

深入学习Netty(一)NIO基础篇

2021-12-30
阅读 34 分钟
2.4k
Java NIO 全称 Java non-blocking IO,指的是 JDK 提供的新 API。从 JDK 1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 NIO,即 New IO,是同步非阻塞的。
封面图

计算机网络之概述篇

2021-04-28
阅读 14 分钟
2.4k
概述篇计算机网络在信息时代的作用计算机网络已由一种通讯基础设施发展成为一种重要的信息服务基础设施。计算机网络已经像水、电、煤气这些基础设施一样,成为我们生活中不可或缺的一部分。因特网概述网络、互连网(互联网)和因特网网络(Network)由若干结点(Node)和连接这些结点的链路(Link)组成。在如下例子中,...
封面图

JVM性能监控与调优之概述命令行篇

2021-02-07
阅读 13 分钟
2.7k
背景说明生产环境中出现的问题生产环境发生了内存溢出该如何处理?生产环境应该给服务器分配多少内存合适?如何对垃圾回收器的性能进行调优?生产环境 CPU 负载期飙高该如何处理?生产环境应该给应用分配多少线程合适?不加 log,如何确定请求是否执行了某一行代码?不加 log,如何实时查看某个方法的入参与返回值?为什...
封面图

深入学习RocketMQ之底层解析

2021-01-28
阅读 23 分钟
2k
RocketMQ生产者核心详解核心参数详解ProducerGroup:组名在一个应用里面是唯一的。CreateTopicKey:实际生产中不会使此参数进行生产者创建Topic。defaultTopicQueueNums:默认大小为4,一个topic下默认挂载的是四个队列。sendMsgTimeout:单位ms,消息发送的超时时间。compressMsgBodyOverHowmuch:默认压缩字节4096,自...
封面图

深入学习RocketMQ之快速入门

2021-01-26
阅读 16 分钟
4.1k
RocketMQ - 整体介绍简介RocketMQ是一款分布式、队列模型的消息中间件。支持集群模型、负载均衡、水平扩展能力。采用零拷贝的原理、顺序写盘、随机读。代码优秀,底层通信框架使用 Netty 。强调集群无单点,可扩展,任意一点高可用,水平可扩展。消息失败重试机制、消息可查询。RcoketMQ 是一款低延迟、高可靠、可伸缩、...
封面图

深入学习Redis之缓存设计与优化

2021-01-02
阅读 5 分钟
6.1k
加速读写:CPU L1/L2/L3 Cache、浏览器缓存等。因为缓存通常都是全内存的(例如 Redis、Memcache),而 存储层通常读写性能不够强悍(例如 MySQL),通过缓存的使用可以有效 地加速读写,优化用户体验。

深入学习Redis之Redis Cluster

2021-01-01
阅读 18 分钟
10.7k
在学习Redis Cluster之前,我们先了解为什么需要集群,当遇到单机内存、并发、流量等瓶颈时,单机已经无法满足我让节点7000和7001等节点进们的要求的时候,可以采用Cluster架构方案达到负载均衡的目的。

深入学习Redis之持久化及Sentinel架构

2020-12-31
阅读 17 分钟
2.8k
Redis持久化什么是持久化Redis所有数据保存在内存中,对数据的更新将异步地保存到磁盘上。持久化的方式快照MySQL DumpRedis RDB日志MySQL binlogRedis AOFRDB什么是RDBRDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,...