初识redis:hash类型

哈希表,作为已经学习过的数据结构中最重要的,不光是在日常开发中,出场的频率非常高,面试中也是非常重要的考点。

哈希类型中的映射关系通常称为 field-value,用于区分 Redis 整体的键值对(key-value)。注意这里的 value 是指 field 对应的值,不是键(key)对应的值,请注意 value 在不同上下文的作用。

目录

HSET  HGET

HEXISTS

HDEL

HKEYS 

HVALS

​编辑

HGETALL

HMGET

HSCAN 

HLEN

HSETNX

HINCRBY  HINCRBYFLOAT   

内部编码

缓存


HSET  HGET

分别用于设置哈希表中的字段和值,和获取哈希表中的字段的值。

HSET key field value [field value ...]
HGET key field

HEXISTS

判定field是否存在。

HEXISTS key field

HDEL

在之前,del删除的是key。此处HDEL删除的是field。并且此处可以操作多个键值对,能节省网络带宽。

HDEL key filed [field ...]

返回的结果是1,这是显示删除成功的个数。

HKEYS 

获取hash中所有的key。这个操作,会先根据key找到对应的hash,时间复杂度是O(1),然后再遍历hash,遍历这个操作是O(N)的时间复杂度。

HKEYS key

注意!这个操作和keys*都具有相同的危险性!

HVALS

和HEKYS相对,能够获取到hash中所有value。

HVALS key

HGETALL

这是上面HKEYS 和 HVALS  的结合。

HGETALL key

上述三个操作,风险都比较大,多数情况下,不需要查询所有的field,可能只查询其中的几个。

HMGET

之前的HGET,只能一次性查询一个,HMGET可以一次性查询多个key。

HSCAN 

HSCAN 命令是 Redis 的一个迭代器命令,用于遍历哈希表中的键值对。当哈希表很大时,使用 HSCAN 可以避免一次性加载整个哈希表到内存中,从而减少内存消耗和提高效率。具体的我们不细说,以后再慢慢了解。

HLEN

获取hash中所有字段的个数。

HLEN key

时间复杂度为 O(1),因为这是靠一个变量存的字段的个数,而不是遍历。

HSETNX

在字段不存在的情况下,设置hash中的字段和值。

HSETNX key field value

 类似于setnx,不存在的时候才能设置成功,如果存在则设置失败。

HINCRBY  HINCRBYFLOAT   

hash这里的value,也可以当做数字来处理。

HINCRBY可以加减整数,HINCRBYFLOAT 可以加减小数。   


内部编码

ziplist付出的代价,如果进行读写元素的时候,速度是比较慢的。

如果元素的个数比较少,慢的并不明显,但是如果元素个数太多了,慢就会雪上加霜。

  1. 哈希中的元素个数比较少,使用ziplist表示;元素个数比较多,使用hashtable来表示。
  2. 每个value的值长度都比较短,使用ziplist表示,如果某个value的长度太长了,也会转换成hashtable。

具体的配置,在元素个数超过多少个转换成hashtable的时候,配置文件为:

hash-max-ziplist-entries   默认为512个

缓存

redis主要作为数据库的缓存来使用。

并且同时使用了string和hash类型来存储。

如果使用string(json)类型来表示Userinfo,要是只想获取或者修改某个field,就需要把整个field读取出来,解析成对象,操作field,再重新转写成json字符串,再写回去~

如果使用hash类型来表示Userinfo,就可以使用field来表示对象的每一个属性(数据表的每一列),此时就可以非常方便的修改、获取任意的值了。

使用hash的方式,确实简单高效,但是空间代价更大了,而且需要控制hash在不同的内部编码之间的转换,会造成cpu资源的消耗。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值