Redis -- hash哈希

本文涉及的产品
云数据库 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
目录
相关文章
|
10天前
|
存储 NoSQL 算法
Redis集群,集群的概念 三种主流分片方式1.哈希求余 一致性哈希算法:方案三:哈希槽分区算法问题一Redis集群是最多有16384个分片吗问题二:为什么是16384个,集群扩容:1.新的主节点
Redis集群,集群的概念 三种主流分片方式1.哈希求余 一致性哈希算法:方案三:哈希槽分区算法问题一Redis集群是最多有16384个分片吗问题二:为什么是16384个,集群扩容:1.新的主节点
|
10天前
|
存储 JSON NoSQL
Redis第五弹-HASH结构相关指令和介绍,计数功能Hash-哈希(Redis本来就是键值对结构,哈希,就相当于键值对嵌套了一个键值对)的多种指令Hset key field value-
Redis第五弹-HASH结构相关指令和介绍,计数功能Hash-哈希(Redis本来就是键值对结构,哈希,就相当于键值对嵌套了一个键值对)的多种指令Hset key field value-
|
12天前
|
NoSQL Java Redis
【Redis】 Java操作客户端命令——列表操作与哈希操作
【Redis】 Java操作客户端命令——列表操作与哈希操作
|
12天前
|
机器学习/深度学习 缓存 NoSQL
【Redis】 关于 Redis 哈希类型
【Redis】 关于 Redis 哈希类型
|
22天前
|
Java Redis
redis-学习笔记(Jedis hash简单命令)
redis-学习笔记(Jedis hash简单命令)
23 1
|
22天前
|
NoSQL Redis
redis-学习笔记(hash)
redis-学习笔记(hash)
20 0
|
22天前
|
NoSQL Java Redis
redis-学习笔记(string , hash , list , set , zset 前置知识)
redis-学习笔记(string , hash , list , set , zset 前置知识)
7 0
redis-学习笔记(string , hash , list , set , zset 前置知识)
|
1月前
|
存储 NoSQL 算法
Redis入门到通关之Redis数据结构-Hash篇
Redis入门到通关之Redis数据结构-Hash篇
35 1
|
1月前
|
存储 缓存 NoSQL
Redis入门到通关之Hash命令
Redis入门到通关之Hash命令
24 0
|
1月前
|
存储 缓存 NoSQL
Redis 命令全解析之 Hash类型
Redis 命令全解析之 Hash类型
17 1