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可以有名字,性别,学校三种属性,不需要完全一样,这样的稀疏性可以减少空间的消耗。
相关推荐
南境十里·墨染春水15 分钟前
数据结构 —— 双向循环链表
数据结构·链表
海清河晏11118 分钟前
字符串匹配:BF算法与KMP算法
数据结构·算法·visual studio
我叫张小白。21 分钟前
基于Redis的缓存架构与一致性保障体系
数据库·redis·缓存·架构
我是一颗柠檬39 分钟前
【Redis】数据类型详解Day2(2026年)
数据库·redis·后端·缓存
Trouvaille ~44 分钟前
【Redis篇】List 列表:双端队列与消息队列的完美实现
数据库·redis·list·双端队列·后端开发·quicklist·zoplist
QiLinkOS1 小时前
QiLink 技术委员会选举实施细则
c语言·数据结构·c++·单片机·嵌入式硬件·算法·开源
无忧.芙桃1 小时前
数据结构之顺序表的实现
数据结构
努力发光的程序员1 小时前
面试官与程序员谢飞机的3轮Java大厂面试问答实录:涵盖Spring Boot、微服务与数据库技术
java·jvm·spring boot·redis·面试·hibernate·microservices
我叫张小白。1 小时前
Redis的缓存雪崩、击穿、穿透和解决方案
数据结构·redis·fastapi·缓存穿透·缓存击穿·雪崩·热点key问题
QiLinkOS1 小时前
发明人与专利价值共生逻辑
c语言·数据结构·c++·人工智能·单片机·嵌入式硬件·算法