HSET:为字段设置值

用户可以通过执行 HSET 命令,为散列中的指定字段设置值:

  1. HSET hash field value

根据给定的字段是否已经存在于散列里面,HSET 命令的行为也会有所不同:

  • 如果给定字段并不存在于散列当中,那么这次设置就是一次创建操作,命令将在散列里面关联起给定的字段和值,然后返回 1

  • 如果给定的字段原本已经存在于散列里面,那么这次设置就是一次更新操作,命令将使用用户给定的新值去覆盖字段原有的旧值,然后返回 0

举个例子,通过执行以下 HSET 命令,我们可以创建出一个包含了四个字段的散列,这四个字段分别储存了文章的标题、内容、作者以及创建日期:

  1. redis> HSET article::10086 title "greeting"
  2. (integer) 1
  3.  
  4. redis> HSET article::10086 content "hello world"
  5. (integer) 1
  6.  
  7. redis> HSET article::10086 author "peter"
  8. (integer) 1
  9.  
  10. redis> HSET article::10086 created_at "1442744762.631885"
  11. (integer) 1

图 3-3 展示了以上这些 HSET 命令对散列 article::10086 进行设置的整个过程。


图 3-3 HSET 命令对 article::10086 进行设置的整个过程

HSET 命令执行之前的数据库, article::10086 散列并不存在_images/IMAGE_HSET_1.png执行 HSET article::10086 title "greeting" 命令之后_images/IMAGE_HSET_2.png执行 HSET article::10086 content "hello world" 命令之后_images/IMAGE_HSET_3.png执行 HSET article::10086 author "peter" 命令之后_images/IMAGE_HSET_4.png执行 HSET article::10086 created_at "1442744762.631885" 命令之后_images/IMAGE_HSET_5.png


注解

散列包含的字段就跟数据库包含的键一样,在实际中都是以无序方式进行排列的,不过本书为了展示方便,一般都会把新字段添加到散列的末尾,排在所有已有字段的后面。

使用新值覆盖旧值

正如之前所说,如果用户在调用 HSET 命令时,给定的字段已经存在于散列当中,那么 HSET 命令将使用用户给定的新值去覆盖字段已有的旧值,并返回 0 表示这是一次更新操作。

比如说,以下代码就展示了如何使用 HSET 命令去更新 article::10086 散列的 title 字段以及 content 字段:

  1. redis> HSET article::10086 title "Redis Tutorial"
  2. (integer) 0
  3.  
  4. redis> HSET article::10086 content "Redis is a data structure store, ..."
  5. (integer) 0

图 3-4 展示了被更新之后的 article::10086 散列。


图 3-4 被更新之后的 article::10086 散列_images/IMAGE_UPDATE_HSET.png


其他信息

属性
复杂度O(1)
版本要求HSET 命令从 Redis 2.0.0 版本开始可用。