Redis -- hash哈希

马行软地易失蹄,人贪安逸易失志。


目录

关于Redis的hash

hash命令

hset

hget

hexists

hdel

hkeys

hvals

hgetall

hmget

hlen

hsetnx

hash计数

hincrby

hincrbyfloat

小结


关于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 的浮点数版本。这里不再赘述。

小结

相关推荐
IT大白鼠5 天前
Redis 系列 · 第 01 篇——认知入门:Redis 是什么
redis·nosql
彧azz5 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
lbb 小魔仙5 天前
OpenClaw + cpolar 实战:远程 NAS、分享小游戏、RDP,再配置公网 AI 入口
数据库·人工智能·redis·oracle·prometheus
夕除5 天前
redis--018
redis
两锭子5 天前
Redis基础
redis
烟沙九洲5 天前
Redis 缓存穿透、缓存击穿、缓存雪崩
数据库·redis
字节探索5 天前
Redis 只会当缓存用?这 10 大实战场景,让你的系统快到飞起
redis·后端
于樱花森上飞舞5 天前
【Redis】哨兵详解
java·开发语言·数据库·redis
Rain的Java大神之路5 天前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
Wang's Blog6 天前
Java 接入Redis: 通用命令与键管理
java·服务器·redis