自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Redis 7.0 源碼調(diào)試環(huán)境搭建與源碼導(dǎo)讀技巧

數(shù)據(jù)庫 Redis
Redis 源碼目錄還有兩個(gè)重要的文件,redis.conf 和 sentinel.conf,分別用于配置 Redis 實(shí)例運(yùn)行和哨兵配置。

天下武功,無堅(jiān)不摧,唯快不破!我的名字叫 Redis,全稱是 Remote Dictionary Server。

有人說,組 CP,除了要了解她外,還要給機(jī)會(huì)讓她了解你。

那么,作為開發(fā)工程師的你,是否愿意認(rèn)真閱讀此心法抓住機(jī)會(huì)來了解我,運(yùn)用到你的系統(tǒng)中提升性能。

我遵守 BSD 協(xié)議,由意大利人 Salvatore Sanfilippo 使用 C 語言編寫的一個(gè)基于內(nèi)存實(shí)現(xiàn)的鍵值型非關(guān)系(NoSQL)數(shù)據(jù)庫。

我是一個(gè)內(nèi)存數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)、可作為數(shù)據(jù)庫、緩存、消息隊(duì)列、流處理引擎,速度快是我的特點(diǎn)。

根據(jù)官方數(shù)據(jù),Redis 的 QPS 可以達(dá)到約 100000(每秒請(qǐng)求數(shù))。

我提供了 String(字符串)、Hashes(散列表)、Lists(列表)、Sets(無序集合)、Sorted Sets(可根據(jù)范圍查詢的排序集合)、Bitmap(位圖)、HyperLogLog、Geospatial (地理空間)和 Stream(流)等數(shù)據(jù)結(jié)構(gòu)。

數(shù)據(jù)結(jié)構(gòu)的使用技法和實(shí)現(xiàn)原理是你核心筑基必經(jīng)之路,好好修煉。

除此之外,我還具有主從復(fù)制、Lua 腳本、LRU 淘汰機(jī)制,事務(wù)和不同級(jí)別的磁盤持久化功能,并通過 Redis Sentinel(哨兵)和 Redis Cluster(Redis 集群)實(shí)現(xiàn)高可用,這部分內(nèi)容,重中之重,高手必備。

我還支持一些原子操作,支持異步復(fù)制實(shí)現(xiàn)快速非阻塞同步和自動(dòng)重連,另外需要注意的是,推薦你在 Lunix /Unix 系統(tǒng)上部署,官方并沒有在 Windows 系統(tǒng)上構(gòu)建安裝包。

1.1.1 Redis 能干啥

程許媛:“Redis 你說了這么多?你能干啥?別王婆賣瓜,自賣自夸?!?/p>

緩存

這是我被使用的最多的場(chǎng)景,能極大提升應(yīng)用程序的性能。當(dāng)單個(gè) MySQL 讀寫壓力比較大,場(chǎng)景是讀多寫少的時(shí)候,把熱點(diǎn)數(shù)據(jù)存儲(chǔ)在更快的存儲(chǔ)中,也就是 Redis。

讀取數(shù)據(jù)

  • 先從緩存中讀取數(shù)據(jù)是否命中。
  • 緩存未命中,則查詢數(shù)據(jù)庫獲取數(shù)據(jù),并把數(shù)據(jù)寫到 Redis 中,讓后續(xù)讀取相同數(shù)據(jù)的請(qǐng)求命中緩存,最后把數(shù)據(jù)返回給調(diào)用者。
  • 緩存命中,直接返回。

寫數(shù)據(jù)

至于修改數(shù)據(jù),程序員想了很多方法去盡可能保證 Redis 與 MySQL 的數(shù)據(jù)一致性。

  • 先寫 MySQL 數(shù)據(jù),再刪除 Redis 緩存數(shù)據(jù)。
  • 監(jiān)聽 MySQL binlog 日志,修改 Redis 數(shù)據(jù)。

排行榜

使用 MySQL 等關(guān)系型數(shù)據(jù)庫,非常麻煩,性能也差,而直接使用 Redis SortedSet 輕松搞定。

消息隊(duì)列

簡(jiǎn)單消息隊(duì)列,在一些不需要高可靠,但是數(shù)據(jù)量大會(huì)給 MySQL 帶來非常大壓力的場(chǎng)景,比如:到貨通知、未讀消息、郵件發(fā)送之列的。程序員可以使用 Lists 來實(shí)現(xiàn)一個(gè)隊(duì)列。

