图 3-19 储存文章数据的散列


    举个例子,对于图 3-19 所示的 article::10086 散列来说,我们可以使用 HKEYS 命令去获取它包含的所有字段:

    1. redis> HKEYS article::10086
    2. 1) "title"
    3. 2) "content"
    4. 3) "author"
    5. 4) "created_at"

    也可以使用 HVALS 命令去获取它包含的所有值:

    1. redis> HVALS article::10086
    2. 1) "greeting"
    3. 2) "hello world"
    4. 3) "peter"
    5. 4) "1442744762.631885"

    HGETALL 命令返回的结果列表当中,每两个连续的元素就代表了散列中的一对字段和值,其中单数位置上的元素为字段,而复数位置上的元素则为字段的值。

    另一方面,如果用户给定的散列并不存在,那么 、 HVALSHGETALL 都将返回一个空列表:

    1. redis> HKEYS not-exists-hash
    2. (empty list or set)
    3.  
    4. (empty list or set)
    5.  
    6. redis> HGETALL not-exists-hash
    7. (empty list or set)

    Redis 散列包含的字段在底层是以无序方式储存的,根据字段插入的顺序不同,包含相同字段的散列在执行 HKEYS 命令、 HVALS 命令和 HGETALL 命令时可能会得到不同的结果,因此用户在使用这三个命令的时候,不应该对它们返回的元素的排列顺序做任何假设。如果有需要的话,用户可以对这些命令返回的元素进行排序,使得它们从无序变为有序。

    1. redis> HMSET hash1 field1 value1 field2 value2 field3 value3
    2. OK
    3.  
    4. redis> HMSET hash2 field3 value3 field2 value2 field1 value1
    5. OK

    那么 命令将以不同的顺序返回这两个散列的字段:

    HVALS 命令则会以不同的顺序返回这两个散列的字段值:

    1. redis> HVALS hash1
    2. 1) "value1"
    3. 2) "value2"
    4. 3) "value3"
    5.  
    6. redis> HVALS hash2
    7. 2) "value2"
    8. 3) "value1"

    至于 HGETALL 命令则会以不同的顺序返回这两个散列的字段和值:

    1. redis> HGETALL hash1
    2. 1) "field1"
    3. 2) "value1"
    4. 3) "field2"
    5. 4) "value2"
    6. 5) "field3"
    7. 6) "value3"
    8.  
    9. redis> HGETALL hash2
    10. 1) "field3"
    11. 2) "value3"
    12. 3) "field2"
    13. 4) "value2"
    14. 6) "value1"

    其他信息