主頁 > 資料庫 > Innodb表空間、段、區描述頁分析與磁盤存盤空間管理

Innodb表空間、段、區描述頁分析與磁盤存盤空間管理

2021-06-09 19:47:24 資料庫

Innodb表空間、段、區描述頁分析與磁盤存盤空間管理

從一個整體方向結構上看,表空間大的結構圖如下

ibd_arch

  • 表空間:表空間檔案,存放資料庫資料的載體,對于系統表空間通常是ibdata1,開啟獨立表空間檔案innodb_file_per_table=1后,對應的表空間為.ibd后綴的表空間檔案

  • 資料段(segment):邏輯上的概念,與資料庫中的索引相映射,資料表由多個段(索引)組成,段的型別有資料段(葉子結點)、索引段(非葉節點),一個索引占據兩個段,分別對應葉節點和非葉節點,默認地,對于一張只有主鍵的表,會默認存在兩個段,分別對應主索引的非葉節點和葉節點段

  • 區(extent):

    • 對于小表,可以忽略區的概念,表基本由段以及離散的資料page頁構成,
    • 隨著表空間資料量的增長,系統對于磁盤空間的分配按區(extent)來進行,extent代表一組連續的page,默認64個page(1M大小),extent的作用是提高page分配效率,通常來講批量分配從效率上總是優于單一的page分配,另外對于資料連續性方面也更優
  • 頁:mysql存盤的基礎單元,一個頁的大小通常是16k,innodb將xxx.ibd(表空間檔案)按page切分

實際上的ibd檔案構成
ibd

資料在物理檔案上按16k被切分成一個一個的資料頁,每個頁有自己的頁編號(pageNo)
每一個表空間檔案前面三個頁通常稱之為管理頁(元資料頁)

段與區的內容比較負責,主要是負責磁盤空間的管理、連續空間申請,介紹段、區的詳細內容之前,我們先來看一下表空間檔案的元資料頁資訊

