专栏首页晨曦破晓の家Redis的各种数据类型实践---HASH结构

Redis的各种数据类型实践---HASH结构

Redis Hash

Redis 的字典使用哈希表作为底层实现,一个哈希表里可以有多个哈希表节点。每个哈希表节点就保存了字典中的一个键值对。

Hash是一个string 类型的field和value的映射表。Hash特别适合存储对象,相对于将对象的每个字段存成单个string 类型。一个对象存储在Hash类型中会占用更少的内存,并且可以更方便的存取整个对象。

Hash 常用操作

HSET key field value//存储一个哈希表key的键值
HSETNX key field value//存储一个不存在的哈希表key的键值
HMSET key field value [field value ...] //在一个哈希表key中存储多个键值对
HGET key field//获取哈希表key对应的field键值
HMGET key field [field ...]//批量获取哈希表key中多个field键值
HDEL key field [field ...]//删除哈希表key中的field键值
HLEN key//返回哈希表key中field的数量
HGETALL key//返回哈希表key中所有的键值
HINCRBY key field increment//为哈希表key中field键的值加上增量increment

应用场景

  1. 对象缓存 结合HASH结构的key-field-value的特性,类似于Java中的HashMap,内部也是“key-value”的形式,field刚好可以存对象的属性名,有如下数据

id

name

score

1

小明

89

2

小三

99

我们可以用HMSET命令批量设置field-value,前面拼接用户的ID保证存多个用户的数据不会重复;HMGET批量获取field;MSET修改某一个field。

HMSET  mark {userId}:name  小明 {userId}:score 89
HMSET  mark 1:name  小明 1:score 89
HMSET  mark 2:name  小三 2:score 92
HMGET  mark 1:name  1:score

image

对象与HSAH的关系如下图所示

image

  1. 购物车 以用户id为key,商品id为field,商品数量为value可以实现购物车的常规操作。
#添加商品
hset cart:10001 50005 1
#给某一个商品增加数量
hincrby cart:10001 50005 1
#购物车中商品总个数
hlen cart:10001
#删除商品
hdel cart:10001 50005
#获取购物车所有商品
hgetall cart:10001

image

下图显示了购物几个常用操作可以如何用Redis实现

image

Hash结构优缺点
优点
  • 将同类数据归类整合储存(同一个key),方便数据管理
  • 相比String操作,对内存与cpu的消耗更小
  • 相比String储存更节省空间
缺点
  • 过期功能不能使用在field上,只能用在key上
  • Redis集群架构下不适合大规模使用

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Redis的各种数据类型实践-Set

    Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。 Redis 中集合是通过哈希表实现的,所以添...

    用户4464623
  • Redis的各种数据类型实践--String字符串

    Redis作为一款NoSQL内存数据库,其丰富的数据类型、简单易用的命令、单机可达10万的高并发(官方数据),从面世以来就深受广大用户的喜爱。Redis的五种数...

    用户4464623
  • Gradle 简介

    一个像 ant 一样,通用的灵活的构建工具 一种可切换的,像 maven 一样的基于约定约定优于配置的构建框架 强大的多工程构建支持 强大的依赖管理(基于...

    用户4464623
  • NVIDIA DeepStream笔记(一):Deepstream SDK到底解决了什么问题?

    我们讨论如何使用deep stream SDK和transfer learning toolkit来做大规模部署的视频流分析。

    GPUS Lady
  • 一个新仓库应该如何规划,有哪些细节应该注意?

    2. 联单制,每箱设两联单,一联贴箱上,一联放文件夹内,依据入仓时间排序,需物料时文件夹内单据时间最早的物料优先搬出使用。

    用户5495712
  • Python 进阶(十):网络编程

    网络编程主要的工作就是在发送端将信息通过指定的协议进行组装包,在接收端按照规定好的协议对包进行解析并提取出对应的信息,最终达到通信的目的。传输协议主要有 TCP...

    Python小二
  • Redis集群命令行部署工具

    使用之前准备工作: 1)配置好与端口无关的公共redis.conf文件,和工具放在同一目录下 2)配置好与端口相关的模板redis-PORT....

    一见
  • 基础练习 报时助手

      给定当前的时间,请用英文的读法将它读出来。   时间用时h和分m表示,在英文的读法中,读一个时间的方法是:   如果m为0,则将时读出来,然后加上“o'...

    刘开心_1266679
  • 新仓库应该如何规划,有哪些细节应该注意?

    2. 联单制,每箱设两联单,一联贴箱上,一联放文件夹内,依据入仓时间排序,需物料时文件夹内单据时间最早的物料优先搬出使用。

    SAP斯凯普斯 Qasim
  • 【数据分析与可视化】数组与矩阵运算

    瑞新

扫码关注云+社区

领取腾讯云代金券