Redis五大数据类型——Hash(哈希)
Map集合,key-Map
HSET key field value [field value ...]
127.0.0.1:6379> HSET hash name liuhuan age 18 # HSET key field value field value
(integer) 2
127.0.0.1:6379> HGET hash name # HGET key field 只能取一个字段
"liuhuan"
127.0.0.1:6379> HGET hasn name # 如果没有key,则返回nil
(nil)
127.0.0.1:6379> HMGET hash name age # 可以取多个字段
1) "liuhuan"
2) "18"
127.0.0.1:6379> HGETALL hash # 获取key中的所有的field和value
1) "name"
2) "liuhuan"
3) "age"
4) "18"
127.0.0.1:6379> hset hash name huan age 16 # 如果有值则不会变更成功,返回0
(integer) 0
127.0.0.1:6379> hmset hash name huan age 16 # 如果有值,则更改,如果没有值则创建
OK
127.0.0.1:6379> HVALS hash
1) "16"
2) "huan"
3) "sh"
4) "male"
127.0.0.1:6379> HDEL hash name # 删除字段,删除成功返回1,否则返回0
(integer) 1
127.0.0.1:6379> HLEN hash # 获取键值对的数量,一对为1
(integer) 1
127.0.0.1:6379> hset hash name liuhuan city sh sex male # 返回插入键值对的数量
(integer) 3
127.0.0.1:6379> HEXISTS hash name # 判断hash中指定的字段是否存在,存在则返回1
(integer) 1
127.0.0.1:6379> HLEN hash # 返回插入键值对的数量
(integer) 4
127.0.0.1:6379> HKEYS hash # 获取hash中所有的field
1) "age"
2) "name"
3) "city"
4) "sex"
127.0.0.1:6379> HVALS hash # 获取hash中所有的value
1) "18"
2) "liuhuan"
3) "sh"
4) "male"
127.0.0.1:6379> HINCRBY hash age 1 # 给某个字段的值加上指定的数量,可以是负数
(integer) 19
127.0.0.1:6379> HINCRBY hash age -1 # 返回的是计算后得到的值
(integer) 18
127.0.0.1:6379> HINCRBY hash name 2 # 可以看到,只能给整数增加,不能给其他的数据类型增加
(error) ERR hash value is not an integer
总结:
- hash的应用场景:
- 用于指定数据的field的值的变更
- 经常变动的信息
- 更适合对象的存储
- string更适合字符串的存储
- hset与hmset的区别
- 两者都是没有值则创建
- 但是如果已经有字段存在,则hset返回0,不做任何变更,而hmset则会更改值