当前位置: 首页 > 工具软件 > k-Redis > 使用案例 >

go-redis使用之Hash字典

微生良策
2023-12-01

go-redis Hash操作

–> go-redis List列表使用详解 
–> go-redis String字符串使用详解 
–>go-redis Set集合使用详解 
–>go-redis ZSet使用详解 

在Redis中,hash哈希被称为字典(dictionary),Redis的字典使用哈希表作为底层实现

hash更适合用来存储对象,例如:user,name:张三,age:18 等。。。

func GetRedisClient()*redis.Client{
	return redis.NewClient(&redis.Options{
		Addr:               "localhost:6379",
		Password:           "",
		DB:                 0,
	})
}

// redisHash Hash散列表操作
func redisHashTest(cli *redis.Client){
	// 单个key-value值:HSet/HGet
	cli.HSet("user","name","新垣结衣")
	name1,err:=cli.HGet("user","name").Result()
	if err != nil {
		panic(err)
	}
	fmt.Printf("name1:%v\n",name1)	// 新垣结衣

	// 多个key-value值:HMSet、HMGet
	m:=make(map[string]interface{})
	m["age"]=18
	m["address"]="Japan"
	str,err:=cli.HMSet("user",m).Result()
	if err != nil {
		panic(err)
	}
	fmt.Println(str)	// ok
	s1,err:=cli.HMGet("user","name","age","address").Result()
	if err != nil {
		panic(err)
	}
	for _, v := range s1 {
		fmt.Println(v)	// 新垣结衣 18 Japan
	}

	// 获取hash中的全部数据
	m1,err:=cli.HGetAll("user").Result()
	if err != nil {
		panic(err)
	}
	for k, v := range m1 {
		fmt.Printf("key:%v value:%v\n",k,v)
		//key:name value:新垣结衣
		//key:age value:18
		//key:address value:Japan
	}

	// 获取所有key
	s2,err:=cli.HKeys("user").Result()
	if err != nil {
		panic(err)
	}
	for _, s := range s2 {
		fmt.Println(s)	// [name age	address]
	}

	// 获取所有value
	s3,err:=cli.HVals("user").Result()
	if err != nil {
		panic(err)
	}
	fmt.Println(s3)		// [新垣结衣 18 Japan]

	// 删除hash中指定的key,对应的value也就没了(可以同时删除多个)
	cli.HDel("user","address","age")
	fmt.Println(cli.HGetAll("user").Val())	// map[name:新垣结衣]

	//获取Hash的内容长度
	n:=cli.HLen("user").Val()
	fmt.Printf("长度为:%d\n",n)	// 长度为:1

	//判断hash中是否存在指定的key
	b1:=cli.HExists("user","name").Val()		//true
	b2:=cli.HExists("user","hobby").Val()	//flase
	fmt.Println(b1,b2)

	// HSetNX:保存一个key-value,如果存在field,则失败,不存在新建并存储
	fmt.Println(cli.HGetAll("user").Val())
	b3,err:=cli.HSetNX("user","name","石原里美").Result()
	if err != nil {
		panic(err)
	}
	fmt.Println(b3)	// false 保存失败
	b4,err:=cli.HSetNX("user","city","北京").Result()
	if err != nil {
		panic(err)
	}
	fmt.Println(b4)	// true 保存成功
	fmt.Println(cli.HGetAll("user").Val())	// map[city:北京 name:新垣结衣]

}

func main(){
	rdb:=GetRedisClient()
	defer rdb.Close()
	pong:=rdb.Ping().Val()
	fmt.Printf("数据连接状态:%v\n",pong)	// 数据连接状态:PONG

	// redisStringTest(rdb)

	// redisListTest(rdb)

	redisHashTest(rdb)
}

 类似资料: