这篇讲讲如何在beego框架使用redis。
golang中比较好用的第三方开源redisclient有:
第一种的使用见该篇文档 https://www.jianshu.com/p/80f83e42ee11
本文主要讲述第二种的使用。
1.接上两篇文章,切换到工作目录
cd /data/work/go
2.下载redis
go get -u github.com/astaxie/beego/cache/redis
3.安装完上述步骤之后,会在$GOPATH/src/github.com/gomodule下边有个redigo,如图
4.在使用的时候引入
import "github.com/gomodule/redigo/redis"
注意:
1.当使用beego不需要模版的时候,可以在配置文件中关闭,以避免不必要的报错,默认是加载模版的,vim app/config,加入如下行
autorender = false
2.当go get github.com/**比较慢的时候,可以查到该host对应的ip,然后配到/etc/hosts
先用ip查找工具查到github.com对应的ip
如图,然后在/etc/hosts加入如下代码
192.30.253.112 github.com
好了,那我们就写个程序来验证下beego和redis的使用吧。
package controllers import ( "github.com/astaxie/beego" "github.com/gomodule/redigo/redis" "fmt" "time" ) const PASSWORD string = "******" const OK string = "ok" const NO string = "no" type DictController struct { beego.Controller } func newPool(idc, prekey string) *redis.Pool { var redisConn map[string]string = map[string]string{ "beijing":"127.0.0.1:6379", "tianjin":"10.10.10.10:6379"} return &redis.Pool { MaxIdle:3, IdleTimeout: 240 * time.Second, Dial: func () (redis.Conn, error) { c, err := redis.Dial("tcp", redisConn[idc]) if err != nil { return nil, err } if _, err := c.Do("AUTH", PASSWORD); err != nil { c.Close() return nil, err } if _, err := c.Do("SELECT", 0); err != nil { c.Close() return nil, err } return c, nil }, } } func (c *DictController) GetDictData() string { userid,err := c.GetInt("userid") idc :=c.GetString("idc") prekey :=c.GetString("prekey") if err != nil { fmt.Printf("用户id[%d]参数出错", userid) return NO } var pool *redis.Pool = newPool(idc, prekey) conn := pool.Get() value, err := conn.Do("lrange", prekey, 0, -1) if err != nil { fmt.Printf("用户id[%d]从redis读取数据出错", userid) return NO } type ids []int data,_ := redis.Ints(value, err) for _,v := range data { if v==userid { fmt.Printf("用户id[%d]在黑名单中", userid) return OK } } fmt.Printf("用户id[%d]不在黑名单中", userid) return NO }
注意
data,_ := redis.Ints(value, err)这行很关键,当从redis读取的数据不能用单纯的go的类型转换去转换,一定要用redis自带的回复助手函数去转,否则转出来的是不正确的。
在开始的官方文档中有提到,叫reply helper