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
Redis系列三、redis的五种数据结构和相关指令之Hash相关推荐
- Redis系列五、redis的五种数据结构和相关指令之Set
本节中将介绍Redis支持的主要数据结构中的set,以及相关的常用Redis命令. redis的五种数据结构和相关指令之set 集合set 集合(set)与列表类似,都是用来保存多个字符串,但集合与列 ...
- Redis系列六、redis的五种数据结构和相关指令之Sorted Set
本节中将介绍Redis支持的主要数据结构,以及相关的常用Redis命令.redis是一种基于键值对(key-value)的内存数据库,redis数据结构可以分为string.hash.list.set ...
- Redis系列四、redis的五种数据结构和相关指令之List
本节中将介绍Redis支持的主要数据结构,以及相关的常用Redis命令.redis是一种基于键值对(key-value)的内存数据库,redis数据结构可以分为string.hash.list.set ...
- Redis系列二、redis的五种数据结构和相关指令之String
redis是一种基于键值对(key-value)的内存数据库,redis数据结构可以分为string.hash.list.set.sorted set.本节中将介绍Redis支持的主要数据结构中的st ...
- 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解
前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...
- Redis系列(三)-Redis哨兵模式(一篇文章让你全面的了解reids哨兵模式)
哨兵模式概述 举一个通俗易懂的例子 有一个皇帝(master)他有2个儿子,大儿子(slave1)和小儿子(slave2).有一天皇帝离家出走了皇位空虚(master宕机),大儿子和小儿子为了争夺皇位 ...
- Redis系列(三)-Redis发布订阅及客户端编程
阅读目录 发布订阅模型 Redis中的发布订阅 客户端编程示例 0.3版本Hredis 发布订阅模型 在应用级其作用是为了减少依赖关系,通常也叫观察者模式.主要是把耦合点单独抽离出来作为第三方,隔离易 ...
- 深入剖析Redis系列(七) - Redis数据结构之列表
前言 列表(list)类型是用来存储多个 有序 的 字符串.在 Redis 中,可以对列表的 两端 进行 插入(push)和 弹出(pop)操作,还可以获取 指定范围 的 元素列表.获取 指定索引下标 ...
- 硬核资源!Redis 五种数据结构以及三种高级数据结构解析(详解)
上一篇分享的是<深入理解JVM>,这篇给大家分享<Redis 五种数据结构以及三种高级数据结构解析>. 前言 在 Redis 最重要最基础就属 它丰富的数据结构了,Redis ...
最新文章
- mysql查询转json数据库_数据库大师成长日记:将数据库SQL查询结果直接转为JSON...
- iOS15字符串格式化缺0补0的写法
- [js高手之路] html5 canvas系列教程 - 线条样式(lineWidth,lineCap,lineJoin,setLineDash)
- Android二维码之创建
- HTML5高层模块不应该依赖于底层模块
- 谷歌Pixel 6系列手机发布会官宣定档 10月19日发布
- mysql 重置自增长_怎么重置mysql的自增列AUTO_INCREMENT初时值
- Vue中watch监听数据变化以及watch中各属性详解
- Median Filtering in Constant time 算法源码生成DLL
- artcam 9.0英文版本下载_魔兽9.0暗影国度测试服前瞻 可能存在的仙狐坐骑详解
- matlab色差,科学网—实用图片处理技巧(1)---MATLAB学习笔记 - 冯竟超的博文
- android 怎么反编译,Android反编译工具的用法
- 智和网管平台SugarNMS网络安全解决方案
- 树莓派4B配置远程桌面软件 Teamviewer(解决报错)
- JAVA实习生/应届生面试笔试题(一)
- U盘删除附带的CD驱动器内的数据
- AI技术押人工智能考试题
- AIX 存储管理 LV PV VG PP
- 沧小海读《图解TCP/IP》笔记——第六章 TCP与UDP
- 电销行业竞争与日俱增,西安外呼系统如何改善?