go-redis使用之Hash字典

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值