• 深入剖析Redis系列- Redis数据结构之哈希


    1.11.5哈希类型(hash)
    Redis的hash 是一个string类型的key和value的映射表,这里的value是一系列的键值对,hash特别适合用于存储对象。
    哈希类型的数据操作总的思想是通过key和field操作value,key是数据标识,field是域,value是我们感
    兴趣的业务数据。

    1.11.5.1hset
    语法:hset key field value [field value …]
    功能:将键值对field-value设置到哈希列表key中,如果key不存在,则新建哈希列表,然后执行赋值,如果key下的field已经存在,则value值覆盖。
    返回值:返回设置成功的键值对个数。
    在这里插入图片描述

    1.11.5.2hget
    语法:hget key field
    功能:获取哈希表 key 中给定域 field 的值。
    返回值:field域的值,如果key不存在或者field不存在返回nil。
    在这里插入图片描述

    1.11.5.3hmset
    语法:hmset key field value [field value…]
    功能:同时将多个 field-value (域-值)设置到哈希表 key 中,此命令会覆盖已经存在的field,hash表key不存在,创建空的hash表,再执行hmset.
    返回值:设置成功返回ok,如果失败返回一个错误。
    在这里插入图片描述

    1.11.5.4hmget
    语法:hmget key field [field…]
    功能:获取哈希表 key 中一个或多个给定域的值
    返回值:返回和field顺序对应的值,如果field不存在,返回nil。
    在这里插入图片描述

    1.11.5.5hgetall
    语法:hgetall key
    功能:获取哈希表 key 中所有的域和值
    返回值:以列表形式返回hash中域和域的值,key不存在,返回空hash.
    在这里插入图片描述

    1.11.5.6hdel
    语法:hdel key field [field…]
    功能:删除哈希表 key 中的一个或多个指定域field,不存在field直接忽略。
    返回值:成功删除的field的数量。
    在这里插入图片描述

    1.11.5.7hlen
    语法:hlen key
    功能:获取哈希表 key 中域field的个数
    返回值:数值,field的个数。key不存在返回0.
    在这里插入图片描述

    1.11.5.8hexists
    语法:hexists key field
    功能:查看哈希表 key 中,给定域 field 是否存在
    返回值:如果field存在,返回1,其他返回0。
    在这里插入图片描述

    1.11.5.9hkeys
    语法:hkeys key
    功能:查看哈希表 key 中的所有field域列表
    返回值:包含所有field的列表,key不存在返回空列表
    在这里插入图片描述

    1.11.5.10hvals
    语法:hvals key
    功能:返回哈希表 中所有域的值列表
    返回值:包含哈希表所有域值的列表,key不存在返回空列表。
    在这里插入图片描述

    1.11.5.11hincrby
    语法:hincrby key field int
    功能:给哈希表key中的field域增加int
    返回值:返回增加之后的field域的值
    在这里插入图片描述

    1.11.5.12hincrbyfloat
    语法:hincrbyfloat key field float
    功能:给哈希表key中的field域增加float
    返回值:返回增加之后的field域的值
    在这里插入图片描述

    1.11.5.13hsetnx
    语法:hsetnx key field value
    功能:将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在的时候才设置,否则不设置。
    返回值:设值成功返回1,其他返回0.
    在这里插入图片描述
    内部编码
    哈希类型 的 内部编码 有两种:

    2.1. ziplist(压缩列表)
    当 哈希类型 元素个数 小于 hash-max-ziplist-entries 配置(默认 512 个)、同时 所有值 都 小于 hash-max-ziplist-value 配置(默认 64 字节)时,Redis 会使用 ziplist 作为 哈希 的 内部实现,ziplist 使用更加 紧凑的结构 实现多个元素的 连续存储,所以在 节省内存 方面比 hashtable 更加优秀。

    2.2. hashtable(哈希表)
    当 哈希类型 无法满足 ziplist 的条件时,Redis 会使用 hashtable 作为 哈希 的 内部实现,因为此时 ziplist 的 读写效率 会下降,而 hashtable 的读写 时间复杂度 为 O(1)。

    下面的示例演示了 哈希类型 的 内部编码,以及相应的变化。

    当 field 个数 比较少,且没有大的 value 时,内部编码 为 ziplist:

    127.0.0.1:6379> hmset hashkey f1 v1 f2 v2
    OK
    127.0.0.1:6379> object encoding hashkey
    “ziplist”
    当有 value大于64 字节时,内部编码 会由 ziplist 变为 hashtable:
    127.0.0.1:6379> hset hashkey f3 “one string is bigger than 64 byte…忽略…”
    OK
    127.0.0.1:6379> object encoding hashkey
    “hashtable”
    当 field 个数 超过512,内部编码 也会由 ziplist 变为 hashtable:
    127.0.0.1:6379> hmset hashkey f1 v1 f2 v2 f3 v3 … f513 v513
    OK
    127.0.0.1:6379> object encoding hashkey
    “hashtable”

  • 相关阅读:
    发了3000个短视频作品才总结出的9点快速破播放的技巧
    深入浅出Spring(24)
    Android 巧用ImageView属性实现选中和未选中效果
    状态设计模式
    Echarts社区开源地址
    独立站,跨境电商新玩法
    传输层——UDP协议、TCP协议
    Stream流式编程,让代码变优雅
    计算机视觉实战项目2(单目测距+图像处理+路径规划+车牌识别)
    HTML期末作业:基于html+css+javascript+jquery实现古诗词网页 学生网页设计作品 web前端开发技术 web课程设计 网页规划与设计
  • 原文地址:https://blog.csdn.net/m0_64803878/article/details/133283304