BeegoでのRedisへの接続
13140 ワード
Beego公式ドキュメントにはRedisに接続する説明がありますが、短いです.ここでは、Redisに接続されているコードを干して、皆さんと共有します.
ここでピットkeyの値はredisにキャッシュされたhashmapのテーブル名であり、keyの値を設定しない場合、デフォルトはbeecacheRedisである.
Beego公式にはRedisアクセス方法の説明がありますが、ここでは一言も述べません.
しかし、この方法はデータをhashmapに存在させ、文字列ではないので、使うときは必ずはっきり考えなければなりません.
文字列を使いたいなら、Redigoを使ってもいいです.
go操作redisのいくつかのピット
BeegoはRedisを使用して文字列を格納し、Getはinterface{}タイプを返します.このような変換をしなければなりません.
redis内set[]byteタイプ、get時にunmarshalで逆シーケンス化してstructまたは[]byteをstringに変換
package utils
import (
"encoding/json"
"github.com/astaxie/beego"
_ "github.com/astaxie/beego/cache/redis"
"github.com/astaxie/beego/cache"
"github.com/astaxie/beego/logs"
"github.com/astaxie/beego/orm"
)
var Cache cache.Cache
func init() {
collectionName := beego.AppConfig.String("cache.collectionName")
conn := beego.AppConfig.String("cache.conn")
dbNum := beego.AppConfig.String("cache.dbNum")
//password := beego.AppConfig.String("cache.password")
//
config := orm.Params{
"key": collectionName,
"conn": conn,
"dbNum": dbNum,
//"password": password,
}
configStr, err := json.Marshal(config)
logs.Debug(string(configStr))
if err != nil {
logs.Error("redis ")
return
}
Cache,err = cache.NewCache("redis",string(configStr))
if err != nil {
logs.Error("redis ")
return
}
logs.Info("******************************************************************************")
logs.Info("********************************redis **********************************")
logs.Info("******************************************************************************")
}
ここでピットkeyの値はredisにキャッシュされたhashmapのテーブル名であり、keyの値を設定しない場合、デフォルトはbeecacheRedisである.
Beego公式にはRedisアクセス方法の説明がありますが、ここでは一言も述べません.
しかし、この方法はデータをhashmapに存在させ、文字列ではないので、使うときは必ずはっきり考えなければなりません.
文字列を使いたいなら、Redigoを使ってもいいです.
// tcp redis
rs, err := redis.Dial("tcp", host)
//
defer rs.Close()
// redis Do , ( ), key、value、
// 2 , , 1, 0;
value, err := redis.String(rs.Do("GET", key))
if err != nil {
fmt.Println("fail")
}
value int, redis.Int
value string, redis.String
value json, redis.Byte
// 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")
}
go操作redisのいくつかのピット
BeegoはRedisを使用して文字列を格納し、Getはinterface{}タイプを返します.このような変換をしなければなりません.
redis内set[]byteタイプ、get時にunmarshalで逆シーケンス化してstructまたは[]byteをstringに変換
bm, error := cache.NewCache("redis", `{"conn":"127.0.0.1:6379","key":"collectionName","dbNum":"0","password":""}`)
if error != nil {
fmt.Println("redis error:", error)
}
bm.Put("test", "hello", time.Second*100)
v := bm.Get("test")
fmt.Println("value:", string(v.([]byte)))