王 豐, 鮑正剛
(中電科申泰信息科技有限公司, 江蘇 無(wú)錫 214000)
Redis 作為內(nèi)存數(shù)據(jù)庫(kù)得到廣泛應(yīng)用[1],主要是安裝在基于x86 或ARM 架構(gòu)處理器的服務(wù)器上使用,并提供數(shù)據(jù)存儲(chǔ)服務(wù)。
近年來,國(guó)產(chǎn)處理器的研發(fā)已取得可觀成就。申威架構(gòu)的處理器作為純國(guó)產(chǎn)指令集架構(gòu)處理器,現(xiàn)已應(yīng)用于服務(wù)器和PC 終端,其中的申威SW3231采用的是“申威64”自主指令系統(tǒng)[2],考慮到處理器為國(guó)產(chǎn)指令架構(gòu),故而軟件生態(tài)受到較大限制。目前,隨著國(guó)產(chǎn)申威處理器在民用服務(wù)中的推廣使用,為實(shí)現(xiàn)國(guó)產(chǎn)申威架構(gòu)生態(tài)發(fā)展,在申威架構(gòu)上編譯安裝Redis 內(nèi)存數(shù)據(jù)庫(kù),同時(shí)也要驗(yàn)證在申威處理器服務(wù)器上運(yùn)行性能。
在對(duì)Redis 源碼編譯安裝前,需要設(shè)置好其安裝或編譯所需的基礎(chǔ)環(huán)境,設(shè)置時(shí)主要涉及到:gcc、gcc-c++、pcre-devel、zlib zlib-devel、openssl openssldevel、tcl8.6.1。
綜合前文論述中,gcc、gcc-c++、pcre-devel、zlib zlib-devel、openssl openssl-devel 可通過yum 指令進(jìn)行在線直接安裝,安裝命令示例為: yum install openssl openssl-devel。
準(zhǔn)備待編譯安裝的Redis 源碼包:redis-5.0.3.tar、tcl8.6.1-src.tar 可在官網(wǎng)下載源碼包或者git 資源庫(kù)中下載源碼,tcl8.6.1 為Redis 安裝資源依賴,部分操作系統(tǒng)中已預(yù)安裝、不需要重復(fù)安裝,未安裝的則要進(jìn)行編譯安裝。
(1)解壓redis-5.0.3.tar.gz。 此處用到的指令為:
#tar -zxvf redis-5.0.3.tar.gz
(2)進(jìn)入scr 目錄并編譯。 此處用到的指令為:# cd redis-5.0.3/src
(3)執(zhí)行編譯。 此處用到的指令為:
# make
編譯過程中可能出現(xiàn)報(bào)錯(cuò),報(bào)錯(cuò)時(shí)具體如圖1所示。

圖1 編譯報(bào)錯(cuò)Fig. 1 Compilation error
(4)重新編譯。 此處用到的指令為:
# make MALLOC =libc
(5)編譯通過后執(zhí)行測(cè)試。 此處用到的指令為:
# make test
編譯測(cè)試如出現(xiàn)圖2 顯示的報(bào)錯(cuò),就要對(duì)tcl8.6.1-src.tar.gz 進(jìn)行解壓、及編譯安裝,此后再重新執(zhí)行對(duì)Redis 的編譯安裝。

圖2 缺tcl 報(bào)錯(cuò)Fig. 2 Missing tcl error
(6)編譯安裝。 此處用到的指令為:
# make install PREFIX=/usr/local/redis
編譯測(cè)試通過后即可執(zhí)行編譯安裝,本文指定安裝路徑為:/usr/local/redis,編譯安裝后安裝文件將位于該目錄之下。
(1)配置文件。 從解壓的源碼安裝包中找到配置文件reds.conf,拷貝該文件至redis 的安裝路徑的bin 目錄下:# cp redis.conf/usr/local/redis/bin/。
(2)配置。 安裝完成后進(jìn)行配置,主要配置包含有連接端口、是否后臺(tái)運(yùn)行、數(shù)據(jù)存放地址、log 日志存放位置以及接入密碼等。
其中,端口一般采用默認(rèn)端口,后臺(tái)啟動(dòng)需要將daemonize no 改為daemonize yes;數(shù)據(jù)存放地址默認(rèn)存放在安裝目錄bin 文件夾下,通過修改配置文件中dir 后面的路徑來修改存放地址,本文存放地址修改為:/home/data/redis-data 目錄下;log 日志配置需要在logfile 配置路徑和log 寫入的文件,本文配置為:/usr/local/redis/logs/redis-server.log;系統(tǒng)默認(rèn)設(shè)置是不需要密碼登錄,如需要啟用接入密碼則是把配置文件中# requirepass foobared 的注釋去掉(即去掉#)[3],然后設(shè)置自己的密碼。
配置文件修改完成后即可啟動(dòng)Redis 服務(wù),服務(wù)開啟后在后臺(tái)運(yùn)行,運(yùn)行過程中日志可在配置文件中配置的地址下查看對(duì)應(yīng)的運(yùn)行日志。
完成編譯適配后,通過統(tǒng)計(jì)寫入和刪除不同大小數(shù)據(jù)包所耗時(shí)間,對(duì)Redis 數(shù)據(jù)緩存服務(wù)在申威架構(gòu)處理器上應(yīng)用的性能進(jìn)行驗(yàn)證分析[4]。 對(duì)此擬展開闡釋分述如下。
(1)存儲(chǔ)性能。 存儲(chǔ)性能驗(yàn)證:編寫Java 測(cè)試程序,調(diào)用Redis 服務(wù),將數(shù)據(jù)寫入。 程序運(yùn)行在多核x86 系統(tǒng)中,測(cè)試程序?qū)⑼瑫r(shí)開啟100 個(gè)線程,每個(gè)線程單獨(dú)寫入10 000 條數(shù)據(jù)。
采集所有線程的運(yùn)行時(shí)間,對(duì)所得結(jié)果進(jìn)行平均,即可得到每個(gè)線程寫入數(shù)據(jù)的耗時(shí),耗時(shí)結(jié)果見表1,耗時(shí)曲線如圖3 所示。

