Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Redigo ScanStruct kesalahan dengan time.Time

Karena Redis tidak memiliki konsep nilai waktu, maka tidak masuk akal bagi driver generik seperti redigo untuk melakukan beberapa konversi otomatis antara time.Time bawaan. ketik dan array byte arbitrer. Karena itu, pemrogram harus memutuskan bagaimana melakukan konversi tersebut.

Misalnya, Andaikan Anda memiliki tipe "Orang" yang didefinisikan seperti itu, termasuk created_at stempel waktu yang diformat sebagai RFC3339 (bentuk ISO 8601), Anda dapat menentukan jenis "Stempel Waktu" khusus dengan metode "RedisScan" sebagai berikut:

type Timestamp time.Time

type Person struct {
  Id        int       `redis:"id"`
  Name      string    `redis:"name"`
  CreatedAt Timestamp `redis:"created_at"`
}

func (t *Timestamp) RedisScan(x interface{}) error {
  bs, ok := x.([]byte)
  if !ok {
    return fmt.Errorf("expected []byte, got %T", x)
  }
  tt, err := time.Parse(time.RFC3339, string(bs))
  if err != nil {
    return err
  }
  *t = Timestamp(tt)
  return nil
}

// ...

response, err := redis.Values(conn.Do("HGETALL", "person:1"))
if err != nil {
  panic(err)
}

var p Person
err = redis.ScanStruct(response, &p)
if err != nil {
  panic(err)
}
log.Printf("OK: p=%v", p)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara menggunakan Redis Hash

  2. phpMyAdmin setara dengan MySQL untuk Redis?

  3. .NET Core menyuntikkan layanan singleton di layanan singleton lain

  4. Redis database pada mesin dev dengan banyak proyek

  5. Cache Azure Redis - batas waktu pada panggilan GET