元資料頁概述

  • 表空間檔案的第一個16kb,pageno=0的資料頁稱之為File Space Header,主要有兩部分內容構成,fsp_header/xdes_entry

    • fsp_header記錄整個表空間具體資訊
    • xdes_entry記錄當前表空間連續的256個extent資訊,每間隔256M空間就會插入一個xdes_entry,不同的是后續的xdes_entry頁面不包含fsp_header
  • 表空間檔案的第二個16kb,pageno=1的資料頁稱之為Insert Buffer Bitmap,插入緩沖位圖頁,記錄后續連續16384個資料頁(256M)的插入緩沖位圖資訊,可以看到每隔256M的表空間間距均會新增兩個資料頁,一個是xdes_entry描述頁,一個是Insert Buffer Bitmap描述頁

  • 表空間的檔案的第三個16kb,pageno=2的資料頁記錄的是File Segment inode段資訊記錄頁,也稱之為inode資訊頁,一個inode資訊頁記錄85個segment段資訊,一個索引占據兩個段描述符號,通常情況下對于獨立表空間檔案,此頁面通常只需要一個即可滿足大部分需求,感興趣的可以試試如下的資料表

	CREATE TABLE `test_fsp` (
	  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
	  `a` int(11) NOT NULL DEFAULT '0',
	  `b` int(11) NOT NULL DEFAULT '0',
	  `c` int(11) NOT NULL DEFAULT '0',
	  `d` int(11) NOT NULL DEFAULT '0',
	  `e` int(11) NOT NULL DEFAULT '0',
	  `f` int(11) NOT NULL DEFAULT '0',
	  `g` int(11) NOT NULL DEFAULT '0',
	  `h` int(11) NOT NULL DEFAULT '0',
	  `i` int(11) NOT NULL DEFAULT '0',
	  `j` int(11) NOT NULL DEFAULT '0',
	  `k` int(11) NOT NULL DEFAULT '0',
	  `l` int(11) NOT NULL DEFAULT '0',
	  `m` int(11) NOT NULL DEFAULT '0',
	  `n` int(11) NOT NULL DEFAULT '0',
	  `o` int(11) NOT NULL DEFAULT '0',
	  `p` int(11) NOT NULL DEFAULT '0',
	  `q` int(11) NOT NULL DEFAULT '0',
	  `r` int(11) NOT NULL DEFAULT '0',
	  `s` int(11) NOT NULL DEFAULT '0',
	  `t` int(11) NOT NULL DEFAULT '0',
	  `u` int(11) NOT NULL DEFAULT '0',
	  `v` int(11) NOT NULL DEFAULT '0',
	  `w` int(11) NOT NULL DEFAULT '0',
	  `x` int(11) NOT NULL DEFAULT '0',
	  `y` int(11) NOT NULL DEFAULT '0',
	  `z` int(11) NOT NULL DEFAULT '0',
	  PRIMARY KEY (`id`),
	  KEY `ix_a` (`a`),
	  KEY `ix_b` (`b`),
	  KEY `ix_c` (`c`),
	  KEY `ix_d` (`d`),
	  KEY `ix_e` (`e`),
	  KEY `ix_f` (`f`),
	  KEY `ix_g` (`g`),
	  KEY `ix_h` (`h`),
	  KEY `ix_i` (`i`),
	  KEY `ix_j` (`j`),
	  KEY `ix_k` (`k`),
	  KEY `ix_l` (`l`),
	  KEY `ix_m` (`m`),
	  KEY `ix_n` (`n`),
	  KEY `ix_o` (`o`),
	  KEY `ix_p` (`p`),
	  KEY `ix_q` (`q`),
	  KEY `ix_r` (`r`),
	  KEY `ix_s` (`s`),
	  KEY `ix_t` (`t`),
	  KEY `ix_u` (`u`),
	  KEY `ix_v` (`v`),
	  KEY `ix_w` (`w`),
	  KEY `ix_x` (`x`),
	  KEY `ix_y` (`y`),
	  KEY `ix_z` (`z`),
	  KEY `ix_ab` (`a`,`b`),
	  KEY `ix_cd` (`c`,`d`),
	  KEY `ix_ef` (`e`,`f`),
	  KEY `ix_gh` (`g`,`h`),
	  KEY `ix_ij` (`i`,`j`),
	  KEY `ix_kl` (`k`,`l`),
	  KEY `ix_mn` (`m`,`n`),
	  KEY `ix_op` (`o`,`p`),
	  KEY `ix_qr` (`q`,`r`),
	  KEY `ix_st` (`s`,`t`),
	  KEY `ix_uv` (`u`,`v`),
	  KEY `ix_wx` (`w`,`x`),
	  KEY `ix_yz` (`y`,`z`),
	  KEY `ix_abc` (`a`,`b`,`c`),
	  KEY `ix_edf` (`e`,`d`,`f`),
	  KEY `ix_ghi` (`g`,`h`,`i`)
	) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;	

此表包含26個英文字母資料列+id主鍵列,索引數量1+26+13+3 = 43,總共需要的段的資料量數目是43*2=86,超過了85個,此時在執行mysql_page_info test/test_fsp.ibd 可以看到輸出File Segment inode: 2, 變成2了,亦即此時需要兩個inode資料頁才能滿足需求,不過一般情形下一張表的索引數不會這么多

FSP_HDR/XDES_ENTRY

整體結構如下:
fsp_xdes

可以看到在除了page0頁之外的xdes描述頁,fsp header均為空,xdes_entry中記錄256個entry,每個entry記錄一個區的資訊

