本文主要介绍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 }