redis数据类型-散列类型

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis数据类型散列类型Redis是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他数据类型,换句话说,散列类型不能嵌套其他的数据类型。

Redis数据类型

散列类型

  • Redis是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他数据类型,换句话说,散列类型不能嵌套其他的数据类型。

  • 一个散列类型键可以包含至多232-1个字段。首先232-1的意思是2的32次方-1也就是大概四亿键值对。设计成这个样子可能是因为当时的操作系统以32位为主。

  • 散列类型适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。例如要存储ID为2的汽车对象,可以分别使用名为color、 name和price的3个字段来存储该辆汽车的颜色、名称和价格。

    提示:除了散列类型,Redis的其他数据类型同样不支持数据类型嵌套。比如集合类型的每个元素都只能是字符串,不能是另一个集合或散列表等。

赋值与取值

HSET key field value
HGET key field
HMSET key field value [field value …]
HMGET key field [field …]
HGETALL key
HSET命令用来给字段赋值,而HGET命令用来获得字段的值。用法如下:
redis> HSET car price 500
(integer) 1
redis> HSET car name BMW
(integer) 1
redis> HGET car name
"BMW"
  • HSET命令的方便之处在于不区分插入和更新操作,这意味着修改数据时不用事先判断字段是否存在来决定要执行的是插入操作(update)还是更新操作(insert)。
  • 当执行的是插入操作时(即之前字段不存在) HSET命令会返回1,当执行的是更新操作时(即之前字段已经存在) HSET命令会返回0。
  • 更进一步,当键本身不存在时, HSET命令还会自动建立它。

    提示在 Redis中每个键都属于一个明确的数据类型,如通过HSET命令建立的键是散列类型,通过SET命令建立的键是字符串类型等。使用一种数据类型的命令操作另一种数据类型的键会提示错误:“ERR Operation against a key holding the wrong kind of value”①。
    注释:①并不是所有命令都是如此,比如SET命令可以覆盖已经存在的键而不论原来键是什么类型。同时设置多个字段需要同时设置多个字段的值时,可以使用HMSET命令。例如,下面两条语句

    HSET key field1 value1
    HSET key field2 value2
    可以用HMSET命令改写成
    HMSET key field1 value1 field2 value2
    相应地, HMGET命令可以同时获得多个字段的值:
    redis> HMGET car price name
    1) "500"
    2) "BMW"
    如果想获取键中所有字段和字段值却不知道键中有哪些字段时(如3.3.1节介绍的存储汽
    车对象的例子,每个对象拥有的属性都未必相同)应该使用HGETALL命令。如:
    redis> HGETALL car
    1) "price"
    2) "500"
    3) "name"
    4) "BMW"

判断字段是否存在

  • HEXISTS key field
  • HEXISTS命令用来判断一个字段是否存在。如果存在则返回1,否则返回0(如果键不存在
    也会返回0)。

    redis> HEXISTS car model
    (integer) 0
    redis> HSET car model C200
    (integer) 1
    redis> HEXISTS car model
    (integer) 1

    当字段不存在时赋值

  • HSETNX key field value
  • HSETNX①命令与HSET命令类似,区别在于如果字段已经存在, HSETNX命令将不执行任何操作。

增加数字

HINCRBY key field increment
字符串类型的命令INCRBY与HINCRBY命令类似,可以使字段值增加指定的整数。散列类型没有HINCR命令,但是可以通过HINCRBY keyfield 1来
实现。
HINCRBY命令的示例如下:

redis> HINCRBY person score 60
(integer) 60

之前person键不存在, HINCRBY命令会自动建立该键并默认score字段在执行命令前的值
为“0”。命令的返回值是增值后的字段值。

删除字段

HDEL key field [field …]
HDEL命令可以删除一个或多个字段,返回值是被删除的字段个数:

redis> HDEL car price
(integer) 1
redis> HDEL car price
(integer) 0

只获取字段名或字段值

HKEYS key
HVALS key
有时仅仅需要获取键中所有字段的名字而不需要字段值,那么可以使用HKEYS命令,就
像这样:

redis> HKEYS car
1) "name"
2) "model"

HVALS命令与HKEYS命令相对应, HVALS命令用来获得键中所有字段值,例如:

redis> HVALS car
1) "BMW"
2) "C200"

获得字段数量

HLEN key
例如:

redis> HLEN car
(integer) 2
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
7天前
|
XML JSON NoSQL
Redis的常用数据结构之字符串类型
Redis的常用数据结构之字符串类型
15 0
|
14天前
|
存储 消息中间件 NoSQL
Redis数据类型详解:选择合适的数据结构优化你的应用
Redis数据类型详解:选择合适的数据结构优化你的应用
|
1月前
|
存储 消息中间件 NoSQL
Redis 常见数据类型(对象类型)和应用案列
接下来,让我们走进 Redis 的对象世界,Redis 5.0版本就已经支持了下面的 9 种类型,分别是 :字符串对象、列表对象、哈希对象、集合对象、有序集合对象、Bitmaps 对象、HyperLogLog 对象、Geospatial 对象、Stream对象。
Redis 常见数据类型(对象类型)和应用案列
|
1月前
|
存储 NoSQL Redis
Redis新数据类型-Bitmaps
Redis新数据类型-Bitmaps
|
1月前
|
存储 NoSQL Java
【Redis】1、学习 Redis 的五大基本数据类型【String、Hash、List、Set、SortedSet】
【Redis】1、学习 Redis 的五大基本数据类型【String、Hash、List、Set、SortedSet】
52 0
|
2月前
|
NoSQL Redis
redis五大数据类型及其常用命令(详细)
redis五大数据类型及其常用命令(详细)
20 0
|
3月前
|
存储 NoSQL 关系型数据库
Redis 实战篇:巧用数据类型实现亿级数据统计
Redis 实战篇:巧用数据类型实现亿级数据统计
63 0
|
3月前
|
NoSQL Redis
Redis原理之五种数据类型笔记
String List Set ZSet ​ Hash
|
3月前
|
存储 NoSQL Java
【Redis】Redis常用五大数据类型
【1月更文挑战第18天】【Redis】Redis常用五大数据类型
|
3月前
|
存储 NoSQL Java
面试题:redis除了使用string、set还了解哪些类型
面试题:redis除了使用string、set还了解哪些类型
15 0