2021-05-29

29
五月
2021

Redis数据类型

三、Hash类型

Redis的Hash类型是String类型的filed和value映射表,非常适合存储对象。相比之下,将对象存储在Hash里,占用用的空间更小,也更方便取得整个对象。通过前面的学习,大家知道Redis本身就是<Key,Value>的存储形式,那么Redis的Hash类型的存储到底是怎么一回事儿呢?当我使用<key,Map>这种形式,你一下子就懂了,相当于<key,<key,value>>的形式,其实就是把本来的key对应的单一的value值换成一个map集合即可。

原理:底层的实现结构和Java的HashMap一样,是“数组+链表”的二维结构。第一维hash的数据位置碰撞时,将碰撞元素串起来,不同的是,redis字典的值只能是字符串,这里的字典,我理解的是redis的key值,其次两者的rehash的方式也不同。Java的HashMap是一次全部rehash,耗时较高,Redis为了优化性能,采用渐进式rehash的策略。具体实现是:同时保留新旧两个hash结构,然后逐步搬迁,搬迁玩之后再取而代之。

相关的命令:

1、hset + redis_key + Hash_key + value 往数据库添加数据,这里需要注意的是:redis_key是设置Redis的键,Hash_key是设置 Hash类型结构里的key。

2、hget + redis_key + Hash_key 获取数据库里的值,注意同上。

3、hsetnx + redis_key + Hash_key + value 如果key不存在,即设置新的key值。

这里分为两种情况:

1)如果reids_key不存在,不管后面的Hash_key是否存在,直接设置即可。

2)如果redis_key存在,则检查Hash_key是否存在,不存在即可设置,存在则不能设置。

注意:设置成功返回1,设置失败返回0。

4、hmget/hmset 批量处理数据。

5、hkeys + redis_key 查询redis_key下的所有Hash_key

6、hvals + redis_key 查询redis_key下的所有value

7、hlen + redis_key 查询redis_key下面的数据个数,即长度。

8、hgetall + redis_key 返回 redis_key下的所以key和value。

9、hexists + redis_key + key 查询 redis_key下面的key是否存在。

而查询redis_key是否存在,则用:exists + redis_key

10、hdel + redis_key + Hash_key 删除数据。

11、hincrby + redis_key + Hash_key num 如果value是整数,则执行增加操作,num为指定增加的数。

这里需要注意的是,命令中以h开头的,基本都是对<key,<key,value>>中,后面一个key的操作。

TAG

网友评论

共有访客发表了评论
请登录后再发布评论,和谐社会,请文明发言,谢谢合作! 立即登录 注册会员