美文网首页
第二章:API 的理解和使用-哈希

第二章:API 的理解和使用-哈希

作者: super_pcm | 来源:发表于2019-07-29 21:43 被阅读0次

2.3 哈希

几乎所有的编程语言都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数组。在Redis中,哈希类型是指键值本身又是一个键值对结构,形如value={{field1,value1},...{fieldN,valueN}},Redis键值对和哈希类型二者的关系可以用下图来表示。


字符串和哈希类型对比

哈希类型中的映射关系叫作field-value,注意这里的value是指field对应的值,不是键对应的值,请注意value在不同上下文的作用。

2.3.1 命令

  • 设置值
hset key field value

新增一个哈希数据,同set和setnx的关系,Redis也提供了hsetnx的命令,只不过作用域变成了field.

  • 获取值
hget key field
  • 删除值
hdel key field [field ...]

hdel会删除一个或多个field,返回结果为成功删除field的个数.

  • 计算field个数
hlen key
  • 批量设置或获取field-value
hmget key field [field ...]
hmset key field value [field value ...]
  • 判断field是否存在
hexists key field
  • 获取所有的field
hkeys key

hkeys命令应该叫hfields更为恰当,它返回指定哈希键所有的field,而不是里面的值。

  • 获取所有value
hvals key
  • 获取所有的field-value
hgetall key

在使用hgetall时,如果哈希元素个数比较多,会存在阻塞Redis的可能。如果开发人员只需要获取部分field,可以使用hmget,如果一定要获取全部field-value,可以使用hscan命令,该命令会渐进式遍历哈希类型,hscan将在2.7节介绍。

  • hincrby hincrbyfloat
hincrby key field
hincrbyfloat key field

hincrby和hincrbyfloat,就像incrby和incrbyfloat命令一样,但是它们的作用域是filed。

  • 计算value的字符串长度
hstrlen key field

2.3.2 内部编码

哈希类型的内部编码有两种:ziplist(压缩列表)和hashtable(哈希表)。
ziplist的压缩效率更高,在数据元素个数比较小同时所有值也比较小的时候会使用ziplist,ziplist参数的调整可能会大大优化内存的使用率。

2.3.3 使用场景

哈希类型的使用场景更多是凸显在数据结构方面。
比如把关系型数据库里面的二维表可以转换为Redis的哈希类型来存储。在要给二维表中的某行数据增加一个字段,关系型数据库通常要对整个表进行操作,而哈希类型值需要直接添加对应field即可,更加灵活方便。当然关系型数据库可以使用SQL来做查询,功能更加强大。
此外,哈希类型也可以用作缓存的数据类型,并且有更高的压缩率。使用字符串类型的话,每个属性都有一个键值对,需要消耗大量的键值对;而使用哈希类型,用用户信息(user)来举例,一个用户只需要一个哈希类型,大大节约了内存的占用。

相关文章

网友评论

      本文标题:第二章:API 的理解和使用-哈希

      本文链接:https://www.haomeiwen.com/subject/cgzirctx.html