Redis重制(七)hash类型

19 阅读3分钟

这里我们来学习redis的第四个数据类型:hash

 

Redis中的hash我们可以将其想象成为一个map集合,也就是说redis-key存储的是一个map集合,map集合中有自己的key-value

 

Hash一般用来存储对象的字段和值,如存储用户信息、配置信息等。

 

Hash更适合对象的存储,String更适合字符串的存储

 

1:hset设置hash值

127.0.0.1:6379> hset hash1 name camellia age 29 height 179 weight 85
(integer) 4
127.0.0.1:6379> hget hash1 name
"camellia"
127.0.0.1:6379> hgetall hash1
1) "name"
2) "camellia"
3) "age"
4) "29"
5) "height"
6) "179"
7) "weight"
8) "85"

 

2:hmset 批量设置hash值

127.0.0.1:6379> hmset hash1 name camellia age 29 height 179 weight 85
(integer) 4
127.0.0.1:6379> hget hash1 name
"camellia"
127.0.0.1:6379> hgetall hash1
1) "name"
2) "camellia"
3) "age"
4) "29"
5) "height"
6) "179"
7) "weight"
8) "85"

 

3:hget 获取hash值

127.0.0.1:6379> hset hash1 name camellia age 29 height 179 weight 85
(integ
127.0.0.1:6379> hget hash1 name
"camellia"

 

4:hmget批量获取hash值

127.0.0.1:6379> hmget hash1 name age height
1"camellia"
2"29"
3"179"

 

5:hgetall批量获取某个hash的所有值

127.0.0.1:6379> hset hash1 name camellia age 29 height 179 weight 85
(integer) 4
127.0.0.1:6379> hget hash1 name
"camellia"
127.0.0.1:6379> hgetall hash1
1) "name"
2) "camellia"
3) "age"
4) "29"
5) "height"
6) "179"
7) "weight"
8) "85"

 

6:hel删除hash指定的key字段(不是删除hash,是删除hash存储的map中的key)

127.0.0.1:6379> hgetall hash1                  # 获取所有值
1) "name"
2) "camellia"
3) "age"
4) "29"
5) "height"
6) "179"
7) "weight"
8) "85"
127.0.0.1:6379> hdel hash1 weight           # 删除weight键
(integer) 1
127.0.0.1:6379> hgetall hash1                  # 获取所有值
1) "name"
2) "camellia"
3) "age"
4) "29"
5) "height"
6) "179"

 

7:hlen获取hash中有几个键值对(字段数量)

127.0.0.1:6379> hgetall hash1
1) "name"
2) "camellia"
3) "age"
4) "29"
5) "height"
6) "179"
127.0.0.1:6379> hlen hash1
(integer) 3

 

8:HEXISTS判断hash中的指定的key是否存在

127.0.0.1:6379> hexists hash1 name
(integer) 1

 

9:hkeys只获取hash中的所有key

127.0.0.1:6379> hkeys hash1
1) "name"
2) "age"
3) "height"

 

10:hvals只获取hash中的value

127.0.0.1:6379> hvals hash1
1) "camellia"
2) "29"
3) "179"

 

11:HINCRBY 在hash中得某个key对应的值增加指定数值

127.0.0.1:6379> hset hash1 num 0                   # 设置num值为0
(integer) 1
127.0.0.1:6379> hincrby hash1 num 10            # +10
(integer) 10
127.0.0.1:6379> hget hash1 num                    
"10"
127.0.0.1:6379> hincrby hash1 num -5            # -5
(integer) 5
127.0.0.1:6379> hget hash1 num
"5"

 

我记得之前是有Hdecrby这个命令的。但是今天测试的时候发现这个命令没了,那就使用hincrby加负数来实现减操作好了。

 

12:hsetnx 如果不存在则设置,如果存在则不设置

127.0.0.1:6379> hsetnx hash1 name gc
(integer) 0
127.0.0.1:6379> hget hash1 name
"camellia"
127.0.0.1:6379> hsetnx hash1 weight 85
(integer) 1
127.0.0.1:6379> hget hash1 weight
"85"

 

13:删除指定name的hash集合

127.0.0.1:6379> keys *
1) "name"
2) "dalian"
3) "list2"
4) "set2"
5) "hash1"
6) "webscoket-1"
7) "interset"
8) "list1"
9) "unionset"
127.0.0.1:6379> del hash1
(integer) 1
127.0.0.1:6379> keys *
1) "name"
2) "dalian"
3) "list2"
4) "set2"
5) "webscoket-1"
6) "interset"
7) "list1"
8) "unionset"

 

Hash本质上和string类型没有太大区别,还是一个简单的key-value

 

以上大概就是hash的基本使用。

 

有好的建议,请在下方输入你的评论。