分布式鎖

Redisson 這個(gè)框架,就是使用 Redis 弄出了一套分布式鎖解決方案。

計(jì)數(shù)器

Redis 的命令都是原子性的,程序員可以輕松地利用 INCR,DECR命令來構(gòu)建計(jì)數(shù)器系統(tǒng)。

還有很多場(chǎng)景,我會(huì)在后面章節(jié)詳細(xì)道來,學(xué)完之后,我相信你定能筑基鍛體,念頭通達(dá),升職加薪。

千古無同局,葉底能否藏花,我們未來印證,愿此心法能讓你學(xué)有所成,你來,我等著。

1.1.2 源代碼編譯

經(jīng)過上一篇的 Redis 簡(jiǎn)介,我相信你一定想繼續(xù)了解 Redis。本章節(jié)會(huì)通過源代碼編譯來安裝 Redis 7.0.5,讓你在自己的機(jī)器上搭建一套可以 Debug 的 Redis 7.0.5 源碼環(huán)境。

這也是后續(xù)原理分析的基礎(chǔ),推薦你部署在 macOS 或者 Linux 上搭建,如果你是 Windows 環(huán)境,那就搞一個(gè)虛擬機(jī)在上面裝一個(gè) Linux 系統(tǒng),再繼續(xù)搭建 Redis 環(huán)境。

程許媛:“我的電腦是 Mac OS 系統(tǒng),你就用這個(gè)來演示吧。”

獲取源代碼

有兩種方式,第一種是從官網(wǎng)下載 Redis 源碼壓縮包,如圖 1-1 所示。

圖片

圖1-1

將壓縮包解壓得到一個(gè)文件夾。

第二種方式,通過 git clone 獲取源碼。

從 Github 上,使用 git clone https://github.com/redis/redis.git指令下載,下載完成后你會(huì)得到如下文件。

圖片

圖 1-2

進(jìn)入 redis 目錄,使用 git checkout 切換到 7.0.5 這個(gè) tag 。

gir checkout tags/7.0.5 -b 7.0.5

編譯 Redis

在編譯之前,需要安裝一些環(huán)境依賴,Redis 是 C 語言編寫的,所以還需要 gcc 編譯器。

執(zhí)行 gcc -v判斷是否安裝了編譯器。

圖片

圖 1-3

沒有安裝的話,使用如下指令安裝。

xcode-select --install

一切準(zhǔn)備就緒,進(jìn)入 redis 的源碼目錄,執(zhí)行 make命令就可以了,你可以類比成 Java 中的 mvn 命令。

make CFLAGS="-g -O0" MALLOC=jemalloc

命令后邊的 “-O0” 參數(shù)表示告訴編譯器不要優(yōu)化代碼,防止你在 Debug 的時(shí)候, IDE 里面的 Redis 源碼與實(shí)際運(yùn)行的代碼對(duì)應(yīng)不上。

MALLOC=jemalloc ,指定在 Mac OS 系統(tǒng)上 Redis 使用 jemalloc 內(nèi)存分配器,Linux 默認(rèn)使用該分配器,如果是 Linux 系統(tǒng),無需指定該參數(shù)。

內(nèi)存碎片自動(dòng)清理功能只在 jemalloc 內(nèi)存分配器生效,所以才加上這個(gè)參數(shù)指定內(nèi)存分配器。

如果在 Linux 系統(tǒng)上用于生產(chǎn)環(huán)境,那么直接使用指令 make命令即可。

編譯成功,將會(huì)看到圖 1-4 中Hint: It's a good idea to run 'make test' ;),提示我們可以運(yùn)行單元測(cè)試,這一步可以省略。

圖片

圖 1-4

啟動(dòng) Redis

編譯成功,進(jìn)入 src 源碼目錄下,你會(huì)看到一個(gè) redis-server 的可執(zhí)行程序,使用如下指令啟動(dòng)。

./redis-server ../redis.conf

圖片

圖 1-5

代碼調(diào)試環(huán)境搭建

編譯好了,我們還差一個(gè)方便閱讀和調(diào)試源碼的工具。為了方便閱讀和 debug 源碼,極力推薦你使用 CLion 來閱讀和調(diào)試 Redis 源碼,我使用的是 CLion 2021.3 版本,它支持 Makefile 的項(xiàng)目。

安裝好以后,打開 CLion,點(diǎn)擊 open,選擇 Redis 源碼目錄即可。

