一、基本介绍

前面一个专题我们讲到string去存储明星微博粉丝数,微博数等,大概介绍了两种方式:

  • set user:id:012345:fans  12210862            set user:id:012345:blogs  83
  • 采用json的方式:set user:id:012345  {id:012345, blogs:83, fans:12210862}

第一种方式,相当于是两个key,分别去存储,第二种方式呢,取数据还可以,修改就显得比较笨重。我们做一下变形,变成下面这种形式:相当于存储空间变成了一个键对应一个值,外部只需要明星的id的key就好了。相当于一个key存储了多组数据,我们简化下图:

hash类型:

  • 对一系列存储的数组进行编组,方便管理,典型应用存储对象信息
  • 需要的存储结构:一个存储空间保存多个键值对数据
  • 底层用hash表结构存储数据

hash存储结构优化

  • 如果field数量较少,存储结构优化为类数组结构
  • 如果filed数量较多,存储结构优化为HashMap结构

二、基本操作

功能 命令 其他说明
添加修改数据 hset key field value  
获取数据

hget key field

hgetall key

如果是获取所有的key,field和value都会得到,交叉展示

删除数据 hdel key field 可以删除多个field
添加修改多个数据 hmset key field1 value1 field2 value2  
获取多个数据 hmget key field1 field2  
获取哈希表中字段的数量 hlen key  返回field个数
获取哈希表中是否存在指定字段 hexists key field 存在返回1,不存在返回0

三、扩展操作

功能 命令 其他说明
获取哈希表中所有字段名 hkeys key 得到所有的field
获取哈希表中所有字段值 hvals key 得到所有的value
设置指定字段的数值数据增加指定范围的值

hincrby key field incremet

hincrbyfloat key field increment

 

四、注意事项

  • hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套对象;如果数据未获取到,对应值为nil
  • 每个hash可以存储2^32-1个键值对(存储有上限)
  • hash类型十分贴近对象的存储格式,并且可以灵活添加删除对象的属性值。但是hash的设计初衷不是为了存储大量对象设计的,而且更不能将hash作为对象列表使用
  • hgetall操作可以获取全部属性,如果内部fields过多,遍历整体数据效率就会很低,有可能成为数据访问瓶颈。

 五、业务场景

比方说电商中的购物车,每个用户使用自己的购物车,购物车中购买多个商品,每个商品的数量也不尽相同,这个时候我们就可以考虑hash的存储结构;key 就是用户的ID,field是商品的id,value就是购买对应商品的数量。

存储结构OK了,那么我们购物车的操作是不是也能实现了?当然可以的,比方说要获取购物车中商品的个数可以使用hlen,获取某个商品的购买数量hget,购买数量修改hset/hincrby,

看全部购物车hgetall,删除hdel。因此用hash是没有问题。

六、string存储对象和hash存储对象区别

string存对象讲究整体性,要么一次性更新,要么一次性获取,以读为主;

hash可以用field把属性隔离开来,讲究的是更新操作的灵活性;hash是一个群组概念,把一系列的数据包装起来,对外产生唯一的key。

如果更新比较多,推荐使用hash,如果更加注重对外呈现,推荐string。

