Stories

List
Create Time

Redis數據類型及使用場景

Redis數據類型及使用場景 Redis支持多種數據類型,每種類型都有其獨特的特點和適用場景。以下是Redis主要數據類型的詳細介紹及使用場景分析: 1. 字符串類型(String) 基本概念 Redis最基本的數據類型,二進制安全,可存儲任何數據(文本、二進制數據等) 最大容量為512MB 支持豐富的操作,如設置、獲取、自增、自減等 核心命令 SET key value #

Create Time

Redis核心知識點全面解析

Redis核心知識點全面解析 一、基礎部分 1. Redis數據類型及使用場景 String(字符串) 特點:最基本的數據類型,二進制安全,最大512MB 命令:SET、GET、INCR、DECR、APPEND等 使用場景:緩存熱點數據、分佈式計數器、分佈式鎖、會話管理 Hash(哈希) 特點:適合存儲對象,可單獨操作字段,節省內存 命令:HSET、HGET、HGETALL、HDE

Create Time

Redis為什麼採用單線程設計

Redis為什麼採用單線程設計 Redis在核心處理邏輯上採用單線程設計,這是一個經過深思熟慮的架構選擇。下面從多個角度詳細分析Redis採用單線程的原因和優勢: 一、單線程設計的核心優勢 1. 避免線程切換開銷 CPU上下文切換成本高:多線程在高併發場景下會頻繁切換線程,每次切換都需要保存和恢復線程的執行狀態 減少鎖競爭:單線程模型無需加鎖,避免了因鎖引起的死鎖、活鎖問題,也消除了加鎖和釋

Create Time

Redis過期鍵的刪除策略

Redis過期鍵的刪除策略 Redis作為高性能的內存數據庫,其過期鍵的刪除策略直接影響到內存使用效率和系統性能。Redis採用了惰性刪除和定期刪除相結合的混合策略,下面詳細分析各種刪除策略的原理、優缺點及Redis的實現方式: 一、三種基本刪除策略 1. 定時刪除(Timed Expiration) 基本原理 為每個設置了過期時間的鍵創建一個定時器,當鍵的過期時間到達時,立即執行刪除操作

Create Time

Redis緩存三大坑:穿透、擊穿、雪崩

Redis緩存三大坑:穿透、擊穿、雪崩 緩存的作用 緩存就像你家冰箱,常用的東西(數據)放裏面,拿的時候快;冰箱沒有的,再去菜市場(數據庫)買。但這三種問題,本質都是"冰箱出了狀況,導致菜市場被擠爆"。 1. 緩存穿透 大白話解釋:查一個"根本不存在的東西",緩存裏沒有,數據庫裏也沒有。結果就是,每次查這個東西,都要去數據庫查一遍,相當於冰箱裏沒有,你還天天去菜市場問有沒有"龍肉",菜市場天天白忙

Create Time

Redis分佈式鎖詳解

