在如今的軟件中,緩存是解決很多問(wèn)題的關(guān)鍵概念。您的應(yīng)用程序可能是CPU密集型的。當(dāng)然,你不希望這些操作一遍又一遍的重復(fù)。相反,您只能執(zhí)行它們一次,并將結(jié)果作為緩存放入內(nèi)存。在今天的軟件中,緩存是解決很多問(wèn)題的關(guān)鍵概念。您的應(yīng)用程序可能是CPU密集型的。當(dāng)然,你不希望這些操作一遍又一遍的重復(fù)。相反,您只能執(zhí)行它們一次,并將結(jié)果作為緩存放入內(nèi)存。
類(lèi)似于上面的情況,在某些情況下我們需要做一個(gè)快速搜索來(lái)決定如何處理新的請(qǐng)求。比如考慮以下情況,你需要確認(rèn)一個(gè)網(wǎng)址是否指向惡意網(wǎng)站,這個(gè)需求可能很多。如果我們把所有惡意網(wǎng)站的網(wǎng)址緩存加起來(lái),會(huì)占很大空間?;蛘咴诹硪环N情況下,您需要確認(rèn)用戶(hù)輸入的字符串包含美國(guó)的地名。就像這個(gè)字符串中的“華盛頓博物館”一樣,華盛頓是美國(guó)的一個(gè)地名。
5、Redis底層 數(shù)據(jù)結(jié)構(gòu)之string眾所周知,Redis是用C語(yǔ)言編寫(xiě)的。在C語(yǔ)言中,標(biāo)準(zhǔn)形式的字符串以空字符\0結(jié)尾,但Redis中的字符串并不直接跟在C語(yǔ)言中的字符串后面。主要原因是在C語(yǔ)言中可以調(diào)用標(biāo)準(zhǔn)函數(shù)strlen來(lái)獲取字符串長(zhǎng)度,而這個(gè)函數(shù)的時(shí)間復(fù)雜度是O(N),因?yàn)镽edis是單線程的,承受不了這個(gè)時(shí)間復(fù)雜度。在上一篇文章中,我們介紹了Redis的RedisObject的數(shù)據(jù)結(jié)構(gòu),如下圖:對(duì)于不同的對(duì)象,Redis會(huì)使用不同的類(lèi)型來(lái)存儲(chǔ)。
string有三種底層編碼方法,即int、embstr和raw。使用objectencodingkey可以查看鍵對(duì)應(yīng)的編碼類(lèi)型,如下圖:對(duì)于embstr和raw,存儲(chǔ)方式不太一樣。對(duì)于embstr類(lèi)型,它連接RedisObject的頭和內(nèi)存中SDS對(duì)象的地址,但對(duì)于raw類(lèi)型,內(nèi)存地址不是連續(xù)的。
6、內(nèi)存數(shù)據(jù)庫(kù)主流的有哪些,并給出各自特點(diǎn)!下面是一些市場(chǎng)占有率比較高的大型內(nèi)存數(shù)據(jù)庫(kù),也是業(yè)界比較知名的,比如SAPHANA、OracleExalytics、OraleTimesTen、IBMSolidDB等??梢哉f(shuō),這其中哪個(gè)最好,沒(méi)有定論,主要看使用場(chǎng)景和具體需求。它們各自的特點(diǎn)如下:Saphana(高性能分析應(yīng)用)是基于內(nèi)存計(jì)算技術(shù),面向企業(yè)分析應(yīng)用的產(chǎn)品,由SAP于2011年推出。
支持從SAP business suite同步更新業(yè)務(wù)數(shù)據(jù),或者從SAPBW(SAP商業(yè)智能產(chǎn)品)等第三方數(shù)據(jù)源批量導(dǎo)入數(shù)據(jù),在HANA中計(jì)算后提供給SAPBI客戶(hù)端或其他第三方展現(xiàn)工具進(jìn)行分析和展現(xiàn)。Oracle exalytics all-in-one memory analyzer是一款面向分析的一體化設(shè)計(jì)系統(tǒng),可以無(wú)限制地提供最佳的可視化分析和更智能的分析應(yīng)用。
7、一文帶你認(rèn)識(shí)30個(gè)重要的 數(shù)據(jù)結(jié)構(gòu)和算法