golang 用msgpack高效序列化

package main

import (
	"fmt"
	"github.com/go-redis/redis"
	"reflect"
	"github.com/vmihailenco/msgpack"
)


// 声明一个全局的rdb变量
var rdb *redis.Client

// 初始化连接
func initClient() (err error) {
	rdb = redis.NewClient(&redis.Options{
		Addr:     "localhost:6379",
		Password: "", // no password set
		DB:       0,  // use default DB
	})

	_, err = rdb.Ping().Result()
	if err != nil {
		return err
	}
	return nil
}


type Test struct {
	name string
}
func main()  {
	var countryCapitalMap map[string]string /*创建集合 */
	countryCapitalMap = make(map[string]string)

	/* map插入key - value对,各个国家对应的首都 */
	countryCapitalMap["France"] = "巴黎"
	countryCapitalMap["Italy"] = "罗马"
	countryCapitalMap["Japan"] = "东京"
	countryCapitalMap["India "] = "新德里"
	fmt.Println("原数据-", countryCapitalMap)


	//in := map[string]interface{}{"foo": uint32(123456789), "hello": "world"}
	in := countryCapitalMap
	res, err := msgpack.Marshal(in)
	if err != nil {
		fmt.Printf("序列化失败")
	}
	//fmt.Sprintf("数据类型%T", b)
	fmt.Println(reflect.TypeOf(res))
	fmt.Println("序列化数据--", res)

	//连接redis
	initClient()
	//存入redis数据类型[]type可以存入
	bool := rdb.Set("val", res, 0).Err()
	if bool != nil {
		fmt.Printf("set val failed, err:%v\n", err)
		return
	}
	//返回类型可变
	val, err := rdb.Get("val").Bytes()
	if err != nil {
		fmt.Printf("get val failed, err:%v\n", err)
		return
	}
	fmt.Println("redis取出数据--", val)
	var out map[string]string
	bool = msgpack.Unmarshal(val, &out)
	if bool != nil {
		fmt.Println("反序列化失败")
	}
	fmt.Println("反序列化数据--", out)

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值