Redis基本数据类型Hash详解

4.6 Hash(哈希)数据类型详解

4.6.1 简介

首先想一下,我们Java中的Hash,形式为

那么在我们的redis中存放了这个hash

即为: key— 形式

数据类型中的hash所有的命令,都是以h开头


4.6.2 新增获取及批量新增获取与获取全部

hset key field value 新增hash

hget key field 获取hash

hmset key field vlaue field value … 批量新增hash

hget key field field … 批量获取hash

hgetall key 获取全部一个key下的全部hash

##新增hash
127.0.0.1:6379> hset hash h1 v1 
(integer) 1

##获取hash
127.0.0.1:6379> hget hash h1
"v1"


##批量新增hash
127.0.0.1:6379> hmset hash1 h1 v1 h2 v2
OK

##批量获取hash
127.0.0.1:6379> hmget hash1 h1 h2 
1) "v1"
2) "v2"


##批量新增hash,field相同的情况下,更新该数据
127.0.0.1:6379> hmset hash h1 v11 h2 v2
OK

##批量获取hash 这里的h1已经被更新
127.0.0.1:6379> hmget hash h1 h2 
1) "v11"
2) "v2"


##获取该Key下的全部hash
127.0.0.1:6379> hgetall hash
1) "h1"
2) "v11"
3) "h2"
4) "v2"

##获取该Key下的全部hash
127.0.0.1:6379> hgetall hash1
1) "h1"
2) "v1"
3) "h2"
4) "v2"
127.0.0.1:6379> 

4.6.3 删除hash指定key字段

hdel key field

##批量获取
127.0.0.1:6379> hmget hash h1 h2 
1) "v11"
2) "v2"

##删除hash指定的field 
127.0.0.1:6379> hdel hash h1
(integer) 1

##批量获取
127.0.0.1:6379> hmget hash h1 h2 
1) (nil)
2) "v2"
127.0.0.1:6379> 

4.6.4 获取key中的hash键值对数量

hlen key

##获取全部的keys
127.0.0.1:6379> keys *
(empty array)

##批量新增hash
127.0.0.1:6379> hmset hash h1 v1 h2 v2 h3 v3 
OK

##获取某个Key下的所有键值对
127.0.0.1:6379> hgetall hash
1) "h1"
2) "v1"
3) "h2"
4) "v2"
5) "h3"
6) "v3"

##查询key下的键值对数量
127.0.0.1:6379> hlen hash
(integer) 3
127.0.0.1:6379> 


4.6.5 判断hash中指定的字段是否存在

hexists key field

##获取全部的keys
127.0.0.1:6379> keys *
(empty array)
##批量新增hash
127.0.0.1:6379> hmset hash h1 v1 h2 v2 h3 v3 
OK

##获取某个Key下的所有键值对
127.0.0.1:6379> hgetall hash
1) "h1"
2) "v1"
3) "h2"
4) "v2"
5) "h3"
6) "v3"

##查询key下的键值对数量
127.0.0.1:6379> hlen hash
(integer) 3


##判断hash下的某个字段是否存在
127.0.0.1:6379> hexists hash h1
(integer) 1
##判断hash下的某个字段是否存在
127.0.0.1:6379> hexists hash h2
(integer) 1
##判断hash下的某个字段是否存在
127.0.0.1:6379> hexists hash h4
(integer) 0
127.0.0.1:6379> 

4.6.6 获取hash的field字段或Value值

hkeys key

hvals key

##查询所有的key
127.0.0.1:6379> keys *
1) "hash"

127.0.0.1:6379> hgetall hash
1) "h1"
2) "v1"
3) "h2"
4) "v2"
5) "h3"
6) "v3"

127.0.0.1:6379> hkeys hash
1) "h1"
2) "h2"
3) "h3"

127.0.0.1:6379> hvals hash
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> 


4.6.7 指定hash自增或自减

  • hincrby

    hincrby key field increment

##批量新增hash 
127.0.0.1:6379> hmset hash h1 v1 h2 1
OK

##查询hash的value
127.0.0.1:6379> hvals hash
1) "v1"
2) "1"

##查询所有键值对
127.0.0.1:6379> hgetall hash
1) "h1"
2) "v1"
3) "h2"
4) "1"

##设置自增,步长为1
127.0.0.1:6379> hincrby hash h2 1
(integer) 2

##获取全部键值对
127.0.0.1:6379> hgetall hash
1) "h1"
2) "v1"
3) "h2"
4) "2"

##设置自增,步长为2
127.0.0.1:6379> hincrby hash h2 2
(integer) 4

##获取全部键值对
127.0.0.1:6379> hgetall hash
1) "h1"
2) "v1"
3) "h2"
4) "4"

##设置自增,步长为-2 实际就是
##hdecrby 
127.0.0.1:6379> hincrby hash h2 -2
(integer) 2

##获取全部键值对
127.0.0.1:6379> hgetall hash
1) "h1"
2) "v1"
3) "h2"
4) "2"
127.0.0.1:6379> 


4.6.8 hsetnx方法,类似于String中的setnx

hsetnx key field value

##查询所有的key
127.0.0.1:6379> keys *
1) "hash"

##获取hash的所有键值对
127.0.0.1:6379> hgetall hash
1) "h1"
2) "v1"
3) "h2"
4) "2"

##获取hash的所有keys
127.0.0.1:6379> hkeys hash
1) "h1"
2) "h2"

##新增一个键值对,
##如果key存在则新增失败
127.0.0.1:6379> hsetnx hash h2 1
(integer) 0

##新增一个键值对,
##如果key不存在,则新增成功
127.0.0.1:6379> hsetnx hash h3 1
(integer) 1

##查询hash的所有keys
127.0.0.1:6379> hkeys hash
1) "h1"
2) "h2"
3) "h3"

##查询hash的所有values
127.0.0.1:6379> hvals hash
1) "v1"
2) "2"
3) "1"
127.0.0.1:6379> 

4.6.9 Hash的应用

可以存放我们的编程数据,比如用户信息user,尤其是用户信息的保存或者经常变动的信息

我们可以把user当作一个Key,然后hash里面设置相应的值,name age gender

##批量插入用户属性
127.0.0.1:6379> hmset user:1 user1:name zhangsan user1:age 10 user1:gender man 
OK

##批量获取用户属性
127.0.0.1:6379> hmget user:1  user1:name user1:age user1:gender
1) "zhangsan"
2) "10"
3) "man"

##批量获取key下的对应的hash的keys 
127.0.0.1:6379> hkeys user:1
1) "user1:name"
2) "user1:age"
3) "user1:gender"
127.0.0.1:6379> 


hash更适合存储对象,string更适合存储字符串

你可能感兴趣的:(Redis从入门到放弃,redis,java,数据库,nosql)