哈希类型(hash)的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串。一个哈希类型键可以包含至多 232 −1 个字段。
HSET
HSET 命令可以为散列中的指定字段设置值。
HSET key field value
若给定的 key 或 field 不存在,那么此命令返回 1,若 field 已存在,则执行覆盖操作,此命令返回 0。
HSETNX
HSETNX 命令在字段不存在并且成功为它设置值时返回 1,在字段已经存在并导致设置操作未能成功执行时返回 0。
HSETNX key field value
HGET
HGET 可以获取指定字段的值。若 key 不存在或者 field 不存在将返回 nil。
HGET key field
HINCRBY
与字符串类型的 INCRBY 命令一样,如果散列的字段值存储的是整数,可以使用 HINCRBY 命令为该字段的值加上指定的整数增量。
HINCRBY key field increment
increment 可以是负数,实现减法的效果。
HINCRBYFLOAT
与字符串类型的 INCRBYFLOAT 命令一样,如果散列的字段里面存储的是整数或浮点数,可以使用 HINCRBYFLOAT 命令为该字段的值加上指定的整数或浮点数增量。
HINCRBYFLOAT key field increment
increment 可以是负数,实现减法的效果。
HSTRLEN
HSTRLEN 命令可以获取给定字段值的字节长度。
HSTRLEN key field
若指定的 key 或 field 不存在将返回 0。
HEXISTS
HEXISTS 命令可用于检查给定的字段是否存在于散列当中。
HEXISTS key field
如果散列包含了给定的字段,那么命令返回 1,否则命令返回 0。
HDEL
HDEL 命令用于删除散列中的指定字段及其相关联的值。
HDEL key field
当给定字段存在于散列当中并且被成功删除时,命令返回1;如果给定字段并不存在于散列当中,或者给定的散列并不存在,那么命令将返回0表示删除失败。
HLEN
HLEN 命令用于获取给定散列包含的字段数量,如果给定的 key 并不存在,那么 HLEN 命令将返回 0 作为结果。
HLEN key
HMSET
HMSET 命令可以一次为散列中的多个字段设置值。和 HSET 相比可以减少网络通信的次数,提高执行速度。
HMSET key field value [field value...]
若指定的 field 已经存在,会使用新值覆盖旧值。
HMGET
HMGET 可以一次从散列中获取多个字段的值。返回的顺序就是指定的 field 的顺序。
HMGET key field [field...]
例如:
redis> hmset dict name xg age 12 sex 1
OK
redis> hmget dict name age birth sex
1) "xg"
2) "12"
3) (nil)
4) "1"
HKEYS & HVALS & HGETALL
这三个命令分别是获取所有字段、所有值、所有字段和值。需要注意的是,Redis 散列包含的字段在底层是以无序方式存储的,不应该对它们返回的元素的排列顺序做任何假设。
哈希类型和字符串类型
字符串类型和哈希类型的某些命令十分相似,但是它们适合不同的业务场景中。哈希类型可以有效的减少数据库中键的数量,而且哈希类型会占用更少的内存(和字符串类型相比),数量过多的键,有时也会造成一定的性能损失。而字符串类型比哈希类型支持更多的命令,且可以为每个 key 分别设置过期时间,而哈希类型不能为单独的 field 设置过期时间,这种情况下字符串类型显然更灵活一点。
应用场景
短网址
现在外链分享很常见,一般分享出去的网址都是一个短网址,并不是真实网址,可以使用哈希类型存储每个网址的短网址(field 是 id,value 是短网址)。