圖片

圖 1-6

之后檢查下 Run Debug 是否出現(xiàn)這些選項(xiàng),選擇編輯。

圖片

圖 1-7

選擇編輯 redis-server ,指定啟動(dòng)配置文件 redis.conf的目錄,保存。

圖片

圖 1-8

在 server.c? 的main() 方法加斷點(diǎn),Debug 啟動(dòng) redis -server,進(jìn)行源碼 Debug。

圖片

圖 1-9

大功告成,接下來就可以在 Redis 的知識(shí)海洋里嗆水了。

目錄結(jié)構(gòu)

在知識(shí)海洋嗆水之前,先來了解下 Redis 的目錄結(jié)構(gòu),從 Redis 整體目錄結(jié)構(gòu)來對(duì)系統(tǒng)有個(gè)全局的認(rèn)識(shí),了解一個(gè)系統(tǒng)的主要組成,同時(shí)防止陷入細(xì)節(jié)或者無從下手。

deps

這個(gè)目錄主要包含 Redis 所依賴的第三方代碼庫。

  • Jemalloc,內(nèi)存分配器,默認(rèn)情況下選擇該內(nèi)存分配器來代替 Linux 系統(tǒng)的 libc-malloc,libc-malloc 性能不高,且碎片化嚴(yán)重。
  • hiredis,這是官方 C 語言客戶端。
  • linenoise 是一種讀線替換。它由 Redis 的 同一作者開發(fā),但作為一個(gè)單獨(dú)的項(xiàng)目進(jìn)行管理,并根據(jù)需要進(jìn)行更新。
  • lua,顧名思義,就是 lua 相關(guān)的功能。
  • hdr_histogram,用于生成每個(gè)命令的延遲跟蹤直方圖。

src 目錄

這是 Redis 源碼的重要組成部分,里面有 commands? 和 modules 兩個(gè)子目錄,其余功能模塊的源碼都在 src 目錄下,這是最重要的目錄。

modules?目錄包含了實(shí)現(xiàn)Redis module?的示例代碼,commands里面都是 json 格式的文件,包含了每個(gè)指令的元信息。

tests 目錄

顧名思義,功能模塊測(cè)試和單元測(cè)試的代碼就在這里。

  • cluster,Redis Cluster 功能測(cè)試。
  • sentinel,哨兵集群功能測(cè)試。
  • unit,單元測(cè)試。
  • integration,主從復(fù)制功能測(cè)試。

剩下的 assets、helpers、modules、support 四個(gè)目錄中是用來支撐測(cè)試功能的。

utils 目錄

輔助性功能的腳本或者代碼,比如用于創(chuàng)建 Redis Cluster 的腳本,lru 算法效果展示代碼等。

除此之外,Redis 源碼目錄還有兩個(gè)重要的文件,redis.conf 和 sentinel.conf,分別用于配置 Redis 實(shí)例運(yùn)行和哨兵配置。

責(zé)任編輯:武曉燕 來源: 碼哥字節(jié)
相關(guān)推薦

2021-02-06 13:28:21

鴻蒙HarmonyOS應(yīng)用開發(fā)

2022-03-18 13:58:00

RocketMQ消息隊(duì)列

2023-07-10 08:43:53

SpringIDEA

2017-02-27 21:55:04

LinuxCentOS 7.0Redis

2017-12-22 10:51:04

Hadoop編譯環(huán)境

2013-05-28 10:52:07

Android開發(fā)移動(dòng)開發(fā)移動(dòng)應(yīng)用

2011-09-13 17:44:00

Eclipse And

2021-01-25 16:28:10

鴻蒙HarmonyOS搭建環(huán)境

2014-08-19 10:30:30

Swift源碼OpenStack架構(gòu)

2022-07-31 19:57:26

react項(xiàng)目VSCode

2023-07-10 07:40:14

2023-02-14 08:29:08

MySQLDocker

2023-09-13 07:30:36

ADManager漏洞調(diào)試

2017-06-07 14:58:39

Redis源碼學(xué)習(xí)Redis事務(wù)

2009-12-30 18:02:32

Silverlight

2025-03-05 00:49:00

Win32源碼malloc

2009-12-18 11:14:52

VS 2010環(huán)境

2023-07-31 07:15:09

漏洞調(diào)試環(huán)境

2021-01-07 10:18:03

Redis數(shù)據(jù)庫環(huán)境搭建

2009-12-14 17:57:21

NET 源碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)