Redis 哈希(Hash)
- Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
- Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
- 类似于key map --> key key value
常用命令
hset key field value [filed value ...]
hget key filed
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> hset k1 f1 v1
(integer) 1
127.0.0.1:6379> hget k1 f1
"v1"
-
hmset key filed value [filed value ...]
同时将多个 field-value (域-值)对设置到哈希表 key 中。 -
hmget key filed [filed ...]
获取所有给定字段的值 -
hgetall key
获取在哈希表中指定 key 的所有字段和值 -
hdel key filed [filed ...]
删除一个或多个哈希表字段 -
hlen key
获取哈希表中字段的数量 -
hexists key filed
查看哈希表 key 中,指定的字段是否存在。 -
hkeys key
获取所有哈希表中的字段
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> hmset k1 f1 v1 k2 f2 v2 k3 f3 v3
OK
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> hmset k1 f1 v1 f2 v2 f3 v3
OK
127.0.0.1:6379> hmget k1 f1 f2 f3
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> hgetall k1
1) "f1"
2) "v1"
3) "f2"
4) "v2"
5) "f3"
6) "v3"
127.0.0.1:6379> hdel k1 f1
(integer) 1
127.0.0.1:6379> hgetall k1
1) "f2"
2) "v2"
3) "f3"
4) "v3"
127.0.0.1:6379> hlen k1
(integer) 2
127.0.0.1:6379> hexists k1 f2
(integer) 1
127.0.0.1:6379> hexists k1 f1
(integer) 0
127.0.0.1:6379> hkeys k1
1) "f2"
2) "f3"
-
hincrby key filed increment
为哈希表 key 中的指定字段的整数值加上增量 increment 。(没有hdecrby)
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> hset k1 f1 3
(integer) 1
127.0.0.1:6379> hincrby k1 f1 2
(integer) 5
127.0.0.1:6379> hincrby k1 f1 2
(integer) 7
127.0.0.1:6379> hincrby k1 f1 -4
(integer) 3
127.0.0.1:6379>
-
hsetnx key filed value
只有在字段 field 不存在时,设置哈希表字段的值。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> hsetnx k1 f1 v1
(integer) 1
127.0.0.1:6379> hget k1 f1
"v1"
127.0.0.1:6379> hsetnx k1 f1 v2
(integer) 0
127.0.0.1:6379> hget k1 f1
"v1"
127.0.0.1:6379>
结论
- 使用场景:保存用户信息
127.0.0.1:6379> hset user:1 name qk age 18
(integer) 2
127.0.0.1:6379> hget user:1 name
"qk"
127.0.0.1:6379> hget user:1 age
"18"
127.0.0.1:6379>