本节中将介绍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

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

  1. Redis系列五、redis的五种数据结构和相关指令之Set

    本节中将介绍Redis支持的主要数据结构中的set,以及相关的常用Redis命令. redis的五种数据结构和相关指令之set 集合set 集合(set)与列表类似,都是用来保存多个字符串,但集合与列 ...

  2. Redis系列六、redis的五种数据结构和相关指令之Sorted Set

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

  3. Redis系列四、redis的五种数据结构和相关指令之List

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

  4. Redis系列二、redis的五种数据结构和相关指令之String

    redis是一种基于键值对(key-value)的内存数据库,redis数据结构可以分为string.hash.list.set.sorted set.本节中将介绍Redis支持的主要数据结构中的st ...

  5. 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解

    前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

  6. Redis系列(三)-Redis哨兵模式(一篇文章让你全面的了解reids哨兵模式)

    哨兵模式概述 举一个通俗易懂的例子 有一个皇帝(master)他有2个儿子,大儿子(slave1)和小儿子(slave2).有一天皇帝离家出走了皇位空虚(master宕机),大儿子和小儿子为了争夺皇位 ...

  7. Redis系列(三)-Redis发布订阅及客户端编程

    阅读目录 发布订阅模型 Redis中的发布订阅 客户端编程示例 0.3版本Hredis 发布订阅模型 在应用级其作用是为了减少依赖关系,通常也叫观察者模式.主要是把耦合点单独抽离出来作为第三方,隔离易 ...

  8. 深入剖析Redis系列(七) - Redis数据结构之列表

    前言 列表(list)类型是用来存储多个 有序 的 字符串.在 Redis 中,可以对列表的 两端 进行 插入(push)和 弹出(pop)操作,还可以获取 指定范围 的 元素列表.获取 指定索引下标 ...

  9. 硬核资源!Redis 五种数据结构以及三种高级数据结构解析(详解)

    上一篇分享的是<深入理解JVM>,这篇给大家分享<Redis 五种数据结构以及三种高级数据结构解析>. 前言 在 Redis 最重要最基础就属 它丰富的数据结构了,Redis ...

最新文章

  1. mysql查询转json数据库_数据库大师成长日记:将数据库SQL查询结果直接转为JSON...
  2. iOS15字符串格式化缺0补0的写法
  3. [js高手之路] html5 canvas系列教程 - 线条样式(lineWidth,lineCap,lineJoin,setLineDash)
  4. Android二维码之创建
  5. HTML5高层模块不应该依赖于底层模块
  6. 谷歌Pixel 6系列手机发布会官宣定档 10月19日发布
  7. mysql 重置自增长_怎么重置mysql的自增列AUTO_INCREMENT初时值
  8. Vue中watch监听数据变化以及watch中各属性详解
  9. Median Filtering in Constant time 算法源码生成DLL
  10. artcam 9.0英文版本下载_魔兽9.0暗影国度测试服前瞻 可能存在的仙狐坐骑详解
  11. matlab色差,科学网—实用图片处理技巧(1)---MATLAB学习笔记 - 冯竟超的博文
  12. android 怎么反编译,Android反编译工具的用法
  13. 智和网管平台SugarNMS网络安全解决方案
  14. 树莓派4B配置远程桌面软件 Teamviewer(解决报错)
  15. JAVA实习生/应届生面试笔试题(一)
  16. U盘删除附带的CD驱动器内的数据
  17. AI技术押人工智能考试题
  18. AIX 存储管理 LV PV VG PP
  19. 沧小海读《图解TCP/IP》笔记——第六章 TCP与UDP
  20. 电销行业竞争与日俱增,西安外呼系统如何改善?

热门文章

  1. 论文浅尝 | 基于知识图谱的子图匹配回答自然语言问题
  2. 智能工单处理,达观数据助力运营商实现业务流程智能化改造
  3. bzoj 1596 电话网络
  4. Broadcast简单使用
  5. CentOS赋予一个普通用户root权限
  6. Linq的优点以及注意事项
  7. input框自动填充内容背景颜色为黄色解决方法
  8. 3月任务--target
  9. 虚拟机中Linux安装Tools
  10. 字体大宝库:设计师必备的专业免费英文字体