分佈式鎖的基本概念 分佈式鎖可以理解為"多個人搶同一個東西時,用一把鎖來保證只有一個人能拿到",但這裏的"多個人"不是單台機器上的多個線程,而是多台服務器(分佈式系統)。 例子:電商平台下單,庫存只有1件,同時有10個人在不同地方搶,這時候就需要一把"分佈式鎖",保證只有一個人能成功扣減庫存,避免超賣。 Redis分佈式鎖的實現方式 1. 最基礎的:用 setnx 命令("set if not e

Create Time

分佈式服務框架 Dubbo

Dubbo 是一款高性能的 分佈式服務框架,主要用於實現 服務的調用、管理和監控。它最早由 阿里巴巴 開發,現已成為一個開源項目,並且廣泛應用於微服務架構中。 Dubbo 的核心功能 遠程過程調用(RPC): Dubbo 主要用於 服務之間的遠程調用,它允許不同的服務在不同的機器上運行,並通過網絡相互調用。 Dubbo 會自動處理網絡通信、序列化和反序列化、服務發現等細

Create Time

線程池線程隊列如何選擇

在手寫線程池時,通常選擇使用 有界隊列 或 無界隊列,具體選擇哪一種取決於具體的應用場景和需求。下面是每種隊列的優缺點,並解釋為什麼在手寫線程池時通常選擇其中的某些隊列。 1. 有界隊列(ArrayBlockingQueue) 使用場景:對於大多數場景,尤其是當任務數量較為穩定或可控時,有界隊列 是一個較好的選擇。它通常用於大多數生產環境中的線程池設計中。 為什麼使用:有界隊列的最大優

Create Time

事物的傳播行為

在分佈式系統中,事務的傳播行為(Transaction Propagation)指的是在不同的事務上下文中如何處理事務的傳播方式。它決定了一個方法在執行時是否應該在當前事務中運行,是否應該創建新的事務,或者是否應該加入到已有的事務中。事務傳播行為在多層架構的系統(例如 Spring 框架中)尤為重要。 常見的事務傳播行為類型 以下是 Spring 框架中的七種常用事務傳播行為,這些傳播行為可以應用

Create Time

MVCC(多版本併發控制)底層原理

MVCC(多版本併發控制)底層原理總結: MVCC 是通過維護數據的多個版本來控制併發訪問的技術,它使得數據庫能夠支持高併發事務,同時保證事務之間的隔離性和一致性。在 MySQL 的 InnoDB 存儲引擎中,MVCC 是通過 隱藏列、ReadView 快照 和 undo log 來實現的。 1. 關鍵概念: 隱藏列(Hidden Columns):為了支持 MVCC 機制,InnoDB 在每

Create Time

MySQL底層是如何實現事物的四大特性的?

MySQL如何實現事務的四大特性(ACID) MySQL的事務支持主要通過InnoDB存儲引擎實現,其底層機制結合日誌系統(Undo Log/Redo Log)、鎖機制和多版本併發控制(MVCC),具體實現如下: 1. 原子性(Atomicity) 定義:事務的所有操作要麼全部成功,要麼全部失敗回滾。 實現: Undo Log(回滾日誌): 在事務修改數據前,Und

Create Time

MySQL 索引

在 MySQL 中,索引 是通過特定的數據結構來加速查詢操作。MySQL 支持多種類型的索引,其中 B+ 樹索引 是最常見的一種。 1. B+ 樹索引(B+ Tree Index) B+ 樹的特點: 所有數據存儲在葉子節點: 所有的數據都存儲在 B+ 樹的葉子節點中,非葉子節點僅存儲索引。 葉子節點鏈表: B+ 樹的葉子節點通過鏈表連接,使得在進

Create Time

MySQL 查詢性能較慢,優化思路

當遇到 MySQL 查詢性能較慢 的問題時,優化的思路通常包括以下幾個步驟。具體的優化方法會依賴於查詢的複雜性、表的結構以及數據量等因素。以下是我通常會遵循的優化思路和具體步驟: 1. 分析查詢執行計劃(EXPLAIN) 在開始優化之前,我會首先使用 EXPLAIN 或 EXPLAIN ANALYZE 來查看查詢的執行計劃。這樣可以清楚地瞭解 MySQL 在執行查詢時使用的索引、連接方式以及是否進

Create Time

MySQL 的 回表

MySQL 的 回表(Back to Table) 是指在使用 二級索引(非主鍵索引) 查詢數據時,需要通過索引找到主鍵值,再根據主鍵值回到主鍵索引(聚集索引)中查找完整行數據的過程。回表會增加額外的 I/O 操作,可能影響查詢性能。 1. 回表發生的原因 MySQL 的索引結構決定了回表的必要性: 主鍵索引(聚集索引):葉子節點存儲完整的行數據。 二級索引(非主鍵索引):葉子節點存儲主鍵

Create Time

MySQL索引

MySQL索引詳解 一、索引的定義與作用 1. 索引的定義 索引(Index)是數據庫表中一列或多列的值進行排序的一種數據結構,它是對數據庫表中一列或多列的值進行預排序以提高查詢速度的一種特殊數據結構。 2. 索引的主要作用 加速查詢:顯著提高數據檢索速度,從全表掃描O(n)優化到接近O(log n) 提高排序效率:如果查詢中包含排序操作,適當的索引可以避免額外排序 加速連接操作:在多表連

Create Time

MySQL索引最佳左前綴法則

MySQL索引最佳左前綴法則詳解 基本概念 最佳左前綴法則(Leftmost Prefix Rule)是MySQL中複合索引使用的一條重要規則,它決定了查詢時索引能否被有效利用。具體來説,在使用複合索引時,查詢條件必須從索引的最左列開始,並且不能跳過中間的列。 工作原理 複合索引的內部結構是按照索引列順序構建的B+樹。索引的排序首先基於第一列,然後在第一列相等的情況下基於第二列,依此類推。因此,只

Create Time

常見的消息隊列(MQ)及其區別

常見的消息隊列(MQ)及其區別 消息隊列 協議 特點 適用場景 性能表現 消息持久化方式 是否保證消息順序 RabbitMQ AMQP 功能完備、穩定可靠,支持多種消息路由模式 適用於對消息可靠性和事務支持要求較高的應用 高可靠性,但在高併發下性能一般 消息和隊列都可以設置為持久化,保證重

Create Time

Redis 分片

Redis 分片(Sharding)概述 1. 概念和目的: Redis 分片是通過將整個數據集分割成多個部分,分佈存儲在多個獨立的 Redis 節點上來擴展 Redis 系統的技術。 目的是提高系統的存儲容量和處理能力,以應對大規模數據和高併發請求的需求。 2. 基本原理: 數據分片策略:選擇合適的數據分片策略,如哈希分片或範圍分片,決定數據如何分佈到各個 Redis 節點上。 客

Create Time

RocketMQ 消息丟失及其處理方式

在高併發系統中,RocketMQ作為消息隊列被廣泛使用,但在某些極端情況下,可能會遇到消息丟失的問題。消息丟失通常是由以下幾種原因導致的: 1. 消息丟失的原因 Producer端發送消息失敗: 由於網絡問題或RocketMQ服務端壓力過大,可能出現消息發送失敗。如果沒有重試機制或補償機制,消息可能丟失。 Broker端存儲問題: 如果Rocke

Create Time

JVM內存模型及分區詳解

JVM內存模型及分區詳解 JVM內存模型主要分為以下幾個核心區域,每個區域有特定的用途和存儲內容: 1. 程序計數器(Program Counter Register) 存儲內容: 當前線程執行的字節碼行號指示器 對於Java方法,記錄正在執行的虛擬機字節碼指令的地址 對於Native方法,值為undefined(未定義) 特點: 線程私有,每個線程都有獨立的程序計數器 內存空間最

Create Time

Java堆內存分區及各自特點

Java堆內存分區及各自特點 Java堆內存主要分為新生代(Young Generation)和老年代(Old Generation),其中新生代又進一步分為Eden區和兩個Survivor區(From和To)。這種分區設計是為了優化垃圾回收效率,基於對象生命週期的不同特性。 1. Eden區(伊甸園) 特點: 對象初始分配區域:新創建的對象(除了大對象)首先被分配到Eden區 空間佔比:在

Create Time

AQS 核心方法和源碼

在 AQS (AbstractQueuedSynchronizer) 中,這些方法涉及到同步的獲取和排隊機制,它們實現了類似於鎖(Lock)和信號量(Semaphore)的功能。AQS 通過內部維護一個 FIFO 隊列和一些節點來管理線程的同步。下面逐個解釋這些方法的作用: AQS 核心方法和源碼 1. acquire(int arg) 作用:嘗試獲取同步狀態,如果失敗,則加入隊列並阻塞線程

Create Time

HashMap 常見面試題及其答案整理

以下是關於 HashMap 的常見面試題及其答案整理,涵蓋底層原理、使用場景和優化技巧 1. HashMap 的底層數據結構是什麼? 答案: JDK 1.8 之前:數組 + 鏈表(鏈表解決哈希衝突)。 JDK 1.8 及之後:數組 + 鏈表/紅黑樹(當鏈表長度 ≥8 且數組長度 ≥64 時,鏈表轉為紅黑樹,提高查詢效率)。 2. HashMap 的工作原理(put/g

Create Time

高併發問題解決方案

高併發問題是指系統需要處理大量用户請求或大量併發操作時所面臨的挑戰,通常表現為請求量大、處理時間長、響應速度慢、資源耗盡等問題。為了應對高併發場景,系統需要設計成能夠高效地處理併發請求,並確保系統的穩定性和可擴展性。以下是一些常見的解決高併發問題的方法和技術: 1. 負載均衡 目的:分擔單個服務器的壓力,提高系統處理能力。 實現方式: 應用層負載均衡:使用負載均衡器(如 N