golang:gob数据序列化存入redis

package main

import (
	"fmt"
	"bytes"
	"encoding/gob"
	"github.com/go-redis/redis"
	//"strings"
	"unsafe"
)

type serialize struct {
	network bytes.Buffer
	//任意数据类型
	val     interface{}
}

//序列化 注意修改原始数据类型
func (x *serialize) Xencode(val interface{}) {
	// 1.创建编码器
	enc := gob.NewEncoder(&x.network)
	// 2.向编码器中写入数据
	err := enc.Encode(val)
	if err != nil {
		fmt.Println("序列化失败")
	}
}

//反序列化
func (x *serialize) Xdecode(val []byte) {
	decoder := gob.NewDecoder(bytes.NewReader(val)) //创建解密器
	err2 := decoder.Decode(&x.val)                  //解密
	if err2 != nil {
		fmt.Println("反序列化失败")
	}
}

// 声明一个全局的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
}

//高效的数据转换
func strbyte(s string) []byte {
	x := (*[2]uintptr)(unsafe.Pointer(&s))
	h := [3]uintptr{x[0], x[1], x[1]}
	return *(*[]byte)(unsafe.Pointer(&h))
}
//高效的数据转换
func bytestr(b []byte) string {
	return *(*string)(unsafe.Pointer(&b))
}


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)

	var code serialize
	code.Xencode(countryCapitalMap)
	fmt.Println("序列化-", code.network.Bytes())
	//连接redis
	initClient()
	//存入redis数据类型[]type可以存入
	err := rdb.Set("val", code.network.Bytes(), 0).Err()
	if err != 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("val=>", val)
	code.Xdecode(val)
	//code.Xdecode(strbyte(val))
	fmt.Println("反序列化-", code.val)
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,关于 Redis 连接池在 Golang 中的使用,我可以给您提供一些相关的类库和示例代码。 首先,Golang 中比较常用的 Redis 客户端有以下几个: 1. go-redis/redis 2. go-redis/cache 3. redigo 这三个客户端都支持连接池的使用,下面分别介绍一下它们的连接池使用方法。 1. go-redis/redis go-redis/redisRedisGolang 客户端,它提供了一个叫做 "Options" 的结构体,可以用来设置 Redis 连接池的相关选项,例如最大连接数、闲置连接数等等。 示例代码: ```go import ( "github.com/go-redis/redis" ) func main() { options := &redis.Options{ Addr: "localhost:6379", Password: "", // no password set DB: 0, // use default DB PoolSize: 10, } client := redis.NewClient(options) } ``` 在上面的示例代码中,我们创建了一个 Redis 连接池,最大连接数为 10。 2. go-redis/cache go-redis/cache 是 go-redis/redis一个扩展库,它提供了一个基于 Redis 的缓实现。它同样支持 Redis 连接池的使用,可以通过设置 "Options" 结构体中的 "PoolSize" 字段来设置最大连接数。 示例代码: ```go import ( "github.com/go-redis/cache/v8" "github.com/go-redis/redis/v8" ) func main() { options := &redis.Options{ Addr: "localhost:6379", Password: "", // no password set DB: 0, // use default DB PoolSize: 10, } client := redis.NewClient(options) cache := cache.New(&cache.Options{ Redis: client, LocalCache: cache.NewTinyLFU(1000, time.Minute), TTL: time.Hour, }) } ``` 在上面的示例代码中,我们创建了一个 Redis 连接池,最大连接数为 10,并且使用 go-redis/cache 库创建了一个基于 Redis 的缓实现。 3. redigo redigo 是 RedisGolang 客户端,它同样支持 Redis 连接池的使用,可以通过设置 "Pool" 结构体中的 "MaxIdle" 和 "MaxActive" 字段来设置最大空闲连接数和最大活跃连接数。 示例代码: ```go import ( "github.com/gomodule/redigo/redis" ) func main() { pool := &redis.Pool{ Dial: func() (redis.Conn, error) { return redis.Dial("tcp", "localhost:6379") }, MaxIdle: 10, MaxActive: 100, } conn := pool.Get() } ``` 在上面的示例代码中,我们创建了一个 Redis 连接池,最大空闲连接数为 10,最大活跃连接数为 100。 以上就是三个常用的 Golang Redis 客户端的连接池使用方法,您可以根据实际需求选择适合自己的客户端和连接池设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值