golang redis hash教程 --- 2022-04-03

golang redis hash類型數(shù)據(jù)操作。

如果你希望key/value的值也能作為hash結(jié)構(gòu)進(jìn)行操作,可以選擇redis hash類型。

使用場景舉例:
如果我們希望緩存一條用戶信息(包括用戶id、用戶名、email字段),希望能夠做到局部讀寫用戶信息(例如:讀寫用戶名),也能夠讀取整條用戶信息,那么hash類型就支持這些操作。

redis hash操作主要有2-3個(gè)元素組成:

key - redis key 唯一標(biāo)識
field - hash數(shù)據(jù)的字段名
value - 值,有些操作不需要值
go redis hash數(shù)據(jù)常用函數(shù):

HSet - 根據(jù)key和field字段設(shè)置,field字段的值
HGet - 根據(jù)key和field字段,查詢field字段的值
HGetAll - 根據(jù)key查詢所有字段和值
HIncrBy - 根據(jù)key和field字段,累加數(shù)值。
HKeys - 根據(jù)key返回所有字段名
HLen - 根據(jù)key,查詢hash的字段數(shù)量
HMGet - 根據(jù)key和多個(gè)字段名,批量查詢多個(gè)hash字段值
HMSet - 根據(jù)key和多個(gè)字段名和字段值,批量設(shè)置hash字段值
HSetNX - 如果field字段不存在,則設(shè)置hash字段值
HDel - 根據(jù)key和字段名,刪除hash字段,支持批量刪除hash字段
HExists - 檢測hash字段名是否存在。
提示:不管我們選擇redis什么類型的數(shù)據(jù),操作的時(shí)候都必須要有一個(gè)唯一的Key, 用來唯一標(biāo)識一個(gè)數(shù)據(jù)。

1.HSet
根據(jù)key和field字段設(shè)置,field字段的值

// user_1 是hash key,username 是字段名, tizi365是字段值
err := client.HSet("user_1", "username", "tizi365").Err()
if err != nil {
    panic(err)
}

2.HGet
根據(jù)key和field字段,查詢field字段的值

// user_1 是hash key,username是字段名
username, err := client.HGet("user_1", "username").Result()
if err != nil {
    panic(err)
}
fmt.Println(username)

3.HGetAll
根據(jù)key查詢所有字段和值

// 一次性返回key=user_1的所有hash字段和值
data, err := client.HGetAll("user_1").Result()
if err != nil {
    panic(err)
}

// data是一個(gè)map類型,這里使用使用循環(huán)迭代輸出
for field, val := range data {
    fmt.Println(field,val)
}

4.HIncrBy
根據(jù)key和field字段,累加字段的數(shù)值

// 累加count字段的值,一次性累加2, user_1為hash key
count, err := client.HIncrBy("user_1", "count", 2).Result()
if err != nil {
    panic(err)
}

fmt.Println(count)

5.HKeys
根據(jù)key返回所有字段名

// keys是一個(gè)string數(shù)組
keys, err := client.HKeys("user_1").Result()
if err != nil {
    panic(err)
}

fmt.Println(keys)

6.HLen
根據(jù)key,查詢hash的字段數(shù)量

size, err := client.HLen("key").Result()
if err != nil {
    panic(err)
}

fmt.Println(size)

7.HMGet
根據(jù)key和多個(gè)字段名,批量查詢多個(gè)hash字段值

// HMGet支持多個(gè)field字段名,意思是一次返回多個(gè)字段值
vals, err := client.HMGet("key","field1", "field2").Result()
if err != nil {
    panic(err)
}

// vals是一個(gè)數(shù)組
fmt.Println(vals)

8.HMSet
根據(jù)key和多個(gè)字段名和字段值,批量設(shè)置hash字段值

// 初始化hash數(shù)據(jù)的多個(gè)字段值
data := make(map[string]interface{})
data["id"] = 1
data["username"] = "tizi"

// 一次性保存多個(gè)hash字段值
err := client.HMSet("key", data).Err()
if err != nil {
    panic(err)
}

9.HSetNX
如果field字段不存在,則設(shè)置hash字段值

err := client.HSetNX("key", "id", 100).Err()
if err != nil {
    panic(err)
}

10.HDel
根據(jù)key和字段名,刪除hash字段,支持批量刪除hash字段

// 刪除一個(gè)字段id
client.HDel("key", "id")

// 刪除多個(gè)字段
client.HDel("key", "id", "username")

11.HExists
檢測hash字段名是否存在。

// 檢測id字段是否存在
err := client.HExists("key", "id").Err()
if err != nil {
    panic(err)
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容