成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

Render / 3664人閱讀

摘要:所以為了鍛煉自己的數(shù)據(jù)結(jié)構(gòu)與算法能力,我參照其中一些數(shù)據(jù)結(jié)構(gòu)的,對(duì)諸如動(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í)踐,顯然是無(wú)法真正理解書上奇形怪狀的數(shù)據(jù)結(jié)構(gòu)的。

所以為了鍛煉自己的數(shù)據(jù)結(jié)構(gòu)與算法能力,我參照其中一些數(shù)據(jù)結(jié)構(gòu)的API,對(duì)諸如動(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ì)慢慢將其完善,懇請(qǐng)批評(píng)指教!

github鏈接



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

如今本項(xiàng)目還只是實(shí)現(xiàn)了key-value的存儲(chǔ)功能,其他諸如切換數(shù)據(jù)庫(kù)、數(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ù)庫(kù)結(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ù)庫(kù)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è)客戶端的請(qǐng)求。對(duì)多個(gè)客戶端的處理部分我們通過創(chuàng)建線程來完成。每次檢測(cè)到有一個(gè)客戶端進(jìn)行連接,便為其創(chuàng)建一個(gè)工作線程,在其中執(zhí)行客戶端與服務(wù)端的通信操作。

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

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



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

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

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

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

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

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

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

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



測(cè)試結(jié)果




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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/17949.html

相關(guān)文章

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

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

    genedna 評(píng)論0 收藏0
  • 《HelloGitHub》第 68 期

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

    番茄西紅柿 評(píng)論0 收藏2637

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<