Redis -- hash哈希

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis -- hash哈希


关于Redis的hash

       几乎所有的主流编程语言都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数组、映射。在 Redis 中,哈希类型是指值本身又是一个键值对结构,形如 key = "key",value = { {field1, value1 }, ..., {fieldN, valueN } },Redis 键值对和哈希类型二者的关系可以用图 2-15 来表示。

        redis自身本来就是键值对结构了,自身的键值对就是通过hash的方式来组织的。

       到了value这一层,value又可以是很多种类型,其中这节要讲的就是hash类型,同样是hash的形式来表示value。

hash命令

hset

       设置 hash 中指定的字段(field)的值(value)。

语法:HSET key field value  [field value ...]

       返回值:添加的字段的个数。

       可以添加多个字段,多个字段之间使用空格间隔。

示例

       将一个key设置为hash,然后添加两个属性域:

       想要一个hset设置多个field和value,就可以直接写多个field和value,多个filed和value之间使用空格隔开:

hget

       既然可以设置hash,那么必然也可以查找hash。获取 hash 中指定字段的值。

语法:hget  key  filed

       时间复杂度:O(1)

       返回值:字段对应的值或者 nil。

示例:

       设置一个key的一个域名为field,也可以叫属性名,其值为test

       使用hget获取这个值:


       除了get和set,当然也有exists呀,那么hash的exists就是hexists。


hexists

       判断hash中是否有指定字段

语法:hexists key field

       返回值:1表示存在,0表示不存在

       时间复杂度O(1)

示例

       field1存在于key,所以返回1,field2不存在于key,所以返回0。


       有get,set,eixsts。那么必然也有del,对于hash的del那么就是hdel

hdel

       删除hash中指定key的指定字段。而不是删除key本身。删除key本身是使用del key。

语法:hdel key field  [field ... ]

       可以一次性输入多个field,多个field之间使用空格隔开。

       返回值:返回顺利被删除的field的个数。

示例

       删除一个不存在的field时候,返回0.

       直接del key将会删除整个hash 表。


       学习了hget,你就会发现,我每次都去hget某一个key,而且每一次只能获取一个字段,但是如果我想要获取整个字段集合呢??那么hget就有点力不从心了。所以下面这个命令就是解决这个问题。


hkeys

        把对应hash的key,然后将其key全部列出来。

语法:hkeys key

       时间复杂度:O(N),其中N表示此hash中key的个数。

演示

hvals  

       获取hash key中的所有的value

语法:hvals key

       时间复杂度O(N),N表示field的个数。

       返回值:所有的key对应的value值

示例

       设置三个域:

       获取他们的value:


       虽然有hkeys和hvals,但是所有的key和value都不“同窗”,不会在一个命令中全部显示出来,这个怎么处理?下面的命令就解决了这个问题。


hgetall

       获取hash中所有的值。

语法:hgetall key

       时间复杂度:O(N), N 为 field 的个数。

       返回值:所有的值,他们两两成对出现。

示例


hmget

       一次性获取多个hash key的field。

语法:hmget key field1 field2 ......

       此处返回值为对应的field的值,多个value的顺序是和输入的field顺序相一致。

示例


注意:redis也有hmset,但是hmset的功能hset已经提供,这里不再赘述。

       同时,上述的命令:hvals,hkeys,hgetall,都是 存在一定风险的命令,hash的域太多,执行会消耗较长的时间,从而阻塞redis。redsi提供了一个额外的命令处理这种问题:hscan,敲一次遍历一个,连续敲多次就可以全部遍历完成。


hlen

       获取 hash 中的所有字段的个数。

语法:HLEN key

       返回值:此key中的字段的个数。

示例:

       有如下这个hashkey:

       我们查看其字段个数:

hsetnx

       在字段不存在的情况下,设置 hash 中的字段和值。

语法:HSETNX key field value

       时间复杂度:O(1)。

       返回值:1 表示设置成功,0 表示失败。

示例:

       因为当前的key的fi字段不存在,所以设置成功返回1,如果再次hsetnx key f1就会失败:

hash计数

hincrby

       将 hash 中字段对应的数值添加指定的值。

语法:HINCRBY  key field increment

       返回值为计算之后的结果。

       时间复杂度O(1)

示例

hincrbyfloat

       HINCRBY 的浮点数版本。这里不再赘述。

小结

 


相关实践学习
基于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
目录
相关文章
|
2月前
|
存储 NoSQL Java
Redis如何处理Hash冲突?
在 Redis 中,哈希表是一种常见的数据结构,通常用于存储对象的属性,对于哈希表,最常遇到的是哈希冲突,那么,当 Redis遇到Hash冲突会如何处理?这篇文章,我们将详细介绍Redis如何处理哈希冲突,并探讨其性能和实现细节。
75 1
|
2月前
|
存储 NoSQL Redis
Redis 哈希(Hash)
10月更文挑战第16天
41 1
|
2月前
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
28 3
|
3月前
|
存储 JSON NoSQL
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
这篇文章是关于Redis基本数据结构的学习笔记,包括了String、Hash、Set、List和SortedSet的介绍和常用命令。文章解释了每种数据结构的特点和使用场景,并通过命令示例演示了如何在Redis中操作这些数据结构。此外,还提供了一些练习示例,帮助读者更好地理解和应用这些数据结构。
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
|
3月前
|
存储 NoSQL 算法
5)深度解密 Redis 的哈希(Hash)
5)深度解密 Redis 的哈希(Hash)
31 0
|
4月前
|
存储 NoSQL 算法
Redis6入门到实战------ 三、常用五大数据类型(列表(List)、集合(Set)、哈希(Hash)、Zset(sorted set))
这是关于Redis 6入门到实战的文章,具体内容涉及Redis的五大数据类型:列表(List)、集合(Set)、哈希(Hash)、有序集合(Zset(sorted set))。文章详细介绍了这些数据类型的特点、常用命令以及它们背后的数据结构。如果您有任何关于Redis的具体问题或需要进一步的帮助,请随时告诉我。
|
5月前
|
存储 缓存 NoSQL
Redis问题之一致性Hash是如何解决哈希+取余方法中的稳定性问题的
Redis问题之一致性Hash是如何解决哈希+取余方法中的稳定性问题的
69 10
|
4月前
|
存储 缓存 NoSQL
redis数据结构-hash
redis数据结构-hash
27 0
|
存储 NoSQL Redis
Redis命令——哈希(Hash)
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。 Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
1493 0
|
存储 NoSQL Redis
redis必杀命令:哈希(Hash)
题记: Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。 Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
1042 0