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可以有名字,性别,学校三种属性,不需要完全一样,这样的稀疏性可以减少空间的消耗。
相关推荐
用户3074596982071 天前
Redis 延时队列详解
redis
CSharp精选营1 天前
关系型 vs 非关系型:从原理到选型,一文搞定数据库核心分类
数据结构·nosql·关系型数据库·非关系型数据库·技术选型
烤代码的吐司君1 天前
Redis 数据结构 ZSet, BIT, HyperLogLog,Geo 空间数据
redis·后端
leeyi3 天前
Checkpoint 机制:Agent 怎么在断电后接着跑
redis·aigc·agent
刘马想放假4 天前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
云技纵横4 天前
一个 @Async 让循环依赖暴雷:Spring 代理的暗坑
redis
犯困蛋挞yy5 天前
用Claude快速解决Redis代码报错反复无解的问题
redis
北域码匠5 天前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法
用户31693538118311 天前
Java连接Redis
redis
Darling噜啦啦12 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试