hash

  1. Hash类型,也叫散列,其value是一个无序字典,类似于go中的map结构。
  2. String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便。
KEY Value
re:user:1001 {name:“JK”, age: 18}
re:user:1002 {name:“Re”, age: 14}
  1. Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD。

HDEL

  1. 从hash中删除一个或多个字段及其值。如果没有字段保留,则删除hash。

  2. 语法:

HDEL key field [field ...]
  1. 示例:
redis> HSET myhash field1 "foo"
(integer) 1
redis> HDEL myhash field1
(integer) 1
redis> HDEL myhash field2
(integer) 0

HEXISTS

  1. 确定一个字段是否存在于hash中。

  2. 语法:

HEXISTS key field
  1. 示例:
redis> HSET myhash field1 "foo"
(integer) 1
redis> HEXISTS myhash field1
(integer) 1
redis> HEXISTS myhash field2
(integer) 0

HGET

  1. 返回hash中某个字段的值。

  2. 语法:

HGET key field
  1. 示例:
redis> HSET myhash field1 "foo"
(integer) 1
redis> HGET myhash field1
"foo"
redis> HGET myhash field2
(nil)

HGETALL

  1. 返回hash中的所有字段和值。

  2. 语法:

HGETALL key
  1. 语法:
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

  1. 将hash中字段的整数值增加一个数字。如果字段不存在,则使用0作为初始值。

  2. 语法:

HINCRBY key field increment
  1. 示例:
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

  1. 将字段的浮点值增加一个数字。如果字段不存在,则使用0作为初始值。

  2. 语法:

HINCRBYFLOAT key field increment
  1. 示例:
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

  1. 以hash形式返回所有字段。

  2. 语法:

HKEYS key
  1. 示例:
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HKEYS myhash
1) "field1"
2) "field2"

HLEN

  1. 返回hash中的字段数。

  2. 语法:

HLEN key
  1. 示例:
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HLEN myhash
(integer) 2

HMGET

  1. 返回hash中所有字段的值。

  2. 语法:

HMGET key field [field ...]
  1. 示例:
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

  1. 设置多个字段的值。

  2. 语法:

HMSET key field value [field value ...]
  1. 示例:
redis> HMSET myhash field1 "Hello" field2 "World"
"OK"
redis> HGET myhash field1
"Hello"
redis> HGET myhash field2
"World"

HRANDFIELD

  1. 从hash中返回一个或多个随机字段。

  2. 语法:

HRANDFIELD key [count [WITHVALUES]]
  1. 示例:
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

  1. 遍历hash的字段和值。

  2. 语法:

HSCAN key cursor [MATCH pattern] [COUNT count]

HSET

  1. 创建或修改hash中某个字段的值。

  2. 语法:

HSET key field value [field value ...]
  1. 示例:
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

  1. 仅当字段不存在时,才在hash中设置字段的值。

  2. 语法:

HSETNX key field value
  1. 示例:
redis> HSETNX myhash field "Hello"
(integer) 1
redis> HSETNX myhash field "World"
(integer) 0
redis> HGET myhash field
"Hello"

HSTRLEN

  1. 返回字段值的长度。

  2. 语法:

HSTRLEN key field
  1. 示例:
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

  1. 返回hash中的所有值。

  2. 语法:

HVALS key
  1. 示例:
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HVALS myhash
1) "Hello"
2) "World"