Redigo--Go連接Redis


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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM