一、概述:

我们可以将Redis中的Hashes类型看成具有String Key和String Value的map容器。所以该类型非常适合于存储值对象的信息。如Username、Password和Age等。如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。(类似于Java的HashMap)

二、相关命令列表:

命令原型    时间复杂度    命令描述    返回值
HSET key field value    O(1)    为指定的Key设定Field/Value对,如果Key不存在,该命令将创建新Key以参数中的Field/Value对,如果参数中的Field在该Key中已经存在,则用新值覆盖其原有值。     1表示新的Field被设置了新值,0表示Field已经存在,用新值覆盖原有值。

HGET key field     O(1)     返回指定Key中指定Field的关联值。    返回参数中Field的关联值,如果参数中的Key或Field不存,返回nil。

HEXISTS key field     O(1)     判断指定Key中的指定Field是否存在。    1表示存在,0表示参数中的Field或Key不存在。

HLEN key     O(1)    获取该Key所包含的Field的数量。    返回Key包含的Field数量,如果Key不存在,返回0。

HDEL key field [field ...]     O(N)    时间复杂度中的N表示参数中待删除的字段数量。从指定Key的Hashes Value中删除参数中指定的多个字段,如果不存在的字段将被忽略。如果Key不存在,则将其视为空Hashes,并返回0.    实际删除的Field数量。

HSETNX key field value    O(1)    只有当参数中的Key或Field不存在的情况下,为指定的Key设定Field/Value对,否则该命令不会进行任何操作。     1表示新的Field被设置了新值,0表示Key或Field已经存在,该命令没有进行任何操作。

HINCRBY key field increment     O(1)    增加指定Key中指定Field关联的Value的值。如果Key或Field不存在,该命令将会创建一个新Key或新Field,并将其关联的Value初始化为0,之后再指定数字增加的操作。该命令支持的数字是64位有符号整型,即increment可以负数。     返回运算后的值。

HGETALL key    O(N)     时间复杂度中的N表示Key包含的Field数量。获取该键包含的所有Field/Value。其返回格式为一个Field、一个Value,并以此类推。    Field/Value的列表。

HKEYS key     O(N)    时间复杂度中的N表示Key包含的Field数量。返回指定Key的所有Fields名。    Field的列表。

HVALS key     O(N)    时间复杂度中的N表示Key包含的Field数量。返回指定Key的所有Values名。     Value的列表。

HMGET key field [field ...]     O(N)     时间复杂度中的N表示请求的Field数量。获取和参数中指定Fields关联的一组Values。如果请求的Field不存在,其值返回nil。如果Key不存在,该命令将其视为空Hash,因此返回一组nil。    返回和请求Fields关联的一组Values,其返回顺序等同于Fields的请求顺序。

HMSET key field value [field value ...]    O(N)    时间复杂度中的N表示被设置的Field数量。逐对依次设置参数中给出的Field/Value对。如果其中某个Field已经存在,则用新值覆盖原有值。如果Key不存在,则创建新Key,同时设定参数中的Field/Value。

三、命令示例:

1. HSET/HGET/HDEL/HEXISTS/HLEN/HSETNX:(设置值/获取值/删除键值/判断是否存在键/返回键数量/hash中键值不存在才设置值)

   #在Shell命令行启动Redis客户端程序/> redis-cli#给键值为myhash的键设置字段为field1,值为stephen。redis 127.0.0.1:6379> hset myhash field1 "stephen"(integer) 1#获取键值为myhash,字段为field1的值。redis 127.0.0.1:6379> hget myhash field1"stephen"#myhash键中不存在field2字段,因此返回nil。redis 127.0.0.1:6379> hget myhash field2(nil)#给myhash关联的Hashes值添加一个新的字段field2,其值为liu。redis 127.0.0.1:6379> hset myhash field2 "liu"(integer) 1#获取myhash键的字段数量。redis 127.0.0.1:6379> hlen myhash(integer) 2#判断myhash键中是否存在字段名为field1的字段,由于存在,返回值为1。redis 127.0.0.1:6379> hexists myhash field1(integer) 1#删除myhash键中字段名为field1的字段,删除成功返回1。redis 127.0.0.1:6379> hdel myhash field1(integer) 1#再次删除myhash键中字段名为field1的字段,由于上一条命令已经将其删除,因为没有删除,返回0。redis 127.0.0.1:6379> hdel myhash field1(integer) 0#判断myhash键中是否存在field1字段,由于上一条命令已经将其删除,因为返回0。redis 127.0.0.1:6379> hexists myhash field1(integer) 0#通过hsetnx命令给myhash添加新字段field1,其值为stephen,因为该字段已经被删除,所以该命令添加成功并返回1。redis 127.0.0.1:6379> hsetnx myhash field1 stephen(integer) 1#由于myhash的field1字段已经通过上一条命令添加成功,因为本条命令不做任何操作后返回0。redis 127.0.0.1:6379> hsetnx myhash field1 stephen(integer) 0

2. HINCRBY:(增加值)

    #删除该键,便于后面示例的测试。redis 127.0.0.1:6379> del myhash(integer) 1#准备测试数据,该myhash的field字段设定值1。redis 127.0.0.1:6379> hset myhash field 5(integer) 1#给myhash的field字段的值加1,返回加后的结果。redis 127.0.0.1:6379> hincrby myhash field 1(integer) 6#给myhash的field字段的值加-1,返回加后的结果。redis 127.0.0.1:6379> hincrby myhash field -1(integer) 5#给myhash的field字段的值加-10,返回加后的结果。redis 127.0.0.1:6379> hincrby myhash field -10(integer) -5

