go-redis写入和读取结构体

package main

import (
	"context"
	"encoding"
	"encoding/json"
	"fmt"
	"log"

	"github.com/go-redis/redis/v8"
)

var _ encoding.BinaryMarshaler = &Student{}
var _ encoding.BinaryUnmarshaler = &Student{}

type StudentStatus string

const (
	StudentStatusCreated = StudentStatus("created")
	StudentStatusDeleted = StudentStatus("deleted")
)

type Student struct {
	Name   string        `json:"name"`
	Status StudentStatus `json:"status"`
}

func (s *Student) MarshalBinary() (data []byte, err error) {
	return json.Marshal(s)
}

func (s *Student) UnmarshalBinary(data []byte) error {
	return json.Unmarshal(data, s)
}

func main() {
	rdb := redis.NewClient(&redis.Options{
		Addr:     "172.18.0.2:6379",
		Password: "redis",
	})

	var err error
	ctx := context.Background()

	if err = rdb.Set(ctx, "a", &Student{
		Name:   "n",
		Status: StudentStatusCreated,
	}, 0).Err(); err != nil {
		log.Fatal(err)
	}

	s := &Student{}
	if err = rdb.Get(ctx, "a").Scan(s); err != nil {
		log.Fatal(err)
	} else {
		fmt.Printf("%+v", s)
	}
}

 

posted on 2024-09-15 16:19  王景迁  阅读(86)  评论(0)    收藏  举报

导航