首先想一下,我们Java中的Hash,形式为
那么在我们的redis中存放了这个hash
即为: key—
数据类型中的hash所有的命令,都是以h开头
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>
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>
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>
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>
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>
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>
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>
可以存放我们的编程数据,比如用户信息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更适合存储字符串