第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在高朗到雷迪戈(Redis)的HSET時(shí)間?

如何在高朗到雷迪戈(Redis)的HSET時(shí)間?

喵喵時(shí)光機(jī) 2022-09-12 16:19:56
我正在使用 redigo 在 redigo 中存儲(chǔ)和檢索數(shù)據(jù)。我有一個(gè)結(jié)構(gòu),其中包含一個(gè)類型定義。我想在 Redis 中使用來存儲(chǔ)結(jié)構(gòu)。我有一個(gè)類型定義,可以通過向我的類型添加一個(gè)函數(shù)來使用。DataHSETScanStructRedisScanTimestamp問題在于 Redis 將 存儲(chǔ)在時(shí)間字段之后。您無法從這些字段創(chuàng)建新的 Time 對(duì)象,因此這相當(dāng)無用。序列化 redigo 結(jié)構(gòu)的正確方法是什么?Timestampext, wall, loctype Timestamp time.Timefunc (t *Timestamp) RedisScan(x interface{}) error {    ...}type Data struct {    Timestamp  Timestamp `redis:"timestamp"`}func (r *RedisRepo) Write(data Data, key String) error {    conn := r.pool.Get()    defer conn.Close()    conn.Send("HSET", redis.Args{key}.AddFlat(data)...)     }func (r *RedisRepo) Read(key string) (*Data, error) {    var data Data    conn := r.pool.Get()    defer conn.Close()    v, err := redis.Values(conn.Do("HGETALL", key))    return redis.ScanStruct(v, &data)}
查看完整描述

1 回答

?
翻閱古今

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個(gè)贊

函數(shù)和方法缺少使該對(duì)可用作通用封送/取消封送函數(shù)的功能。redis.ScanStructArgs.AddFlat


解決問題的方法取決于您的目標(biāo)是什么。如果您的目標(biāo)是加載和保存結(jié)構(gòu),而不是訪問 Redis 哈希,請(qǐng)參閱將通用結(jié)構(gòu)保存到 Redis。


如果您的目標(biāo)是訪問具有已定義名稱和值的 Redis 哈希,請(qǐng)編寫在這些定義和 Go 值之間進(jìn)行轉(zhuǎn)換的代碼。下面是一個(gè)哈希的示例,該哈希被定義為具有字段“時(shí)間戳”,其值為十進(jìn)制編碼的Unix秒:


type Data struct {

    Timestamp time.Time

}


func (r *RedisRepo) Write(data Data, key string) error {

    conn := r.pool.Get()

    defer conn.Close()

    _, err := conn.Do("HSET", key, "timestamp", data.Timestamp.Unix())

    return err

}


func (r *RedisRepo) Read(key string) (*Data, error) {

    conn := r.pool.Get()

    defer conn.Close()

    v, err := redis.Values(conn.Do("HGETALL", key))

    if err != nil {

        return nil, err

    }


    var fields struct {

        Timestamp int64 `redis:"timestamp"`

    }


    err = redis.ScanStruct(v, &fields)

    if err != nil {

        return nil, err

    }

    return &Data{Timestamp: time.Unix(fields.Timestamp, 0)}, nil

}

根據(jù)需要調(diào)整代碼以匹配 Redis 哈希字段定義。以下是 RFC 3339 格式的時(shí)間代碼:


type Data struct {

    Timestamp time.Time

}


func (r *RedisRepo) Write(data Data, key string) error {

    conn := r.pool.Get()

    defer conn.Close()

    _, err := conn.Do("HSET", key, "timestamp", data.Timestamp.Format(time.RFC3339))

    return err

}


func (r *RedisRepo) Read(key string) (*Data, error) {

    conn := r.pool.Get()

    defer conn.Close()

    v, err := redis.Values(conn.Do("HGETALL", key))

    if err != nil {

        return nil, err

    }


    var fields struct {

        Timestamp string `redis:"timestamp"`

    }


    err = redis.ScanStruct(v, &fields)

    if err != nil {

        return nil, err

    }

    t, err := time.Parse(time.RFC3339, fields.Timestamp)

    if err != nil {

        return nil, err

    }

    return &Data{Timestamp: t}, nil

}

編寫上面的示例是為了便于將示例擴(kuò)展到多個(gè)字段。如果應(yīng)用程序只需要訪問單個(gè)字段,請(qǐng)將變量和廢話替換為對(duì) 或的調(diào)用ReadfieldsScanStructredis.Int64(conn.Do("HGET", key, "timestamp")redis.String(conn.Do("HGET", key, "timestamp")


查看完整回答
反對(duì) 回復(fù) 2022-09-12
  • 1 回答
  • 0 關(guān)注
  • 73 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)