fsp header結構如下:
fsp_header

  • Space Id(4)/FSP_SPACE_ID 記錄當前表空間ID
  • (Unused) (4) 暫未使用的空間
  • Highest page number in file (size) (4) / FSP_SIZE 代表當前表空間資料頁的數量計算方式為(ibd_file_size*1024/16)
  • Highest page number initialized (free limit) (4) /FSP_FREE_LIMIT 當前表空間檔案中未被初始化的資料頁起始位置,通常當表空間資料頁不足的時候,需要從此位置開始申請資料頁
  • Flags (4) /FSP_SPACE_FLAGS 標志位
  • Number of pages used in "FREE_FRAG" list (4) /FSP_FRAG_N_USED FREE_FRAG 空閑鏈表上的資料頁數量
  • List base node for "FREE" list (16) / FSP_FREE 所有的Page均為空閑的Extent鏈表
  • List base node for "FREE_FRAG" list (16) / FSP_FREE_FRAG Extend中的page部分被使用的鏈表
  • List base node for "FULL_FRAG" list (16) / FSP_FULL_FRAG Extend中的page全部被使用的鏈表
  • Next Unused Segment ID (8) /FSP_SEG_ID 表示下一個未被使用的Segment ID
  • List base node for "FULL_INODES" list (16)/FSP_SEG_INODES_FULL 表示Segment Page的所有的Inode均已被使用
  • List base node for "FREE_INODES" list (16)/FSP_SEG_INODES_FREE 表示Segment Page存在空閑的Inode

檔案鏈表(List base node/List Node):
list_base_node

  • 包含一個描述鏈表長度的4位元組

  • 兩個6位元組的"First"/"Last"指標構成的雙向兩表,通常這部分用于表頭節點,記錄整個鏈表的起始與結束位置

list_node

  • 包含"Prev"/"Next"指標構成雙向鏈表的節點,這部分通常用于構成鏈表的節點部分(比如Xdes_entry中的資料結構),,鏈表由pageNo(4)+offset(2)構成,prev(first)/next(last)一共12位元組(頁的大小為16KB,所以2位元組(16bit)的頁內偏移即可)

First、Prev/Last、Next的大小均為6位元組的大小,fsp_header中主要記錄段(indodes)、區/頁(frag) 的分配鏈表資訊以及整個表空間整體的資料頁數量、segment數量等元素資訊

表空間的檔案分配規則大致如下所述
  • 對于新表,依據建表陳述句索引個數多少,此階段對于系統存盤空間按照碎片頁的方式分配,亦即此時存盤空間的申請基本是16kb*N的的方式遞增

  • 隨著資料的插入,當資料量逐漸增多,資料容量逐漸超過32個碎片頁的大小時候(通常比這個會小點,系統申請空間通常會預留一部分空閑空間,此處舉例說明分配流程)新的磁磁盤空間按區申請(1M)

    • 此處的32跟segment的結構有關系,后續會說明
  • 隨著更多的資料插入,系統按照1M的方式逐漸擴張表空間檔案,當表空間的容量達到32M,系統會以4M(4個區大小)容量的方式擴充表空間的容量大小

前面提到過,對于表空間檔案,需要盡量滿足資料頁在磁盤存盤上的連續性,通常情況下批量分配能夠保證一組資料頁的連續性,在平衡小表空間使用率的情況下,上述分配方式能夠盡量的減小磁盤空間的浪費,同時對于大表也能保證后續分配資料頁在整體上都是連續的

page0的第二部分內容即位xdes_entry,每個xdes_entry大小為40位元組,一共256個xdes_entry,記錄接下來的256個區(256M表空間)的資訊,xdes_entry的結構如下:

xdes_entry

  • File Segment ID (8) / FSEG_ID 當前的區所屬的段號,0代表當前區內的頁面通常分屬于不同的段,亦即當前區里面的頁大概率是碎片頁,具體還需要參見state欄位
  • List node for XDES list (12) 區塊的檔案雙向鏈表
  • State (4) 當前區的狀態
    • FREE:歸屬于 FSP_FREE 鏈表(參見FSP_HEADER小結的FSP_FREE)
    • FREE_FRAG:歸屬于 FSP_FREE_FRAG 鏈表 (參見FSP_HEADER小結的FSP_FREE_FRAG)
    • FULL_FRAG:歸屬于 FSP_FULL_FRAG 鏈表 (參見FSP_HEADER小結的FSP_FULL_FRAG)
    • FSEG:歸屬于某個Segment,亦即此時上述FSEG_ID在state為此值時候值才會大于0(有意義的segment id)
  • Page State Bitmap (16) 2 bits per page, 1=free, 2=clean 16位元組(16*8/2 = 64),代表一個區中64個頁的狀態

