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

小结

相关推荐
indexsunny3 小时前
互联网大厂Java面试实战:Spring Boot微服务在电商场景中的应用与挑战
java·spring boot·redis·微服务·kafka·spring security·电商
摇滚侠9 小时前
阿里云安装的 Redis 在什么位置,如何找到 Redis 的安装位置
redis·阿里云·云计算
啦啦啦_99999 小时前
Redis-2-queryFormat()方法
数据库·redis·缓存
forestsea11 小时前
深入理解Redisson RLocalCachedMap:本地缓存过期策略全解析
redis·缓存·redisson
佛祖让我来巡山12 小时前
Redis 为什么这么快?——「极速快递站」的故事
redis·redis为什么快?
啦啦啦_999913 小时前
Redis-0-业务逻辑
数据库·redis·缓存
自不量力的A同学14 小时前
Redisson 4.2.0 发布,官方推荐的 Redis 客户端
数据库·redis·缓存
fengxin_rou14 小时前
[Redis从零到精通|第四篇]:缓存穿透、雪崩、击穿
java·redis·缓存·mybatis·idea·多线程
是阿楷啊15 小时前
Java大厂面试场景:音视频场景中的Spring Boot与微服务实战
spring boot·redis·spring cloud·微服务·grafana·prometheus·java面试
笨蛋不要掉眼泪15 小时前
Redis哨兵机制全解析:原理、配置与实战故障转移演示
java·数据库·redis·缓存·bootstrap