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

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

在 Redis 中按值進(jìn)行篩選(使用 go 和 redis-go)

在 Redis 中按值進(jìn)行篩選(使用 go 和 redis-go)

Go
眼眸繁星 2022-08-24 16:42:52
我正在使用這個(gè)函數(shù)來(lái)按狀態(tài)獲取訂單,這個(gè)函數(shù)的問(wèn)題在于,過(guò)濾發(fā)生在我從redis獲得所有訂單之后,是否有一種方法可以像Postgres(例如where語(yǔ)句)那樣按值redis端進(jìn)行過(guò)濾,或者redis不支持嗎?func (r *queryResolver) OrdersByStatus(ctx context.Context, status string) ([]*models.Order, error) {    defer utils.Elapsed("redis query => orders")()    myCtx := ctx.Value(constants.KMyContext).(types.MyCtx)    sessionData, sessionErr := session.GetSessionData(myCtx.ResponseWriter, myCtx.Request, constants.KCurrentUser)    if sessionErr != nil {        return nil, sessionErr    }    marshalledStories, err := cache.RedisClient.Get(ctx, constants.KOrders+sessionData.UUID).Result()    if err != nil {        log.Println("redis get err", err)        return nil, errors.New(constants.InternalServerError)    }    var orders []*models.Order    unmarshallErr := json.Unmarshal([]byte(marshalledStories), &orders)    if unmarshallErr != nil {        log.Println("redis unmarshallErr", unmarshallErr)        return nil, errors.New(constants.InternalServerError)    }    var filtered []*models.Order    for _, u := range orders {        if u.Status == status {            filtered = append(filtered, u)        }    }    return filtered, nil}
查看完整描述

2 回答

?
慕神8447489

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

我會(huì)使用 https://github.com/tidwall/gjson 來(lái)查詢編組的故事


查看完整回答
反對(duì) 回復(fù) 2022-08-24
?
楊__羊羊

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

由于在單個(gè)鍵上存儲(chǔ)序列化的 JSON 數(shù)組,因此最接近的是運(yùn)行 Lua 腳本,該腳本使用該腳本解析存儲(chǔ)在鍵上的 JSON,根據(jù)值篩選條目,然后重新序列化結(jié)果并將其保存在相同鍵或不同鍵上。這將更快,因?yàn)樗鼘⑼耆赗edis服務(wù)器上執(zhí)行,但也更難調(diào)試/更容易出錯(cuò)。EVALstatus


您可以使用 來(lái)解析 JSON 并重新序列化它。cjson.decodecjson.encode


像這樣:


local myKey = KEYS[1]

local status = ARGV[1]


local raw = redis.call("GET", myKey)

local orders = cjson.decode(raw)

local filteredOrders = {}

local index = 1


for order, _ in ipairs(orders) do

  if order["status"] == status then

    filteredOrders[index] = order

    index = index + 1

  end

end


local resultRaw = cjson.encode(filteredOrders)

redis.call("SET", myKey, resultRaw)


查看完整回答
反對(duì) 回復(fù) 2022-08-24
  • 2 回答
  • 0 關(guān)注
  • 209 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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