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可以有名字,性别,学校三种属性,不需要完全一样,这样的稀疏性可以减少空间的消耗。
相关推荐
澈2071 天前
深入浅出C++滑动窗口算法:原理、实现与实战应用详解
数据结构·c++·算法
ambition202421 天前
从暴力搜索到理论最优:一道任务调度问题的完整算法演进历程
c语言·数据结构·c++·算法·贪心算法·深度优先
代码旅人ing1 天前
链表算法刷题指南
数据结构·算法·链表
win x1 天前
Redis 使用~如何在Java中连接使用redis
java·数据库·redis
不爱吃炸鸡柳1 天前
单链表专题(完整代码版)
数据结构·算法·链表
Morwit1 天前
【力扣hot100】 1. 两数之和
数据结构·c++·算法·leetcode·职场和发展
cccccc语言我来了1 天前
【C++---unordered_set/map底层封装】个不拘一格的集合。它不似有序集合那般循规蹈矩,而是以一种洒脱不羁的方式,将元素们随意地散落其中。每一个元素都是独一无二的。
开发语言·c++·哈希算法
程序员萌萌1 天前
Redis的缓存机制和淘汰策略详解
数据库·redis·缓存机制·淘汰策略
田梓燊1 天前
2026/4/11 leetcode 3741
数据结构·算法·leetcode
葳_人生_蕤1 天前
hot100——栈和队列
数据结构