BeegoでのRedisへの接続

13140 ワード

Beego公式ドキュメントにはRedisに接続する説明がありますが、短いです.ここでは、Redisに接続されているコードを干して、皆さんと共有します.
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)))