• 深入剖析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”

  • 相关阅读:
    CSDN竞赛7期题解
    Flutter快学快用23 架构原理:为什么 Flutter 性能更佳
    EM@三角恒等变换P1
    基于ConstraintLayout的增强布局,专注于过渡动画实现的动画框架:MotionLayout
    Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单。
    RESTful风格学习笔记【包含示例】
    适配移动端,菜单采用底部固定形式(1+X Web前端开发初级 例题)
    ZCC5503 18V 1A 6uA低静态功耗 同步降压控制器
    centos7安装keepalived 保证Nginx的高可用
    vue项目打包优化的方法
  • 原文地址:https://blog.csdn.net/m0_64803878/article/details/133283304