iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >redis中的hash数据类型怎么用
  • 366
分享到

redis中的hash数据类型怎么用

2024-04-02 19:04:59 366人浏览 薄情痞子
摘要

这篇文章主要介绍Redis中的hash数据类型怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. hash类型数据概述我们先来看这个例子在上一节我们一起了解了 string 存

这篇文章主要介绍Redis中的hash数据类型怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

1. hash类型数据概述

我们先来看这个例子

在上一节我们一起了解了 string 存储类型。但是如果是对象数据的存储具有较频繁的更新需求,操作会显得笨重。例如:user:id:100 -> {"id":100,"name":"春晚","fans":12355,"blogs":99,"focus:83},如果需要更新一个对象中的局部数据,就需要替换掉所有数据,于是有了以下的需求。

新的需求:对一系列存储的数据进行编组,方便管理,比如存储一个对象的信息需要的存储结构:一个存储空间保存多个键值对数据

如下图:

redis中的hash数据类型怎么用

为了解决这个问题,我们引入新的数据类型:hash。同时 hash 存储结构也做了以下优化

  • 如果 field 数量较小,存储结构优化为类数组结构

  • 如果 field 数量较多,存储结构使用 HashMap 结构

2. hash 类型数据的基本操作

  • 修改/添加数据

hset key field value
  • 查询单个字段/查询所有字段

# 查询单个字段数据
hget key field
# 查询所有数据
hgetall key
  • 删除操作

hdel key field1 [field2]
  • 修改/添加多个数据

hmset key field1 value1 field2 value2
  • 返回 hash 表中,一个或多个给定字段的值

hmget key field1 field2
  • 获取 hash 表中字段的数量

hlen key
  • 获取 hash 表中是否存在指定的字段

hexists key field

3. hash 类型数据的扩展操作

  • 获取 hash 表中所有字段名或字段值

hkey key
hvals key
  • 设置指定字符段的数值数据增加指定范围的值

hincrby key field increment
hincrbyfloat key field increment

hash 类型数据操作注意事项

  • hash 类型下的 value 只能存储字符串,不允许存储其他数据类型,不存在嵌套对象。如果数据未获取到,对应的结果为(nil);

  • 每个 hash 可以存储 2 的 32 次方减 1 个键值对;

  • hash 类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性,但 hash 设计初衷不是为了存储大量对象而设计,切记不可滥用,更不可以将 hash 作为对象列表使用;

  • hgetall 操作可以获取全部属性,如果内部 field 过多,遍历整个数据效率会很低,有可能成为数据访问瓶颈。

4. hash的应用案例

4.1. 用hash实现购物车

概述

在这里我们不讨论购物车与数据库间的持久化同步,也不讨论购物车与订单之间的关系,同时忽略未登录用户购物车信息存储。我们仅仅用 redis 的存储模型来 对购物车 的条目进行 添加、浏览、更改数量、删除、清空

实现方案

  • 以客户 id 作为 key,每位用户创建一个 hash 存储结构对应购物车信息

  • 将商品编号作为 field,购买数量作为 value 进行存储

  • 添加商品:追加全新的 field 与 value

  • 浏览商品:遍历 hash

  • 更改数量:自增/自减,设置 value 值

  • 删除商品:删除 field

  • 清空:删除 key

示例代码如下:

# 001 用户购买 ID为101商品 100件,ID为102的商品 200件
hmset 001 101 100 102 200
# 002 用户购买 ID为102商品 1件,ID为104的商品 7件
hmset 002 102 1 104 7

商品信息加速

当前仅仅是将数量存储到 redis 中,并没有起到加速作用,因为商品信息还需要查询数据库。可以使用以下方案解决:

每条购物车中的商品信息记录保存为两个 field

  • field1 专门用于保存数量

命名格式:商品 id:nums 保存数据:数值

  • field2 专门用于保存购物车中显示的商品信息,包含文字描述,图片地址,所属商家信息等

命名格式:商品 id:info 保存数据:JSON

示例代码如下:

# 001 用户 购买 ID为101的商品 2件,商品的信息为:{"name":"Good name"} 
hmset 001 101:num 2  101:info "{\"name\":\"goods name\"}"
# 002 用户 购买 ID为101的商品 1件,商品的信息为:{"name":"good name"} 
hmset 002 101:num 1  101:info "{\"name\":\"goods name\"}"

在上面的101:info 对应的值中,字符串包含了空格,所以用双引号引用起来,达到转义的目的。

商品信息独立保存

由于 field2 可能在多条商品记录中存在,因此 field2 里的数据可保存到独立的 hash。此时,如果每添加一条购物车记录,就保存一次 hash 数据,显然是不合理的,可以通过hsetnx操作来保存数据,如果数据存在,则不执行保存操作。

命令格式如下

hsetnx key field value

代码示例如下

# 将id为101 的商品独立存起来
hsetnx info 101 "{\"name\":\"goods name\"}"

4.1. 用hash实现抢购

案例:双 11 活动日,销售手机充值卡的商家对移动、联通、电信的 30 元、50 元、100 元商品推出抢购活动,每种商品的抢购上限为 100。

解决方案

  • 以商家 id 作为 key

  • 将参与抢购的商品作为 field

  • 将参与抢购的商品数量作为对应的 value

  • 抢购时使用降值的方式控制产品数量

  • 实际业务中还有超卖等实际问题,这里不做讨论

实现过程

商品初始信息

# p01商家下,c30充值券1000张,c50充值券1000张,c100充值券1000张
hmset p01 c30 1000 c50 1000 c100 1000

当 c30 售出1件时,值减 1; 当 c100 售出 20 件时,值减 20,如下代码

# p01商家,商品c30售出1件
hincrby p01 c30 -1
# p01商家,商品c100售出20件
hincrby p01 c100 -20

5. string 存对象对比 hash 存对象

  • string 存储 json 字符串:读取方便,在更新的时候会整体进行更新

  • hash 存对象具体的字段:更新灵活

引入 hash 数据类型之后,我们就解决了 string 存储对象,更新对象时需要整体更新的问题。

以上是“redis中的hash数据类型怎么用”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网数据库频道!

您可能感兴趣的文档:

--结束END--

本文标题: redis中的hash数据类型怎么用

本文链接: https://www.lsjlt.com/news/70596.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • redis中的hash数据类型怎么用
    这篇文章主要介绍redis中的hash数据类型怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. hash类型数据概述我们先来看这个例子在上一节我们一起了解了 string 存...
    99+
    2022-10-19
  • redis中hash数据类型
    remoteSelf:1>hset website google "www.google.com" "1" remoteSelf:1>hget website "ERR wrong number of arguments for ...
    99+
    2021-09-09
    redis中hash数据类型
  • Redis数据类型string和Hash怎么用
    这篇文章给大家分享的是有关Redis数据类型string和Hash怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。String类型命令操作String类型是在Redis中最常用的数据类型,它也是很多程序员在日...
    99+
    2023-06-29
  • 08 redis数据类型:hash
    ### hash简介在memcached中,我们经常将一些结构化的信息打包成hashmap,在客户端序列化存储为一个字符串的值(一般是json格式),比如用户的昵称、年龄、性别、积分等。### 常用命令&n...
    99+
    2022-10-18
  • Redis中怎么使用hash类型
    Redis中怎么使用hash类型,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 hash类型特别适...
    99+
    2022-10-18
  • Redis笔记-Hash数据类型(三)
    Hash是一个string类型的field和value的映射表。 它的添加、删除操作都是0(1)(平均)。hash特别适合用于存储对象。 相较于将对象的每个字段存成单个string类型,将一个对象存储在ha...
    99+
    2022-10-18
  • Redis中Hash类型的使用
    目录Hash与String比较Hash类型的常见命令(显而易见,在String命令前加入H就是Hash的命令) 1.HSET key field  value:添加或修改hash类型key的field...
    99+
    2023-06-09
    Redis Hash类型 Redis Hash
  • redis中Hash类型有什么用
    这篇文章将为大家详细讲解有关redis中Hash类型有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Hash类型是String类型的field和value映射表,或...
    99+
    2022-10-18
  • Redis数据类型string和Hash详解
    目录String类型命令操作设置指定key的值获取指定key的值返回key中字符串值的子串获取多个给定key的值返回key所对应的字符串的长度设置一个或多个键值对将key中所存储的数...
    99+
    2022-11-13
  • Redis基本数据类型哈希Hash常用操作命令
    目录Redis数据类型Hash常用操作一、hset二、hget三、hmset四、hmget五、hgetall六、hdel七、hlen八、hexists九、hkeys十、hvals十一...
    99+
    2022-11-13
  • Redis中的5种数据类型怎么应用
    本文小编为大家详细介绍“Redis中的5种数据类型怎么应用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Redis中的5种数据类型怎么应用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新...
    99+
    2022-10-19
  • Redis基本数据类型哈希Hash常用操作实例分析
    这篇文章主要介绍了Redis基本数据类型哈希Hash常用操作实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Redis基本数据类型哈希Hash常用操作实例分析文章都会有所收获,下面我们一起来看看吧。Red...
    99+
    2023-06-30
  • redis怎么更改数据类型
    在Redis中,可以使用以下命令更改数据类型:1. `SET key value`:将键 key 的值设置为 value,如果键 k...
    99+
    2023-08-30
    redis
  • Redis特殊数据类型Geospatial怎么使用
    这篇文章主要介绍“Redis特殊数据类型Geospatial怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Redis特殊数据类型Geospatial怎么使用”文章能帮助大家解决问题。Redi...
    99+
    2023-06-30
  • redis中的hash怎么排序
    redis中hash的排序方法:使用sort对hash进行排序,代码如下:插入几条hash数据。127.0.0.1:6379> hmset soft:1 id 1 title mobile download 123 created 122O...
    99+
    2022-10-17
  • Redis中Stream类型怎么用
    这篇文章主要介绍Redis中Stream类型怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、背景最近在看redis这方面的知识,发现在redis5中产生了一种新的数据类型Stream,它和kafka的设计有些...
    99+
    2023-06-25
  • SpringBoot怎么使用RedisTemplate操作Redis数据类型
    这篇文章主要讲解了“SpringBoot怎么使用RedisTemplate操作Redis数据类型”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot怎么使用RedisTempl...
    99+
    2023-06-29
  • Redis特殊数据类型之Geospatial怎么应用
    今天小编给大家分享一下Redis特殊数据类型之Geospatial怎么应用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收...
    99+
    2022-10-19
  • Redis特殊数据类型之stream怎么应用
    这篇文章主要介绍“Redis特殊数据类型之stream怎么应用”,在日常操作中,相信很多人在Redis特殊数据类型之stream怎么应用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大...
    99+
    2022-10-19
  • Redis 数据类型的详解
    Redis 数据类型的详解 概要: Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。 String(字符串...
    99+
    2022-06-04
    详解 数据类型 Redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作