本文來自: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
}
