redis hash
- 官网命令地址:https://redis.io/commands/?group=hash
- redis客户端查询命令:help @hash
hash
- Hash类型,也叫散列,其value是一个无序字典,类似于go中的map结构。
- String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便。
KEY | Value |
---|---|
re:user:1001 | {name:“JK”, age: 18} |
re:user:1002 | {name:“Re”, age: 14} |
- Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD。
HDEL
-
从hash中删除一个或多个字段及其值。如果没有字段保留,则删除hash。
-
语法:
HDEL key field [field ...]
- 示例:
redis> HSET myhash field1 "foo"
(integer) 1
redis> HDEL myhash field1
(integer) 1
redis> HDEL myhash field2
(integer) 0
HEXISTS
-
确定一个字段是否存在于hash中。
-
语法:
HEXISTS key field
- 示例:
redis> HSET myhash field1 "foo"
(integer) 1
redis> HEXISTS myhash field1
(integer) 1
redis> HEXISTS myhash field2
(integer) 0
HGET
-
返回hash中某个字段的值。
-
语法:
HGET key field
- 示例:
redis> HSET myhash field1 "foo"
(integer) 1
redis> HGET myhash field1
"foo"
redis> HGET myhash field2
(nil)
HGETALL
-
返回hash中的所有字段和值。
-
语法:
HGETALL key
- 语法:
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HGETALL myhash
1) "field1"
2) "Hello"
3) "field2"
4) "World"
HINCRBY
-
将hash中字段的整数值增加一个数字。如果字段不存在,则使用0作为初始值。
-
语法:
HINCRBY key field increment
- 示例:
redis> HSET myhash field 5
(integer) 1
redis> HINCRBY myhash field 1
(integer) 6
redis> HINCRBY myhash field -1
(integer) 5
redis> HINCRBY myhash field -10
(integer) -5
HINCRBYFLOAT
-
将字段的浮点值增加一个数字。如果字段不存在,则使用0作为初始值。
-
语法:
HINCRBYFLOAT key field increment
- 示例:
redis> HSET mykey field 10.50
(integer) 1
redis> HINCRBYFLOAT mykey field 0.1
"10.6"
redis> HINCRBYFLOAT mykey field -5
"5.6"
redis> HSET mykey field 5.0e3
(integer) 0
redis> HINCRBYFLOAT mykey field 2.0e2
"5200"
HKEYS
-
以hash形式返回所有字段。
-
语法:
HKEYS key
- 示例:
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HKEYS myhash
1) "field1"
2) "field2"
HLEN
-
返回hash中的字段数。
-
语法:
HLEN key
- 示例:
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HLEN myhash
(integer) 2
HMGET
-
返回hash中所有字段的值。
-
语法:
HMGET key field [field ...]
- 示例:
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HMGET myhash field1 field2 nofield
1) "Hello"
2) "World"
3) (nil)
HMSET
-
设置多个字段的值。
-
语法:
HMSET key field value [field value ...]
- 示例:
redis> HMSET myhash field1 "Hello" field2 "World"
"OK"
redis> HGET myhash field1
"Hello"
redis> HGET myhash field2
"World"
HRANDFIELD
-
从hash中返回一个或多个随机字段。
-
语法:
HRANDFIELD key [count [WITHVALUES]]
- 示例:
redis> HSET coin heads obverse tails reverse edge null
(integer) 3
redis> HRANDFIELD coin
"heads"
redis> HRANDFIELD coin
"heads"
redis> HRANDFIELD coin -5 WITHVALUES
1) "tails"
2) "reverse"
3) "edge"
4) "null"
5) "heads"
6) "obverse"
7) "heads"
8) "obverse"
9) "tails"
10) "reverse"
HSCAN
-
遍历hash的字段和值。
-
语法:
HSCAN key cursor [MATCH pattern] [COUNT count]
HSET
-
创建或修改hash中某个字段的值。
-
语法:
HSET key field value [field value ...]
- 示例:
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HGET myhash field1
"Hello"
redis> HSET myhash field2 "Hi" field3 "World"
(integer) 2
redis> HGET myhash field2
"Hi"
redis> HGET myhash field3
"World"
redis> HGETALL myhash
1) "field1"
2) "Hello"
3) "field2"
4) "Hi"
5) "field3"
6) "World"
HSETNX
-
仅当字段不存在时,才在hash中设置字段的值。
-
语法:
HSETNX key field value
- 示例:
redis> HSETNX myhash field "Hello"
(integer) 1
redis> HSETNX myhash field "World"
(integer) 0
redis> HGET myhash field
"Hello"
HSTRLEN
-
返回字段值的长度。
-
语法:
HSTRLEN key field
- 示例:
redis> HSET myhash f1 HelloWorld f2 99 f3 -256
(integer) 3
redis> HSTRLEN myhash f1
(integer) 10
redis> HSTRLEN myhash f2
(integer) 2
redis> HSTRLEN myhash f3
(integer) 4
HVALS
-
返回hash中的所有值。
-
语法:
HVALS key
- 示例:
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HVALS myhash
1) "Hello"
2) "World"