redis学习(4) | 青训营

52 阅读4分钟

3.4Hash 型 Value 操作命令

Redis 存储数据的 Value 可以是一个 Hash 类型。 Hash 类型也称为 Hash 表、字典等。 Hash 表就是一个映射表 Map,也是由键-值对构成,为了与整体的 key 进行区分,这里 的键称为 field,值称为 value。注意,Redis 的 Hash 表中的 field-value 对均为 String 类型。

3.4.1 hset

格式:HSET key field value  功能:将哈希表 key 中的域 field 的值设为 value 。 说明:如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作。如果域 field 已 经存在于哈希表中,旧值将被覆盖。如果 field 是哈希表中的一个新建域,并且值设置 成功,返回 1 。 如果哈希表中域 field 已经存在且旧值已被新值覆盖,返回 0 。

3.4.2 hget

格式:HGET key field  功能:返回哈希表 key 中给定域 field 的值。 说明:当给定域不存在或是给定 key 不存在时,返回 nil 。

3.4.3 hmset

格式:HMSET key field value [field value ...] 功能:同时将多个 field-value (域-值)对设置到哈希表 key 中。 说明:此命令会覆盖哈希表中已存在的域。如果 key 不存在,一个空哈希表被创建并 执行 HMSET 操作。如果命令执行成功,返回 OK 。当 key 不是哈希表(hash)类型时, 返回一个错误。

3.4.4 hmget

格式:HMGET key field [field ...] 功能:按照给出顺序返回哈希表 key 中一个或多个域的值。
说明:如果给定的域不存在于哈希表,那么返回一个 nil 值。因为不存在的 key 被当 作一个空哈希表来处理,所以对一个不存在的 key 进行 HMGET 操作将返回一个只带 有 nil 值的表。

3.4.5 hgetall

格式:HGETALL key 功能:返回哈希表 key 中所有的域和值。 说明:在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度 是哈希表大小的两倍。若 key 不存在,返回空列表。若 key 中包含大量元素,则该命 令可能会阻塞 Redis 服务。所以生产环境中一般不使用该命令,而使用 hscan 命令代替。

3.4.6 hsetnx

格式:HSETNX key field value 功能:将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在。 说明:若域 field 已经存在,该操作无效。如果 key 不存在,一个新哈希表被创建并 执行 HSETNX 命令。

3.4.7 hdel

格式:HDEL key field [field ...] 功能:删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。 说明:返回被成功移除的域的数量,不包括被忽略的域。

3.4.8 hexits

格式:HEXISTS key field 功能:查看哈希表 key 中给定域 field 是否存在。 说明:如果哈希表含有给定域,返回 1 。如果不含有给定域,或 key 不存在,返回 0

3.4.9 hincrby 与 hincrbyfloat

格式:HINCRBY key field increment
功能:为哈希表 key 中的域 field 的值加上增量 increment 。hincrby 命令只能增加整 数值,而 hincrbyfloat 可以增加小数值。
说明:增量也可以为负数,相当于对给定域进行减法操作。如果 key 不存在,一个新 的哈希表被创建并执行 HINCRBY 命令。如果域 field 不存在,那么在执行命令前,域 的值被初始化为 0。对一个储存字符串值的域 field 执行 HINCRBY 命令将造成一个错误。

3.4.10 hkeys 与 hvals

格式:HKEYS key 或 HVALS key 功能:返回哈希表 key 中的所有域/值。
说明:当 key 不存在时,返回一个空表。 3.4.11 hlen
格式:HLEN key  功能:返回哈希表 key 中域的数量。
说明:当 key 不存在时,返回 0 。

3.4.12 hstrlen

格式:HSTRLEN key field
功能:返回哈希表 key 中, 与给定域 field 相关联的值的字符串长度(string length)。 说明:如果给定的键或者域不存在, 那么命令返回 0 。

3.4.13 应用场景

Hash 型 Value 非常适合存储对象数据。key 为对象名称,value 为描述对象属性的 Map, 对对象属性的修改在 Redis 中就可直接完成。其不像 String 型 Value 存储对象,那个对象是 序列化过的,例如序列化为 JSON 串,对对象属性值的修改需要先反序列化为对象后再修改, 修改后再序列化为 JSON 串后写入到 Redis。