亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

Go
眼眸繁星 2022-08-24 16:42:52
我正在使用這個函數來按狀態獲取訂單,這個函數的問題在于,過濾發生在我從redis獲得所有訂單之后,是否有一種方法可以像Postgres(例如where語句)那樣按值redis端進行過濾,或者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貢獻1780條經驗 獲得超1個贊

我會使用 https://github.com/tidwall/gjson 來查詢編組的故事


查看完整回答
反對 回復 2022-08-24
?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

由于在單個鍵上存儲序列化的 JSON 數組,因此最接近的是運行 Lua 腳本,該腳本使用該腳本解析存儲在鍵上的 JSON,根據值篩選條目,然后重新序列化結果并將其保存在相同鍵或不同鍵上。這將更快,因為它將完全在Redis服務器上執行,但也更難調試/更容易出錯。EVALstatus


您可以使用 來解析 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)


查看完整回答
反對 回復 2022-08-24
  • 2 回答
  • 0 關注
  • 214 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號