Inode(File Segment)

pageno=2的頁為檔案段的元資料資訊描述頁(此處略去pageno=1的插入緩沖位圖資料頁是因為此資料頁與表空間的存盤分配沒有特別大的關系,關聯性不大,后續有機會會專門介紹MySql的插入緩沖相關的內容)

照例先看資料結構圖:
inode_overview

12位元組的檔案鏈表頭以及85個entry,單個entry192位元組,Entry的結構如下
inode_entry

  • FSEG ID (8)/FSEG_ID 與entry對應的SegmentId ,為0表示當前segment id暫未使用
  • Number of used pages in "NOT_FULL" list (4)/FSEG_NOT_FULL_N_USED FSEG_NOT_FULL鏈表上被使用的Page數量
  • List base node for "FREE" list (16)/FSEG_FREE 空閑extent鏈表,完全沒有被使用并分配給該Segment的Extent鏈表
  • List base node for "NOT_FULL" list (16)/FSEG_NOT_FULL 至少有一個page分配給當前Segment的Extent鏈表,全部用完時,轉移到FSEG_FULL上,全部釋放時,則歸還給當前表空間FSP_FREE鏈表
  • List base node for "FULL" list (16)/FSEG_FULL 分配給當前segment且Page完全使用完的Extent鏈表
  • Magic Number = 97937874 (4)/FSEG_MAGIC_N Magic Number,
  • Fragment Array Entry 0 (4)/FSEG_FRAG_ARR(0) 屬于該Segment的獨立Page,總是先從全域分配獨立的Page,當填滿32個陣列項時,每次分配時都分配一個完整的Extent,并在xdes_entry中將其Segment ID設定為當前值
  • Fragment Array Entry 31 (4)/FSEG_FRAG_ARR(31) 總共能存盤32個資料頁(編號)碎片,可以看到碎片頁的分配數量為什么是32了

小結

可以看到,以下的幾個元資料頁的資訊在結構上有幾個共同點:

  • 對于檔案鏈表表頭,均保存了鏈表的長度、表頭、表尾的指標指向
  • 對于段、區元資料資訊的描述,有專門的資料描述頁,對于整個表空間檔案存盤空間的管理都是通過這些元資料頁資訊來分配的
  • Free/Not Full/Full 鏈表結構分別用于記錄完全空閑(按塊分配)、區域空閑(碎片分配)、滿空間的結構
  • 對于存盤空間的管理具備在邏輯上是一個層次化的結構(參見表空間檔案的整體結構圖)
  • 頁的大小均是固定的16KB(此處不涉及壓縮資料的范疇),不同的是里面內部的資料結構不同決定了資料頁的型別、用途
  • 設計上均采取header/body的形式(計算機科學中很多場景都會使用此中資料組織方式,場景的網路層協議堆疊分層設計)

下面我們可以來看看完整的邏輯、物理結構檔案映射圖:
image

自底向上,可以分為這幾部分

  • 第一層為表空間資料檔案物理結構,資料頁按照16kb的方式劃分,資料頁之間用雙向鏈表的方式串接(后續介紹資料頁結構會描述),每64個資料頁(1M)的空間劃分為一個區
  • 第二層為區的邏輯劃分,每一個xdes_entry資料頁描述256個區,xdes_entry資料頁之間的也用雙向鏈表銜接
  • 第三層為Inode的描述結構,這里面有資料碎片頁的描述資訊,更多的是對于下層區的管理與描述
  • 第四層即為索引段的邏輯結構來,可以看到圖中的箭頭指向以及資料頁的pageno標號

附錄

  • 文中圖片檔案出處:
    https://github.com/jeremycole/innodb_diagrams

  • 文章大部分內容思路來源于https://blog.jcole.us/innodb/
    英文好的同學可以直接閱讀原版內容

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/286061.html

標籤:MySQL

上一篇:存盤體系

下一篇:mysql-jdbc

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more