本文來自:CSDN博客
感謝作者:wkyb608
查看原文:Redigo--Go連接Redis
本文主要介紹go Web開發中操作redis。
Redigo是go連接Redis的擴展包,用此包時需先執行:
go get github.com/garyburd/redigo/redis
安裝完后,在文件中導入redigo即可。
連接redis
連接redis的樣例如下:
import ( "fmt" // 導入redigo擴展包 "github.com/garyburd/redigo/redis" ) // 從配置文件獲取redis配置並連接 host := beego.AppConfig.String("redis_host") db, _ := beego.AppConfig.Int("redis_db") // tcp連接redis rs, err := redis.Dial("tcp", host) // 操作完后自動關閉 defer rs.Close() // 若連接出錯,則打印錯誤信息,返回 if err != nil { fmt.Println(err) fmt.Println("redis connect error") return } // 選擇db rs.Do("SELECT", db)
寫入數據
往redis里存取數據的樣例如下:
key := "aaa" value := "bbb" // 操作redis時調用Do方法,第一個參數傳入操作名稱(字符串),然后根據不同操作傳入key、value、數字等 // 返回2個參數,第一個為操作標識,成功則為1,失敗則為0;第二個為錯誤信息 n, err := rs.Do("SETNX", key, value) // 若操作失敗則返回 if err != nil { fmt.Println(err) return } // 返回的n的類型是int64的,所以得將1或0轉換成為int64類型的再比較 if n == int64(1) { // 設置過期時間為24小時 n, _ := rs.Do("EXPIRE", key, 24*3600) if n == int64(1) { fmt.Println("success") } } else if n == int64(0) { fmt.Println("the key has already existed") }
讀數據
從redis里取數據的樣例如下:
key := "aaa" // 調用Do后,還得調用相應的方法才能取得數據 // 由於之前存的value是string類型,所以用redis.String將數據轉換成string類型 value, err := redis.String(rs.Do("GET", key)) if err != nil { fmt.Println("fail") } fmt.Println(value)
此時若不出錯便會輸出我們前面存的value:“bbb”
數據轉換
若value的類型為int,則用redis.Int轉換
若value的類型為string,則用redis.String轉換
若value的類型為json,則用redis.Byte轉換
redis里存取json數據的樣例如下:
import "encoding/json" import "fmt" // 存json數據 key := "aaa" imap := map[string]string{"key1": "111", "key2": "222"} // 將map轉換成json數據 value, _ := json.Marshal(imap) // 存入redis n, err := rs.Do("SETNX", key, value) if err != nil { fmt.Println(err) } if n == int64(1) { fmt.Println("success") } // 取json數據 // 先聲明imap用來裝數據 var imap map[string]string key := "aaa" // json數據在go中是[]byte類型,所以此處用redis.Bytes轉換 value, err := redis.Bytes(rs.Do("GET", key)) if err != nil { fmt.Println(err) } // 將json解析成map類型 errShal := json.Unmarshal(value, &imap) if errShal != nil { fmt.Println(err) } fmt.Println(imap["key1"]) fmt.Println(imap["key2"])
此時若不出錯便會輸出我們前面存的“111” “222”
看了上面的例子,應該對操作redis有所了解了吧。
Redis設置密碼,如何登陸
進入Dial函數,設置dialOptions字段,password為密碼。
func Dial(network, address string, options ...DialOption) (Conn, error) { do := dialOptions{ dialer: &net.Dialer{ KeepAlive: time.Minute * 5, }, password:"密碼", } }
dialOptions結構體全部字段:
type dialOptions struct { readTimeout time.Duration writeTimeout time.Duration dialer *net.Dialer dial func(network, addr string) (net.Conn, error) db int password string useTLS bool skipVerify bool tlsConfig *tls.Config }