Redis能夠緩存數據,這使得操做數據能夠達到一個較快的速度,在一些須要數據較快存儲的場合,例如微博,redis發揮着不可替代的做用。在redis的官網,golang驅動有幾個,突然來了興致,那個纔是redis最佳的Go語言驅動?git
這些驅動都處於開發的前期,尚未發行正式版,有些已經好久沒更新了。從更新日期來看,Gary Burd的radigo和gosexy的redis最近有更新,並且從他們的README文件來看,他們對redis的支持還不錯。頗有可能,他們二者會有1個勝出。但到底誰纔是最佳的,這個如今仍是不能判斷。在gosexy的redis源碼庫中的有個_benchmarks文件,裏面就是一些對各個redis的Go驅動的一些簡單的性能測試。簡單看了一下,裏面的代碼就是調用他們各自包中的函數來達到測試的功能。你們不妨看一下。這裏就經過這個測試,來簡單判斷一下誰是最佳。github
首先,安裝各個Go的驅動:golang
go get github.com/alphazero/Go-Redis go get github.com/simonz05/godis go get github.com/garyburd/redigo go get github.com/gosexy/redis go get cgl.tideland.biz/redis
注意:tcgl原先託管在google,不過如今它如今本身組建源碼庫了,gosexy的redis的_benchmarks的tcgl_redis_test.go就import了google的版本,不過如今要修改了。也就是註釋掉code.google.com/p/tcgl/redis,添加 cgl.tideland.biz/redis,這樣咱們才能進行下一步動做。redis
在一個終端打開redis:小程序
redis-server
咱們要進入_benchmarks這個文件夾,裏面的README.md有進行性能測試的步驟,這裏要進行的性能測試的操做有Ping, Set, Get, Incr, LPush, LRange10, LRange100, 其中LRange10和 LRange100都是調用LRange操做,不過他們的數量不一樣而已。如下是我在這些文件夾裏面進行的操做。緩存
新開一個終端:ide
go test -test.bench='.*' > redis-go-driver-benchmark.txt ./grep_data.sh
grep_data是我寫的一個腳本:函數
#!/bin/sh for i in AlphazeroRedis GaryburdRedigo GosexyRedis Simonz05Godis TcglRedis do grep $i redis-go-driver-benchmark.txt | awk '{print $3}' > $i done
這個腳本的做用就是將AlphazeroRedis、GaryburdRedigo、GosexyRedis、Simonz05Godis、TcglRedis等的測試數據從redis-go-driver-benchmark.txt提取出來,也就是他們各自操做的數據,而後寫入以他們名字命名的文件裏面。咱們能夠打開AlphazeroRedis看一下,性能
39001 43967 43459 43350 44249 58078 139603
這些數據依次對應Ping, Set, Get, Incr, LPush, LRange10, LRange100的每次操做所須要的納秒時間。我寫了一個R的小程序來把這些數據顯示到一個圖上面,對R不是很熟悉,但願瞭解R的大牛指正。下面上代碼:測試
png(filename="redis的最佳go語言驅動--使用格通測試的數據.png",width=1400, height=900) Sys.setlocale(, "zh_CN.UTF-8") oldpar <- par(lwd=4) AlphazeroRedis <- read.table("AlphazeroRedis") GaryburdRedigo <- read.table("GaryburdRedigo") GosexyRedis <- read.table("GosexyRedis") Simonz05Godis <- read.table("Simonz05Godis") TcglRedis <- read.table("TcglRedis") plot(AlphazeroRedis$V1, type="o", ylim = c(0, 360000), col = "black", axes=FALSE, ann=FALSE) text(2, AlphazeroRedis$V1[2], cex=2, pos=3, col="black", "AlphazeroRedis") axis(1, at=1:8, lab=c("Ping","Set","Get","Incr", "LPush", "LRange10", "LRange100", "")) axis(2, las=0, at=40000*0: 360000) box() title(xlab="操做", col = "black") title(ylab="每一個操做多少納秒", col = "black") title(main = "5個Redis的Go語言驅動操做比較--使用格通測試的數據") lines(GaryburdRedigo, col = "red") text(6, GaryburdRedigo$V1[6]-10000, cex=2, pos=1, col="red", "GaryburdRedigo") lines(GosexyRedis, col = "blue") text(2, GosexyRedis$V1[2], pos=1,col="blue", cex=2, "GosexyRedis") lines(Simonz05Godis, col = "yellow") text(4, Simonz05Godis$V1[4]+7000,pos=3, col="yellow",cex=2, "Simonz05Godis") lines(TcglRedis, col = "gray") text(3, TcglRedis$V1[3],pos=1,cex=2, col="gray", "TcglRedis") par(oldpar) dev.off()
保存爲go-redis-getongs-data.R,用R來調用這個文件:
$R >source("go-redis-getongs-data.R")
在目錄下面會生成一個叫」redis的最佳go語言驅動--使用格通測試的數據.png「的文件,我特地把圖給放大,以便可以清楚看到線條的走向,圖有點大,可能在這裏顯示不正確:
在_benchmarks的README.md有gosexy測試的數據,我修改了上面的go-redis-getongs-data.R文件,把gosexy測試的數據整理到圖上去:
2副圖能夠看出,tcgl無疑是5箇中耗時最多的。在我測試的數據中,GosexyRedis幾乎贏得了全部的測試(除了LRange100輸給了GaryburdRedigo),GaryburdRedigo基本上是排老二。而使用gosexy的數據,除了tcgl,其餘4個的數據相差不大,而GaryburdRedigo仍是贏得了LRange100測試,說明在數量比較大的list方面,GaryburdRedigo是十分有優點的。
從上面的數據能夠知道,set, get, incr,lpush的操做耗時都在40微秒左右,那就是1s裏面可以操做25000次左右。我本身算了一下,嚇了一跳, 好像比其餘使用案例高了一個數量級(有錯但願指正了)。
上面的測試只涉及部分的redis操做,在總體對redis的支持方面,仍是須要繼續添加其餘功能測試。畢竟如今Go纔開始發展,還須要繼續添磚加瓦。各位看完後也能夠本身動手測試一下。
轉貼請註明來自:格通