sql >> Database teknologi >  >> NoSQL >> Redis

Redigo ScanStruct fejl med time.Time

Da Redis ikke har noget begreb om tidsværdier, ville det ikke give nogen mening for en generisk driver som f.eks. Redigo at udføre en eller anden automatisk konvertering mellem den indbyggede time.Time type og et vilkårligt byte-array. Som sådan er det op til programmøren at beslutte, hvordan denne konvertering skal udføres.

For eksempel hvis du har en "Person"-type defineret som sådan, inklusive en created_at tidsstempel formateret som RFC3339 (en form for ISO 8601), kan du definere en brugerdefineret "Timestamp"-type med en "RedisScan"-metode som følger:

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. Meteor mongo opdaterer indlejret array

  2. Indstil redis nøgle/værdi med camel-redis

  3. Indeks på ts felt i oplog.rs er ikke opdateret

  4. Sådan aktiveres logning for Mongoose og MongoDB Node.JS-driveren