美文网首页
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 哈希对象

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