专题三:redis的数据类型之hash的更多相关文章

  1. redis(三)-----redis基本数据类型

    Redis的全称是REmote Dictionary Server,它主要提供了5种数据结构:字符串.哈希.列表.集合.有序集合,同时在字符串的基础之上演变 出了位图(Bitmaps)和HyperLo ...

  2. 关于redis的几件小事(三)redis的数据类型与使用场景

    1.string 这是最基本的类型了,就是普通的set和get,做简单的kv缓存. 2.hash 这个是类似map的一种结构,这个一般就是可以将结构化的数据,比如一个对象(前提是这个对象没嵌套其他的对 ...

  3. redis 五大数据类型之hash篇

    1.hset/hget/hmset/hmget/hgetall/hdel --hgetall 是以截图中 key-value 分别一一显示出来,k1对应v1 ,k2对应v2 2.hlen 3.hexi ...

  4. Redis笔记(三)Redis的数据类型

    前面说过,Redis的一大特性是支持丰富的数据类型, 这为更多的应用场景提供了可能. Redis有五种数据类型,包括string,list,set,sorted set和hash,注意,Redis的数 ...

  5. 专题二:redis的数据类型之string

    一.redis的数据存储格式 redis本身是一个Map,其中所有的数据都是采用 "key:value"的方式进行存储的. 我们说的数据类型是数据存储的类型,也就是对应下图的val ...

  6. 2. redis的数据类型

    一. string类型 字符串类型是redis中最基本的数据类型,它能存储任何形式的内容,包含二进制数据,甚至是一张图片(二进制内容).一个字符串类型的值存储的最大容量是1GB 命令 (1)setnx ...

  7. Redis系列(二):Redis的数据类型及命令操作

    原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...

  8. Redis的数据类型及其常用命令

    快速入门Redis 首先安装redis: windows下安装redis Linux下安装redis 1. 什么是redis Redis属于nosql(非关系型数据库) 关系型数据库是基于关系表的数据 ...

  9. Redis的数据类型及相关操作命令

    redis 基础内容 —— redis的数据类型及相关操作的Linux命令.所谓大厦千层基础承载,希望大家认真学习这一讲: 一.redis 的五大数据类型: 1.String(字符串): 2.List ...

随机推荐

  1. Hbuilder MUI 页面刷新及页面传值问题

    一.页面刷新问题 1.父页面A跳转到子页面B,B页面修改数据后再跳回A页面,刷新A页面数据 (1).父页面A代码 window.addEventListener("pageflowrefre ...

  2. Numpy-数组array操作

    array是一个通用的同构数据多维容器,也就是说,其中的所有元素必须是相同类型的. 每个数组都有一个shape(一个表示各维度大小的元组)和一个dtype(一个用于说明数组数据类型的对象). 数组的形 ...

  3. Windows控件的属性与事件

    Treeview控件重要属性和事件 属性 说明 Nodes Treeview控件中所有树节点 SelectdNode 当前Treeview控件中选定的树节点,如果当前没有选定树节点,返回值为null ...

  4. Nuget管理自己的项目库

    Nuget是什么 Nuget 是一种 Visual Studio 扩展工具,它能够简化在 Visual Studio 项目中添加.更新和删除库(部署为程序包)的操作.(官方地址)相信大家对这个应该还是 ...

  5. C++中union的使用方法

    转载:https://blog.csdn.net/hou09tian/article/details/80816445 1 概述 1.1 定义 union即为联合,它是一种特殊的类.通过关键字unio ...

  6. VS2013 c++ 生成和调用DLL动态链接库(.def 方法已验证OK)

    转载:https://blog.csdn.net/zhunianguo/article/details/52294339 .def 方法 创建动态库方法: 创建动态库是生成 .dll .lib 两个个 ...

  7. matlab中fseek 移至文件中的指定位置

    文章来源:https://ww2.mathworks.cn/help/matlab/ref/fseek.html?searchHighlight=fseek&s_tid=doc_srchtit ...

  8. P2783 有机化学之神偶尔也会作弊 题解

    题面 前言 这道题以前还是道(水)黑题,现在怎么降紫了???? 前置芝士 tarjain 缩点 倍增求LCA或树剖求LCA 脑子... 题意 给你一个无向图,要求你把所有的环缩成一个点.在新得到的图上 ...

  9. Redash 二开 - 后端环境搭建

    Redash 二开 - 后端环境搭建 一.操作系统选择 官方文档有一句话:Windows users: while it should be possible to run Redash on a W ...

  10. 谈谈InnoDB中的B+树索引

    索引类似于书的目录,他是帮助我们从大量数据中快速定位某一条或者某个范围数据的一种数据结构.有序数组,搜索树都可以被用作索引.MySQL中有三大索引,分别是B+树索引.Hash索引.全文索引.B+树索引 ...