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

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

如何從redis Do()結果中提取數據

如何從redis Do()結果中提取數據

Go
慕標琳琳 2023-07-31 14:54:45
鑒于我有:"github.com/go-redis/redis"包,并且我使用它的方法來觸發自定義 Redis cmd:https://godoc.org/github.com/go-redis/redis#Client.Do我最終得到:result, err := client.Do("MEMORY", "STATS").Result()result看起來如下:<interface {}> data:<[]interface {}> (length: 52, cap: 52)  [0]:<interface {}>   data:"peak.allocated"  [1]:<interface {}>   data:4957760  [2]:<interface {}>    data:"total.allocated"  [3]:<interface {}>    data:855632  [4]:<interface {}>  //... and so on基本上,它是一個帶有數據屬性的接口,在數據中我們有更多的接口(偶數是鍵,奇數是值)。我想輸入它,這樣我就可以獲得 的值"total.allocated"。正確的做法是什么?
查看完整描述

2 回答

?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

這是特定于MEMORY STATSredis 命令的。其結果是一個數組,“有關內存使用情況的信息以指標及其各自的值的形式提供”。

由于沒有“預定義”類型來對此進行建模,因此只需使用類型斷言來獲取 Go 中的切片,對其進行迭代,然后查找您感興趣的鍵:"total.allocated"。后續切片元素將是您要查找的值。

您可以這樣做:

result, err := client.Do("MEMORY", "STATS").Result()

if err != nil {

? ? // Handle error

? ? return

}

if stats, ok := result.([]interface{}); ok {

? ? for i := 0; i < len(stats); i += 2 {

? ? ? ? if stats[i] == "total.allocated" && i+1 < len(stats) {

? ? ? ? ? ? fmt.Println("total allocated memory:", stats[i+1])

? ? ? ? }

? ? }

}

len-1如果我們循環直到(而不是),我們可以簡化循環len,因此我們不必檢查i+1索引是否有效:


for i, max := 0, len(stats)-1; i < max; i += 2 {

? ? if stats[i] == "total.allocated" {

? ? ? ? fmt.Println("total allocated memory:", stats[i+1])

? ? }

}

總分配內存的值是類型的值int64。如果您需要它作為數字,請使用另一個類型斷言:


allocated := stats[i+1].(int64)

或者為了安全起見:


if allocated, ok := stats[i+1].(int64); ok {

? ? // Use allocated

}


查看完整回答
反對 回復 2023-07-31
?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

在偽 Golang 中,它看起來像這樣:

result,?err?:=?redis.StringMap(client.Do("MEMORY",?"STATS"),?err)


查看完整回答
反對 回復 2023-07-31
  • 2 回答
  • 0 關注
  • 184 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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