redis基本数据类型hash

redis实验环境

针对学习redis 我们可以为您提供一套完善的学习环境
点击此处跳转

章节叙述

本章节我们介绍一下Hash类型,几乎所有的编程语言都提供了哈希(Hash)类型,它们的叫法可能是哈希,字典,关联数组。在 Redis 中,哈希类型是指键值,本身又是一个键值对结构。Redis 键值对和哈希类型的二者关系可以用下图表示:

hash与字符串对比

常用命令

我们这里只介绍一些常用的命令,在本章节的附件中提供了Hash类型所有的命令,以及示例。

  1. 1,单个设置值,获取值

    Redis可以通过hset命令来创建一个Hash类型的键值对,它可以一次设置多个field

    hset hash1 field1 val1 field2 val2
    

    返回的是您新建成功的个数,我们可以通过hget来获取具体的field的值

    hget hash1 field1
    

    当前如果您想获取到指定key下边所有的filed和value的话,您也可以使用如下的命令

    hgetall hash1
    
  2. 2,删除操作

    我们在开始的基础设置以及了解到del可以删除指定的keyRedis针对Hash类型来提供了删除指定field的命令:

    hdel hash1 field1
    

    您可以使用这个命令删除指定的field,当然也支持同时删除多个

    hdel hash1 field1 field2
    
  3. 3,计算field的个数

    Redis也提供了指定key计算field个数的方法

     hlen hash1
    

    返回的为field的个数。

  4. 4,批量设置,获取field-value

    同样Redis也提供了Hash类型批量设置和获取的方法hmsethmget,我们来简单使用一下

    hmset hash1 field1 val1 field2 val2
    

    大家可能会发现这个方法使用和hset方法一致。这个方法在Redis 4.0.0的时候弃用了,如果您的Redis版本低于4.0.0还是需要使用hmset来存储多个field-value的,如下是官方文档介绍

    As per Redis 4.0.0, HMSET is considered deprecated. Please use HSET in new code.
    根据Redis 4.0.0,HMSET被视为已弃用。请在新代码中使用HSET。
    

    获取多个field-value目前还需要使用hmget如下

     hmget hash1 field1 field2 
    
内部编码

接下来我们来了解一下Hash类型的内部编码。

  • 1,zipList (压缩列表)

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

  • 2,hashtable(哈希表)

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

常见使用场景
  1. 1,用于缓存

    Redis hash 类型的(key,field,value)的结构与对象的(对象id,属性,值)的结构相似,可以用来存储热点的对象数据。与 string 类型存储的区别如下

    String+jsonhash
    效率很高
    容量
    灵活性
    序列化简单复杂

    ​ 当对象的某个属性需要频繁修改时,不合适用 string + json ,因为它不够灵活,每次修改都需要重新将整个对象序列化并赋值,如果使用 hash 类型则可以针对某个属性单独修改。另外使用 string + json 格式存储查询检索方式单一,只能通过 key 的方式查询,如果使用 hash 类型存储则可以使用 key +field 的方式进行检索。

    综上: 一般对象使用 string + json 存储,对象中如果有某些频繁变化的属性建议使用 hash 存储

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值