1. 程式人生 > >golang 操作redis 實戰(重操作)

golang 操作redis 實戰(重操作)

1.5通過go語言和redis資料庫進行互動 安裝命令

go get github.com/gomodule/redigo/redis

安裝完成後,回到家目錄建立test.go,把下面程式碼複製到test.go裡面,編譯執行test.go,之後在redis中查詢到鍵c1值為hello,說明安裝成功

package main
import ( "github.com/gomodule/redigo/redis")
func main(){
        conn,_ := redis.Dial("tcp", ":6379")
        defer conn.Close()
        conn.Do("set", "c1", "hello")
}

1.5.1操作方法 Go操作redis文件https://godoc.org/github.com/gomodule/redigo/redis 連線資料庫

Dial(network, address string)(conn,err)

執行資料庫操作命令

Send(commandName string, args ...interface{}) error

Flush() error
Receive() (reply interface{}, err error)

Send函式發出指令,flush將連線的輸出緩衝區重新整理到伺服器,Receive接收伺服器返回的資料 例如:

c.Send("SET", "foo", "bar")

c.Send("GET", "foo")

c.Flush()//把緩衝區命令發到伺服器 c.Receive() // 接收set請求返回的資料 v, err = c.Receive() // 接收get請求傳輸的資料 另外一種執行資料庫操作命令

Do(commandName string, args ...interface{}) (reply interface{}, err error)

reply helper functions(回覆助手函式) Bool,Int,Bytes,map,String,StringsValues函式將回復轉換為特定型別的值。為了方便地包含對連線Do和Receive方法的呼叫,這些函式採用了型別為error的第二個引數。如果錯誤是非nil,則輔助函式返回錯誤。如果錯誤為nil,則該函式將回復轉換為指定的型別:

exists, err := redis.Bool(c.Do("EXISTS", "foo"))

if err != nil {

//處理錯誤程式碼

}

reflect.TypeOf(exists)//列印exists型別 Scan函式

func Scan(src [] interface {},dest ... interface {})([] interface {},error)

Scan函式從src複製到dest指向的值。 Dest引數的值必須是整數,浮點數,布林值,字串,[]byte,interface{}或這些型別的切片。Scan使用標準的strconv包將批量字串轉換為數字和布林型別。 示例程式碼

var value1 int
var value2 string
reply, err := redis.Values(c.Do("MGET", "key1", "key2"))
if err != nil {
//處理錯誤程式碼
}



if _, err := redis.Scan(reply, &value1, &value2); err != nil {
// 處理錯誤程式碼
}

1.5.2與案例結合 序列化與反序列化 序列化(位元組化) var buffer bytes.Buffer//容器 enc :=gob.NewEncoder(&buffer)//編碼器 err:=enc.Encode(dest)//編碼 反序列化(反位元組化) dec := gob.NewDecoder(bytes.NewReader(buffer byte[]))//解碼器 dec.Decode(&src)//解碼