redis数据结构hash的基本指令

hash命令

因为在redis的哈希数据结构中,是存在两个key的,所以我们把哈希value里的key称为field。

hset,hget,hexist,hdel

hset:这个里面设置的value就只能设置字符串类型了,返回值表示成功插入几个值。

bash 复制代码
hset key field1 value1 [fieldN valueN....]

hget:如果查找的key存在,则再次进行哈希查询field是否存在,如果存在则返回对应的value,如果不存在则返回nil,时间复杂度为O(1)。

bash 复制代码
hget key field

hexists:判定hash中是否存在对应的字段,如果存在返回1,不存在返回0。

bash 复制代码
hexist key field

hdel:del删除的是key,而hdel删除的是field,返回值返回的是删除的字段个数,如果删除一个不存在的值,则返回0。

bash 复制代码
hdel key field [fieldN....]

hkeys和hvals

hkeys:先根据key找到对应的哈希,再遍历哈希,就可以获取到哈希里所有的field。

bash 复制代码
hkeys key

hvals:和hkeys类似,但这个指令是获取到哈希中所有的value。

bash 复制代码
hvals key

hgetall和hmget

hgetall:可以获取到所有的key和value。

bash 复制代码
hgetall key

hmget:hgetall的风险还是比较大的,如果我们只想查询其中几个命令,可以使用hmget,可以一次查询多个field。

bash 复制代码
hmget key field1[field2 field3 ....]

hscan也可以遍历redis里的数据,但它属于渐进式遍历,敲一次命令,遍历一小部分,就可以保证时间可控,不会阻塞服务器。

hlen,hsetnx,hincrby,hincrbyfloat

hlen:可以获取此key对应的哈希value里对应的元素个数,时间复杂度为O(1)。

bash 复制代码
hlen key


hsetnx:当field不存在的时候,可以设置成功,如果field存在,则设置失败,当设置成功返回1,设置失败返回0。

bash 复制代码
hsetnx key field value


hincrby:哈希这里的value也可以当作数字来处理,这个可以用于加减整数,返回值为加完之后的数。

bash 复制代码
hincrby key field 整数


hincrbyfloat:和hincrby很类似,但主要是用于加减小数,返回值为加完之后的数。

bash 复制代码
hincrbyfloat key field 小数

编码方式

哈希内部编码有两种,一种是ziplist(压缩列表),另外一种是hashtable(哈希表)的方式,当哈希列表中的元素较少,小于hash-max-ziplist-entries(默认为512个),并且其中的元素值均小于hash-max-ziplist-value(默认为64字节),就会使用ziplist编码,ziplist使用更加紧凑的结构连续存储元素,所以在节省内存方面比较优秀。当哈希类型无法满足ziplist条件时,redis就会使用更为复杂的hashtable进行存储。

应用

  • 可以用于存储一些类似于关系型数据库的内容,比如说有一个用户的id,对应的value哈希就可以存储名字,年龄,城市等和此用户有关的信息。如果想使用字符串类型存储也是可以的,但这需要用到json格式。
  • 关系型数据库的稀疏性:在MySQL中存储数据,如果一个属性是不存在的,那么就需要用null标识,而在redis中,如果一个属性不存在,我们可以不用特地标识出来,比如说用户1可以有名字,年龄和城市三种属性,而用户2可以有名字,性别,学校三种属性,不需要完全一样,这样的稀疏性可以减少空间的消耗。
相关推荐
小北方城市网2 小时前
SpringBoot 集成 Elasticsearch 实战(全文检索与聚合分析):打造高效海量数据检索系统
java·redis·分布式·python·缓存
alonewolf_992 小时前
Redis Stack全面解析:从JSON存储到布隆过滤器,打造高性能Redis扩展生态
数据库·redis·json
衫水10 小时前
ubuntu系统如何检查和安装以及运行redis
redis·ubuntu·bootstrap
多米Domi01110 小时前
0x3f第33天复习 (16;45-18:00)
数据结构·python·算法·leetcode·链表
曹仙逸11 小时前
数据结构day04
数据结构
Lips61111 小时前
2026.1.16力扣刷题
数据结构·算法·leetcode
曹仙逸11 小时前
数据结构day05
数据结构
睡一觉就好了。12 小时前
树的基本结构
数据结构
kaikaile199512 小时前
A星算法避开障碍物寻找最优路径(MATLAB实现)
数据结构·算法·matlab