Hash(哈希)

Hash概念

Hash(哈希)
本质都是key - value
但Hash的格式有点特别 key - map (filed-value)
Redis Hash 是一个String类型的filed 和 value 的映射表, hash 特别适合用于存储对象。类似java中的Map <String, object>
image

127.0.0.1:6379> hset hash name v1  # 增加一个具体的filed-vlaue
(integer) 1
127.0.0.1:6379> hget hash name  # 获取一个字段值
"v1"
127.0.0.1:6379> hmset hash name v2 name2 v3 # 在hash键中增加多个filed-value
OK
127.0.0.1:6379> hmget hash name name2 # 获取多个字段的值
1) "v2"
2) "v3"
127.0.0.1:6379> hgetall hash  # 获取hash所有字段值
1) "name"
2) "v2"
3) "name2"
4) "v3"
127.0.0.1:6379> hdel hash name name2 # 删除hash指定字段值
(integer) 2
127.0.0.1:6379> hgetall hash
(empty list or set)
127.0.0.1:6379> hset hash name v1
(integer) 1
127.0.0.1:6379> hmset hash name1 v1 name2 v2
OK
127.0.0.1:6379> hlen hash # 获取hash的字段个数(说长度有点不合理)
(integer) 3
127.0.0.1:6379> hgetall
(error) ERR wrong number of arguments for 'hgetall' command
127.0.0.1:6379> hgetall hash
1) "name"
2) "v1"
3) "name1"
4) "v1"
5) "name2"
6) "v2"
127.0.0.1:6379> HEXISTS hash name  # 判断hash指定字段是否存在
(integer) 1
127.0.0.1:6379> hkeys hash  # 获取hash所有字段
1) "name"
2) "name1"
3) "name2"
127.0.0.1:6379> hvals hash # 获取hash所有字段中的值
1) "v1"
2) "v1"
3) "v2"

127.0.0.1:6379> hset hash name3 1
(integer) 1
127.0.0.1:6379> HINCRBY hash name3 1  #指定增量
(integer) 2
127.0.0.1:6379> hget hash name3
"2" 
127.0.0.1:6379> hsetnx hash name4 hello # 如果该字段不存在,就添加
(integer) 1
127.0.0.1:6379> hsetnx hash name4 world # 如果存在,就设置失败
(integer) 0

hash变更的数据 user name age 尤其是用户信息之类的,经常变动的信息! hash更适合存储对象

127.0.0.1:6379> hset user:1 name luo
(integer) 1
127.0.0.1:6379> hget user:1 name
"luo"

hash的数据结构

Hash类型对应的数据结构是两种:ziplist(压缩列表),hashtable(哈希表)。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable

posted @ 2022-06-01 18:29  小罗要有出息  阅读(344)  评论(0)    收藏  举报