美文网首页
8.4 哈希对象

8.4 哈希对象

作者: 猪大金 | 来源:发表于2018-09-22 21:17 被阅读0次

哈希表对象的彪马可以是ziplist或者hashtable
ziplist编码的哈希对象使用压缩列表作为底层实现,每当有新的键值对要加入到哈希对象,程序会先将保存了键的压缩列表节点推入到压缩列表表尾,然后在将保存了值的压缩列表节点推入到压缩列表的表尾。

  • 保存了统一键值对的两个节点总是紧挨在一起,保存键的节点在前,保存值得节点在后;
  • 先添加到哈希对象中的键值对会被放在压缩列表的表头方向,后来添加到哈希表对象中的键值对会被放在压缩列表的表尾方向。

hashtable编码的哈希对象使用字典作为底层实现,哈希表对象中的每个键值对都使用一个字典键值对来保存:

  • 字典的每个键都是一个字符串对象,对象中保存了键值对的键;
  • 字典的每个值都是一个字符串对象,对象中保存了键值对的值。

8.4.1 编码转换

当哈希对象可以同时满足以下两个条件时,哈希对象使用ziplist编码:

  • 哈希对象保存的所有键值对的键和值的字符串长度都小于64字节
  • 哈希对象保存的键值对数量小于512个;不能满足这两个条件的哈希对象需要使用hashtable编码。

8.4.2 哈希命令

1. HDEL
HDEL key field [field ...]

删除哈希表key中的一个或多个指定域,不存在的域将被忽略。

2. HEXISTS
HEXISTS key field

查看哈希表key中,给定域field是否存在。

3. HGET
HGET key field

返回哈希表key中给定域field的值。

4. HGETALL
HGETALL key

返回哈希表key中,所有的域和值。
在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍。

5. HINCRBY
HINCRBY key field increment

为哈希表key中的域field的值加上增量increment
增量也可以为负数,相当于对给定域进行减法操作。
如果key不存在,一个新的哈希表被创建并执行HINCRBY命令。
如果域field不存在,那么在执行命令前,域的值被初始化为0
对一个储存字符串值的域field执行HINCRBY命令将造成一个错误。
本操作的值被限制在64位(bit)有符号数字表示之内。

6. HINCRBYFLOAT
HINCRBYFLOAT key field increment

为哈希表key中的域field加上浮点数增量increment
如果哈希表中没有域field,那么HINCRBYFLOAT会先将域field的值设为0,然后再执行加法操作。
如果键key不存在,那么HINCRBYFLOAT会先创建一个哈希表,再创建域field,最后再执行加法操作。
当以下任意一个条件发生时,返回一个错误:

  • field的值不是字符串类型(因为redis中的数字和浮点数都以字符串的形式保存,所以它们都属于字符串类型)
  • field 当前的值或给定的增量increment不能解释(parse)为双精度浮点数(double precision floating point number`)
7. HKEYS
HKEYS key

返回哈希表key中的所有域。

8. HLEN
HLEN key

返回哈希表key中域的数量。

9. HMGET
HMGET key field [field ...]

返回哈希表key中,一个或多个给定域的值。
如果给定的域不存在于哈希表,那么返回一个nil值。
因为不存在的key被当作一个空哈希表来处理,所以对一个不存在的key进行HMGET操作将返回一个只带有nil值的表。

10. HMSET
HMSET key field value [field value ...]

同时将多个field-value(域-值)对设置到哈希表key中。
此命令会覆盖哈希表中已存在的域。
如果key不存在,一个空哈希表被创建并执行HMSET操作。

11. HSET
HSET key field value

将哈希表key中的域field的值设为value
如果key不存在,一个新的哈希表被创建并进行HSET操作。
如果域field已经存在于哈希表中,旧值将被覆盖。

12. HSETNX
HSETNX key field value

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

13. HVALS
HVALS key

返回哈希表key中所有域的值。

14. HSCAN
HSCAN key cursor [MATCH pattern] [COUNT count]
15. HSTRLEN
HSTRLEN key field

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

相关文章

  • 8.4 哈希对象

    哈希表对象的彪马可以是ziplist或者hashtableziplist编码的哈希对象使用压缩列表作为底层实现,每...

  • collections 模块的使用

    判断数据类型 1、Hashable 判断是否可哈希,即是否有哈希值,即是否为可变对象可变对象没有哈希值,不可变对象...

  • 12、字典的定义和常用操作

    字典包含哈希值和指向的对象 {"哈希值", "对象"} {'length':180, 'width': 8...

  • Python基础学习3

    映射的类型:字典字典包含哈希值和指向的对象:{"哈希值":"对象"}、{'length':100,'width':...

  • 对象的equals和hashCode

    对象的 hashCode() 方法,为对象返回一个 哈希值。那什么是 哈希值 ? 这个词的解释有很多。 哈希值是...

  • Redis 哈希对象

    哈希对象的编码可以是 ziplist 或 hashtable ziplist 编码的哈希对象使用压缩列表作为底层实...

  • 1.5 哈希对象底层实现

    哈希对象的编码可以是ziplist或hashtable 1. ziplist编码的哈希对象使用压缩列表作为底层实现...

  • 可哈希对象

    hashable 如果一个对象是可哈希的,那么它就有一个在其生命周期中都不会改变的哈希值,它会有一个__hash_...

  • redis哈希对象

    内容来自:《redis设计与实现》购买本书请访问: 京东商城《Redis 深度历险:核心原理与应用实践》购买本书请...

  • R15-数据结构

    数据结构 1. 哈希,hash,所有满足 key: value 的都是哈希,很抽象, 比如数组、对象,都是哈希a ...

网友评论

      本文标题:8.4 哈希对象

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