表1 10 000 條數(shù)據(jù)寫入平均耗時(shí)表Tab. 1 Table of average time for writing 10 000 pieces of data

圖3 10 000 條數(shù)據(jù)寫入平均耗時(shí)曲線圖Fig. 3 Average time-consuming curve of writing 10 000 pieces of data
(2)刪除性能。 刪除性能驗(yàn)證時(shí),同樣采用Java 程序進(jìn)行調(diào)用Redis 服務(wù)數(shù)據(jù)的刪除,程序也是運(yùn)行于x86 操作系統(tǒng)中,同時(shí)開啟100 個(gè)線程,每個(gè)線程刪除10 000 條數(shù)據(jù),采集到所有線程所耗時(shí)間,并得到平均數(shù)據(jù)。
至此,研究得到的每個(gè)線程刪除數(shù)據(jù)平時(shí)耗時(shí)結(jié)果見表2,耗時(shí)曲線如圖4 所示。

表2 10 000 條數(shù)據(jù)刪除平均耗時(shí)表Tab. 2 Table of average time for deleting 10 000 pieces of data

圖4 10 000 條數(shù)據(jù)刪除平均耗時(shí)曲線圖Fig. 4 Average time-consuming curve of deleting 10 000 pieces of data
本節(jié)點(diǎn)對(duì)Redis 數(shù)據(jù)緩存服務(wù)在申威架構(gòu)(SW3231)處理器進(jìn)行數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)刪除性能的驗(yàn)證,數(shù)據(jù)在大于512 字節(jié)時(shí),不論寫入、還是刪除,在數(shù)據(jù)處理中的用時(shí)出現(xiàn)明顯增加,但總體上已能滿足民用市場(chǎng)業(yè)務(wù)需求。
由上述驗(yàn)證可見,申威架構(gòu)處理器已經(jīng)在民用服務(wù)生態(tài)有了較大的跨越,性能使用基本上已然滿足了現(xiàn)有民用市場(chǎng)的基本需求,完全可以實(shí)現(xiàn)申威架構(gòu)處理器作為Redis 數(shù)據(jù)緩存業(yè)務(wù)服務(wù)器來提供業(yè)務(wù)服務(wù)。
綜上所述,Redis 在目前的申威架構(gòu)處理器下已經(jīng)可以實(shí)現(xiàn)編譯適配,并且可作為獨(dú)立數(shù)據(jù)緩存服務(wù)器來提供業(yè)務(wù)服務(wù);而在本次研究中,還對(duì)Redis數(shù)據(jù)緩存服務(wù)在申威架構(gòu)處理器運(yùn)行過程中的性能做了驗(yàn)證,驗(yàn)證結(jié)果表明申威架構(gòu)處理器對(duì)Redis數(shù)據(jù)緩存服務(wù)的支撐完全滿足當(dāng)前大部分網(wǎng)絡(luò)業(yè)務(wù)需求;自主可控的申威架構(gòu)處理器在數(shù)據(jù)緩存功能上已經(jīng)能夠達(dá)到市場(chǎng)民用業(yè)務(wù)需求[5],雖然其運(yùn)行耗時(shí)在較大量級(jí)數(shù)據(jù)的存儲(chǔ)和刪除過程中出現(xiàn)了明顯增大,但Redis 服務(wù)作為數(shù)據(jù)緩存技術(shù),在業(yè)務(wù)需求中通常都以小數(shù)據(jù)為主。 同時(shí),申威架構(gòu)處理也在不斷地進(jìn)行升級(jí)完善,完全國(guó)產(chǎn)化的申威處理器已經(jīng)能夠滿足民用業(yè)務(wù)上的需求。