图 3-19 储存文章数据的散列
举个例子,对于图 3-19 所示的 article::10086
散列来说,我们可以使用 HKEYS
命令去获取它包含的所有字段:
- redis> HKEYS article::10086
- 1) "title"
- 2) "content"
- 3) "author"
- 4) "created_at"
也可以使用 HVALS
命令去获取它包含的所有值:
- redis> HVALS article::10086
- 1) "greeting"
- 2) "hello world"
- 3) "peter"
- 4) "1442744762.631885"
在 HGETALL
命令返回的结果列表当中,每两个连续的元素就代表了散列中的一对字段和值,其中单数位置上的元素为字段,而复数位置上的元素则为字段的值。
另一方面,如果用户给定的散列并不存在,那么 、 HVALS
和 HGETALL
都将返回一个空列表:
- redis> HKEYS not-exists-hash
- (empty list or set)
- (empty list or set)
- redis> HGETALL not-exists-hash
- (empty list or set)
Redis 散列包含的字段在底层是以无序方式储存的,根据字段插入的顺序不同,包含相同字段的散列在执行 HKEYS
命令、 HVALS
命令和 HGETALL
命令时可能会得到不同的结果,因此用户在使用这三个命令的时候,不应该对它们返回的元素的排列顺序做任何假设。如果有需要的话,用户可以对这些命令返回的元素进行排序,使得它们从无序变为有序。
- redis> HMSET hash1 field1 value1 field2 value2 field3 value3
- OK
- redis> HMSET hash2 field3 value3 field2 value2 field1 value1
- OK
那么 命令将以不同的顺序返回这两个散列的字段:
而 HVALS
命令则会以不同的顺序返回这两个散列的字段值:
- redis> HVALS hash1
- 1) "value1"
- 2) "value2"
- 3) "value3"
- redis> HVALS hash2
- 2) "value2"
- 3) "value1"
至于 HGETALL
命令则会以不同的顺序返回这两个散列的字段和值:
- redis> HGETALL hash1
- 1) "field1"
- 2) "value1"
- 3) "field2"
- 4) "value2"
- 5) "field3"
- 6) "value3"
- redis> HGETALL hash2
- 1) "field3"
- 2) "value3"
- 3) "field2"
- 4) "value2"
- 6) "value1"