sql >> データベース >  >> NoSQL >> Redis

時間の経過に伴うRedigoScanStructエラー

    Redisには時間値の概念がないため、redigoなどの汎用ドライバーがbuilin time.Time間で自動変換を実行することは意味がありません。 タイプと任意のバイト配列。そのため、その変換を実行する方法を決定するのはプログラマー次第です。

    たとえば、created_atを含む「Person」タイプがそのように定義されているとします。 RFC3339(ISO 8601の形式)としてフォーマットされたタイムスタンプでは、次のように「RedisScan」メソッドを使用してカスタムの「タイムスタンプ」タイプを定義できます。

    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. MySQLからMongoDBへ-管理に関するチートシート

    2. $ project:1つのステージで式の結果のプロパティにアクセスすることは可能ですか?

    3. SpringDataRESTアプリケーションがRedisキャッシングを実装した後にデータベースからデータを取得しない

    4. MongoDBでElasticsearchを使用するにはどうすればよいですか?