Redis系列三、redis的五种数据结构和相关指令之Hash

本节中将介绍Redis支持的主要数据结构,以及相关的常用Redis命令。redis是一种基于键值对(key-value)的内存数据库,redis数据结构可以分为string、hash、list、set、sorted set。

redis的五种数据结构和相关指令之Hash

哈希hash

哈希hash是一个string类型的field和value的映射表,hash特适合用于存储对象,用Hash中的field对应对象的field即可。

每个hash对象有三个属性:key、field和value;每个hash对象有一个key值,每个key可以对应多个field,每个field对应一个value。

比如将关系型数据表转成redis存储:

 

使用hash后的存储方式为:


a、基本命令

 设值:hset key field value

hset user:1 name james         //成功返回1,失败返回0

取值:hget key field

hget user:1 name              //返回james

删值:hdel key field

hdel user:1 age               //返回删除的个数

计算个数:hlen key

hset user:1 name james; hset user:1 age 23; 
hlen user:1               //返回2,user:1有两个属性值

批量设值:

hmset user:2 name james age 23 sex boy //返回OK

批量取值:

hmget user:2 name age sex   //返回三行:james 23 boy

 判断field是否存在:

hexists user:2 name //若存在返回1,不存在返回0

 获取所有field,时间复杂度O(N),慎用:

hkeys user:2            // 返回name age sex三个field

获取user:2所有value,时间复杂度O(N),慎用:

hvals user:2     // 返回james 23 boy

获取user:2所有field与value,时间复杂度O(N),慎用:

hgetall user:2 //name age sex james 23 boy值

增加数值:

hincrby user:2 age 1      //age+1
hincrbyfloat user:2 age 2   //浮点型加2


b、三种方案实现用户信息存储优缺点:

1、string原生:

set user:1:name james;
set user:1:age  23;
set user:1:sex boy;

优点: 简单直观,每个键对应一个值
缺点: 键数过多,占用内存多,用户信息过于分散,不用于生产环境

2、将对象序列化存入redis

set user:1 serialize(userInfo);

优点: 编程简单,若使用序列化合理内存使用率高
缺点: 序列化与反序列化有一定开销,更新属性时需要把userInfo全取出来进行反序列化,更新后再序列化到redis

3、使用hash类型:

hmset user:1 name james age 23 sex boy

优点: 简单直观,使用合理可减少内存空间消耗
缺点: 要控制ziplist与hashtable两种编码转换,且hashtable会消耗更多内存

总结: 对于更新不多的情况下,可以使用序列化,对于VALUE值不大于64字节可以使用hash类型
————————————————
版权声明:本文为CSDN博主「lingengy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/w1lgy/article/details/84376841

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值