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)
}