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
}