3. HGETALL/HKEYS/HVALS/HMGET/HMSET:(获取所有的键与值/获取所有的键/获取所有的值/设置多个键值/获取多个键对应的值)

    #删除该键,便于后面示例测试。redis 127.0.0.1:6379> del myhash(integer) 1#为该键myhash,一次性设置多个字段,分别是field1 = "hello", field2 = "world"。redis 127.0.0.1:6379> hmset myhash field1 "hello" field2 "world"OK#获取myhash键的多个字段,其中field3并不存在,因为在返回结果中与该字段对应的值为nil。redis 127.0.0.1:6379> hmget myhash field1 field2 field31) "hello"2) "world"3) (nil)#返回myhash键的所有字段及其值,从结果中可以看出,他们是逐对列出的。redis 127.0.0.1:6379> hgetall myhash1) "field1"2) "hello"3) "field2"4) "world"#仅获取myhash键中所有字段的名字。redis 127.0.0.1:6379> hkeys myhash1) "field1"2) "field2"#仅获取myhash键中所有字段的值。redis 127.0.0.1:6379> hvals myhash1) "hello"2) "world"

hash存储结构【六】相关推荐

  1. Berkeley DB的数据存储结构——哈希表(Hash Table)、B树(BTree)、队列(Queue)、记录号(Recno)...

    Berkeley DB的数据存储结构 BDB支持四种数据存储结构及相应算法,官方称为访问方法(Access Method),分别是哈希表(Hash Table).B树(BTree).队列(Queue) ...

  2. Redis存储结构体信息,选hash还是string?

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/u010145219/article/details/99427693 在讲到使用hash还是string存储的选择前,先了解R ...

  3. 数据结构第六篇——顺序存储结构与链式存储结构的特点

    ♥注:未经博主同意,不得转载. 两者特点: 顺序表的特点是逻辑上相邻的数据元素,物理存储位置也相邻,并且,顺序表的存储空间需要预先分配. 它的优点: (1)方法简单,各种高级语言中都有数组,容易实现. ...

  4. 不同存储结构的文件磁盘io操作次数_MySQL InnoDB存储引擎

    第1章 MySQL体系结构和存储引擎 1.1数据库和实例 数据库:物理操作系统文件或其他形式文件类型的集合.实例:MySQL数据库由后台线程以及一个共享内存区组成.共享内存可以被运行 的后台线程所共享 ...

  5. Redis底部的几种存储结构(sds、dict、ziplist、intset、skiplist)

    首先本文参考的是这个系列的文章: https://mp.weixin.qq.com/s?__biz=MzA4NTg1MjM0Mg==&mid=509777776&idx=1&s ...

  6. Redis 利用Hash存储节约内存

    redis系列文章目录 Redis 利用Hash存储节约内存 使用spring-data-redis实现incr自增 Redis学习笔记(九)redis实现时时直播列表缓存,支持分页[热点数据存储] ...

  7. 存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储

    存储结构分四类:顺序存储.链接存储.索引存储 和 散列存储. 顺序结构和链接结构适用在内存结构中. 顺序表每个单元都是按物理顺序排列的,如果你想访问那个单元你可以根据提供的指针等直接访问到需要的东西, ...

  8. Java实现队列 链式存储结构

    2019独角兽企业重金招聘Python工程师标准>>> 队列的链式存储结构 示例代码如下, package hash;/*** Created with IntelliJ IDEA. ...

  9. Oracle物理存储结构--文件

    原文地址:[基础]Oracle物理存储结构--文件作者:诗意方式 1 数据文件 3.查询数据文件参数 要将数据文件置为脱机状态,可以通过下列语句实现,如将SCOTT对象的数据文件置为脱机状态: SQL ...

最新文章

  1. 深度报告:芯片设计EDA 2.0时代,三大路径搞定六大挑战
  2. Base64编码和解码
  3. HTML5学习笔记(十四):变量作用域
  4. View scrolly 正负问题
  5. html标签article,html标签中section与article 区别
  6. 如何在面试中介绍自己的项目经验,很重要!
  7. lazada食品类目如何做好运营,来提升店铺销量?
  8. 数据结构——基于字符串模式匹配算法的病毒感染检测
  9. Luogu P1122 最大子树和 树形DP
  10. SQL Server中的TempDB管理——TempDB基本知识(为什么需要版本存储区)
  11. [转]Java实现定时任务的三种方法
  12. io流之转换流InputStreamReader、OutputStreamWriter
  13. 第六次人口普查数据分析
  14. 苹果手表GPS和蜂窝有什么区别
  15. vue将图片保存到相册_Vue保存当前页面为图片
  16. c语言航标知识点,书摘:迷惘时的航标——“人生哲学”
  17. c java gs_Java基础-gs(垃圾回收)
  18. 美团2020后台校招题目--美团骑手包裹区间分组
  19. BGP路径属性与选路原则
  20. 单片机介绍与内部结构

热门文章

  1. 部署Linux单机kafka踩坑
  2. 原生js实现浏览器全屏和退出全屏
  3. 【加密算法】Base64
  4. 人人开源之代码生成器(renren-generator)
  5. 硬质合金销售真的有那么难么?
  6. springboot初始篇(一)
  7. 汇编语言(王爽 第三版)检测点
  8. 使用JAVA爬取网页图片
  9. 微信小程序 全局共享数据
  10. oracle查询报错clb,Oracle RAC 负载均衡与故障转移(三)