Redis 和 MySQL 一致性问题是企业级应用中常见的挑战之一,特别是在高并发、高可用的场景下。由于 Redis 是内存型数据库,具备极高的读写速度,而 MySQL 作为持久化数据库,通常用于数据的可靠存储,如何保证两者数据的一致性需要具体业务场景的设计与优化。 下面我们将结合几个典型的业务场景,逐步分析如何在不同的场景下保证 Redis 和…
CopyOnWriteArrayList 简介 在 JDK1.5 之前,如果想要使用并发安全的 List 只能选择 Vector 。而 Vector 是一种老旧的集合,已经被淘汰。 Vector 对于增删改查等方法基本都加了 synchronized ,这种方式虽然能够保证同步,但这相当于对整个 Vector…
ConcurrentHashMap 作为线程安全的 HashMap ,它的使用频率也是很高。那么它的存储结构和实现原理是怎么样的呢? 1. ConcurrentHashMap 1.7 1. 存储结构 Java 7 中 ConcurrentHashMap 的存储结构如上图, ConcurrnetHashMap 由很多个 Segment 组合,而每一个…
今天给大家分享一个基于 Spring Boot的搜索引擎及一个AI 驱动的数据库跨平台工具。Let’s go! Lucene Server 一款基于 Spring Boot 和 Lucene 核心库构建的搜索引擎。 可以零代码实现对海量数据的同步搜索,只需一点初始配置。 主要特点包括: 零代码实现,避免了复杂的代码开发过程。…
ArrayBlockingQueue初始化 了解 ArrayBlockingQueue 的细节前,我们不妨先看看其构造函数,了解一下其初始化过程。从源码中我们可以看出 ArrayBlockingQueue 有 3 个构造方法,而最核心的构造方法就是下面这一个。 // capacity 表示队列初始容量,fair 表示 锁的公平性 public…
ArrayList 简介 ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用 ensureCapacity 操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。 ArrayList 继承于 AbstractList ,实现了 List ,…
阻塞队列简介 阻塞队列的历史 Java 阻塞队列的历史可以追溯到 JDK1.5 版本,当时 Java 平台增加了 java.util.concurrent ,即我们常说的 JUC 包,其中包含了各种并发流程控制工具、并发容器、原子类等。这其中自然也包含了我们这篇文章所讨论的阻塞队列。 为了解决高并发场景下多线程之间数据共享的问题,JDK1.5 版本中出现了…
HashMap 简介 HashMap 主要用来存放键值对,它基于哈希表的 Map 接口实现,是常用的 Java 集合之一,是非线程安全的。 HashMap 可以存储 null 的 key 和 value,但 null 作为键只能有一个,null 作为值可以有多个 JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap…
周末了,分享点轻松的!给大家推荐3款最近看到的两款优质的VS Code插件。 Better Comments Better Comments是一个让你的注释变得更加清晰的插件。 该插件可以方便的为不同注释做分类,也支持自定义分类。非常有助于在注释中记录和查看不同级别的信息。 GitHub Copilot 公认的目前最强AI辅助编码工具。…
面向对象设计鼓励模块间基于接口而非具体实现编程,以降低模块间的耦合,遵循依赖倒置原则,并支持开闭原则(对扩展开放,对修改封闭)。然而,直接依赖具体实现会导致在替换实现时需要修改代码,违背了开闭原则。为了解决这个问题,SPI…