redishandler.go 2.87 KB
package redishandler

import (
	"HttpServer/conf"
	"common/logger"
	"common/redis"
	"encoding/json"
	"errors"
	"strconv"
)

const USER_TOKEN_KEY = "login_token"

var gRedis *redis.RedisClient = nil

func GetRedisClient() *redis.RedisClient {
	return gRedis
}

type TestInfo struct {
	Gold      int64  //金币
	Head      string //头像地址
	NickName  string //昵称
	Highestlv int    //当前最高猫等级
	Uuid      int    //uuid
}

type Mytest struct {
	Test1      int
	M_userInfo map[int]int
}

func TestMyredis() {
	//testmap
	var test Mytest
	test.Test1 = 1
	test.M_userInfo = make(map[int]int)
	test.M_userInfo[1] = 1
	test.M_userInfo[1] = 2
	test.M_userInfo[2] = 2
	ddt, _ := json.Marshal(&test)
	gRedis.SetString("testddt", string(ddt))
	logger.Info("testddt test=%v.ddt=%v", test, string(ddt))

	rest, err := gRedis.GetString("testddt")
	if err != nil {
		logger.Error("TestMyredis ddtfailed err=%v", err)
	} else {
		var restest Mytest
		err = json.Unmarshal([]byte(rest), &restest)
		logger.Info("testddt rest=%v,restest=%v", rest, restest)

	}
	//gRedis.HSet("luheng", "luhengsb", "22")
	//gRedis.HSet("luheng", "luhengbb", "33")

	var rinfo TestInfo
	rinfo.Gold = 100
	rinfo.Highestlv = 99
	rinfo.Head = "sb"
	rinfo.NickName = "sd"
	rinfo.Uuid = 1004
	rinfostr, _ := json.Marshal(&rinfo)
	err = gRedis.Zadd("luhengtest", float64(rinfo.Gold), string(rinfostr))
	if err != nil {
		logger.Info("TestMyredis failed err=%v", err)
	} else {
		logger.Info("TestMyredis success rinfostr=%v", string(rinfostr))
	}
	rinfo.Gold = 1000
	rinfo.Highestlv = 99
	rinfo.Head = "sb1"
	rinfo.NickName = "sd1"
	rinfo.Uuid = 1005
	rinfostr, _ = json.Marshal(&rinfo)
	err = gRedis.Zadd("luhengtest", float64(rinfo.Gold), string(rinfostr))
	rinfo.Gold = 10000
	rinfo.Highestlv = 99
	rinfo.Head = "sb2"
	rinfo.NickName = "sd2"
	rinfo.Uuid = 1006
	rinfostr, _ = json.Marshal(&rinfo)
	err = gRedis.Zadd("luhengtest", float64(rinfo.Gold), string(rinfostr))

	vv, err := gRedis.ZRevRangewithIndex("luhengtest", 0, -1)
	if err == nil {
		for k, v := range vv {
			rinfobyte, _ := v.([]byte)
			var rinfo TestInfo
			//logger.Info("TestMyredis ori=%v", string(v.([]byte)))
			err := json.Unmarshal(rinfobyte, &rinfo)
			if err == nil {
				logger.Info("TestMyredis k=%v,v=%v", k, rinfo)
			} else {
				logger.Info("TestMyredis isbigsb err=%v", err)
			}

		}
	} else {
		logger.Info("test is err=%v", err)
	}
}

func Init() error {
	redis_cfg := conf.GetRedisConf()
	if gRedis = redis.NewRedisClient(redis_cfg.Host, redis_cfg.Password, redis_cfg.Db); gRedis == nil {
		return errors.New("initRedis error")
	}

	logger.Info("init redis success!")
	//TestMyredis()
	return nil
}

/*
	加载token
*/
func LoadPlayerTokenFromRedis(uid int) (string, error) {
	token, err := gRedis.HGet(USER_TOKEN_KEY, strconv.Itoa(uid))
	if err != nil {
		logger.Notic("LoadPlayerTokenFromRedis failed uid:%v err%v", uid, err)
		return "", err
	}
	return token, err
}