成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

小型Redis完成! | 自己實(shí)現(xiàn)Redis源代碼(4)

Render / 3719人閱讀

摘要:所以為了鍛煉自己的數(shù)據(jù)結(jié)構(gòu)與算法能力,我參照其中一些數(shù)據(jù)結(jié)構(gòu)的,對諸如動(dòng)態(tài)字符串,雙端鏈表,字典及其內(nèi)嵌的哈希表等數(shù)據(jù)結(jié)構(gòu)進(jìn)行了實(shí)現(xiàn)。

緣起

近期在閱讀《Redis設(shè)計(jì)與實(shí)現(xiàn)》一書,我發(fā)現(xiàn)如果不動(dòng)手實(shí)踐,顯然是無法真正理解書上奇形怪狀的數(shù)據(jù)結(jié)構(gòu)的。

所以為了鍛煉自己的數(shù)據(jù)結(jié)構(gòu)與算法能力,我參照其中一些數(shù)據(jù)結(jié)構(gòu)的API,對諸如動(dòng)態(tài)字符串SDS,雙端鏈表list字典dict及其內(nèi)嵌的哈希表dictht等數(shù)據(jù)結(jié)構(gòu)進(jìn)行了實(shí)現(xiàn)。

當(dāng)然,為了讓他們有用武之地,我在這基礎(chǔ)上構(gòu)建了一個(gè)小型Redis,作為自己的學(xué)習(xí)記錄。當(dāng)然現(xiàn)在的項(xiàng)目功能還不夠完善,后期我會(huì)慢慢將其完善,懇請批評指教!

github鏈接



實(shí)現(xiàn)流程

如今本項(xiàng)目還只是實(shí)現(xiàn)了key-value的存儲(chǔ)功能,其他諸如切換數(shù)據(jù)庫、數(shù)據(jù)持久化等功能將會(huì)在后期慢慢實(shí)現(xiàn)。

項(xiàng)目實(shí)現(xiàn)流程如下:

基本數(shù)據(jù)結(jié)構(gòu)的構(gòu)建

客戶端服務(wù)端的交互

基本命令的實(shí)現(xiàn)



原理分析 1.基本數(shù)據(jù)結(jié)構(gòu)的構(gòu)建

下面主要介紹數(shù)據(jù)庫結(jié)構(gòu)redisDb的構(gòu)建,其他數(shù)據(jù)結(jié)構(gòu)可以參見我的系列文章:

動(dòng)態(tài)字符串SDS的實(shí)現(xiàn) | 自己實(shí)現(xiàn)Redis源代碼(1)

雙端鏈表list的實(shí)現(xiàn) | 自己實(shí)現(xiàn)Redis源代碼(2)

字典與哈希表 | 自己實(shí)現(xiàn)Redis源代碼(3)

數(shù)據(jù)庫redisDb的基本結(jié)構(gòu)如下:



2. 客戶端服務(wù)端的交互

客戶端與服務(wù)端的結(jié)構(gòu)如下

兩者通過建立網(wǎng)絡(luò)連接,進(jìn)行數(shù)據(jù)交互,完成通信過程。這里的網(wǎng)絡(luò)連接的建立是通過套接字socket建立的。

在Redis的單機(jī)應(yīng)用中,一個(gè)服務(wù)端redisServer進(jìn)程可以處理多個(gè)客戶端的請求。對多個(gè)客戶端的處理部分我們通過創(chuàng)建線程來完成。每次檢測到有一個(gè)客戶端進(jìn)行連接,便為其創(chuàng)建一個(gè)工作線程,在其中執(zhí)行客戶端與服務(wù)端的通信操作。

服務(wù)端含有一個(gè)數(shù)據(jù)庫數(shù)組,記錄保存在服務(wù)端的所有數(shù)據(jù)庫,默認(rèn)數(shù)據(jù)庫數(shù)量為16。

客戶端含有一個(gè)數(shù)據(jù)庫指針,指向其當(dāng)前正在使用的目標(biāo)數(shù)據(jù)庫,方便其進(jìn)行切換數(shù)據(jù)庫操作。



3. 基本命令的實(shí)現(xiàn)

這里主要講解get/set命令的實(shí)現(xiàn)。

服務(wù)端結(jié)構(gòu)到客戶端輸入的命令,需要進(jìn)行一下操作:

1)判斷是否為查看類命令

如,查看幫助文檔,查看版本信息等;

2)對命令進(jìn)行分割
3)判斷命令關(guān)鍵字

如,命令為set pig 12,切割后我們可以得到["set","pig","12"],通過對關(guān)鍵字set的判斷,可以得知其為set命令。

4)檢查命令長度
5)執(zhí)行相關(guān)命令



測試結(jié)果




文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/17949.html

相關(guān)文章

  • PHP程序員學(xué)習(xí)路線

    摘要:第一階段基礎(chǔ)階段基礎(chǔ)程序員重點(diǎn)把搞熟練核心是安裝配置基本操作目標(biāo)能夠完成基本的系統(tǒng)安裝,簡單配置維護(hù)能夠做基本的簡單系統(tǒng)的開發(fā)能夠在中型系統(tǒng)中支持某個(gè)功能模塊的開發(fā)。本項(xiàng)不做重點(diǎn)學(xué)習(xí),除非對前端有興趣。 第一階段:基礎(chǔ)階段(基礎(chǔ)PHP程序員) 重點(diǎn):把LNMP搞熟練(核心是安裝配置基本操作) 目標(biāo):能夠完成基本的LNMP系統(tǒng)安裝,簡單配置維護(hù);能夠做基本的簡單系統(tǒng)的PHP開發(fā);能夠在P...

    genedna 評論0 收藏0
  • 《HelloGitHub》第 68 期

    摘要:整個(gè)項(xiàng)目簡單還具有實(shí)用價(jià)值,可作為的實(shí)戰(zhàn)項(xiàng)目學(xué)習(xí)的調(diào)試工具欄。查看文檔自動(dòng)在個(gè)人首頁展示編程時(shí)長的工具。通過學(xué)習(xí)這些前沿的人工智能論文,提前了解在未來更多可能性可以將圖片和視頻轉(zhuǎn)換成漫畫風(fēng)格的工具。興趣是最好的老師,HelloGitHub 讓你對編程感興趣!簡介HelloGitHub 分享 GitHub 上有趣、入門級的開源項(xiàng)目。https://github.com/521xueweihan...

    番茄西紅柿 評論0 收藏2637

發(fā)表評論

0條評論

閱讀需要支付1元查看
<