Redis -- hash哈希

马行软地易失蹄,人贪安逸易失


 目录

关于Redis的hash

hash命令

hset 

hget

hexists

hdel

hkeys

hvals  

hgetall

hmget

hlen

hsetnx

hash计数

hincrby

hincrbyfloat

小结


关于Redis的hash

        几乎所有的主流编程语言都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数组、映射。在 Redis 中,哈希类型是指值本身又是一个键值对结构,形如 key = "key",value = { {field1, value1 }, ..., {fieldN, valueN } },Redis 键值对和哈希类型二者的关系可以用图 2-15 来表示。

         redis自身本来就是键值对结构了,自身的键值对就是通过hash的方式来组织的。

        到了value这一层,value又可以是很多种类型,其中这节要讲的就是hash类型,同样是hash的形式来表示value。

hash命令

hset 

        设置 hash 中指定的字段(field)的值(value)。

语法:HSET key field value  [field value ...]

        返回值:添加的字段的个数。

        可以添加多个字段,多个字段之间使用空格间隔。

示例

        将一个key设置为hash,然后添加两个属性域:

        想要一个hset设置多个field和value,就可以直接写多个field和value,多个filed和value之间使用空格隔开:

hget

        既然可以设置hash,那么必然也可以查找hash。获取 hash 中指定字段的值。

语法:hget  key  filed

        时间复杂度:O(1)
        返回值:字段对应的值或者 nil。

示例:

        设置一个key的一个域名为field,也可以叫属性名,其值为test

        使用hget获取这个值:


        除了get和set,当然也有exists呀,那么hash的exists就是hexists。


hexists

        判断hash中是否有指定字段

语法:hexists key field

        返回值:1表示存在,0表示不存在

        时间复杂度O(1)

示例

        field1存在于key,所以返回1,field2不存在于key,所以返回0。


        有get,set,eixsts。那么必然也有del,对于hash的del那么就是hdel

hdel

        删除hash中指定key的指定字段。而不是删除key本身。删除key本身是使用del key。

语法:hdel key field  [field ... ]

        可以一次性输入多个field,多个field之间使用空格隔开。

        返回值:返回顺利被删除的field的个数。

示例

        删除一个不存在的field时候,返回0.

        直接del key将会删除整个hash 表。


        学习了hget,你就会发现,我每次都去hget某一个key,而且每一次只能获取一个字段,但是如果我想要获取整个字段集合呢??那么hget就有点力不从心了。所以下面这个命令就是解决这个问题。


hkeys

         把对应hash的key,然后将其key全部列出来。

语法:hkeys key

        时间复杂度:O(N),其中N表示此hash中key的个数。

演示

hvals  

        获取hash key中的所有的value

语法:hvals key

        时间复杂度O(N),N表示field的个数。

        返回值:所有的key对应的value值

示例

        设置三个域:

        获取他们的value:


        虽然有hkeys和hvals,但是所有的key和value都不“同窗”,不会在一个命令中全部显示出来,这个怎么处理?下面的命令就解决了这个问题。


hgetall

        获取hash中所有的值。

语法:hgetall key

        时间复杂度:O(N), N 为 field 的个数。

        返回值:所有的值,他们两两成对出现。

示例


hmget

        一次性获取多个hash key的field。

语法:hmget key field1 field2 ......

        此处返回值为对应的field的值,多个value的顺序是和输入的field顺序相一致。

示例


注意:redis也有hmset,但是hmset的功能hset已经提供,这里不再赘述。

        同时,上述的命令:hvals,hkeys,hgetall,都是 存在一定风险的命令,hash的域太多,执行会消耗较长的时间,从而阻塞redis。redsi提供了一个额外的命令处理这种问题:hscan,敲一次遍历一个,连续敲多次就可以全部遍历完成。


hlen

        获取 hash 中的所有字段的个数。

语法:HLEN key
        返回值:此key中的字段的个数。

示例:

        有如下这个hashkey:

        我们查看其字段个数:

hsetnx

        在字段不存在的情况下,设置 hash 中的字段和值。

语法:HSETNX key field value

        时间复杂度:O(1)。

        返回值:1 表示设置成功,0 表示失败。

示例:

        因为当前的key的fi字段不存在,所以设置成功返回1,如果再次hsetnx key f1就会失败:

hash计数

hincrby

        将 hash 中字段对应的数值添加指定的值。

语法:HINCRBY  key field increment

        返回值为计算之后的结果。

        时间复杂度O(1)

示例

hincrbyfloat

        HINCRBY 的浮点数版本。这里不再赘述。

小结

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/663621.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移动机器人激光SLAM导航(三):Hector SLAM 篇

参考引用 Hector_Mapping ROS-Wiki从零开始搭二维激光SLAM机器人工匠阿杰wpr_simulation 移动机器人激光SLAM导航(文章链接汇总) 1. 基于滤波器的 SLAM 问题 1.1 什么是 SLAM 什么是SLAM SLAM 就是为了构建地图用的,这个地图可以保存下来&…

将word中插入的zotero文献转为latex引用样式

在word中,可以使用zotero插件插入和管理参考文献。 例如: 若需要将这段内容移植到latex,就需要将对应的引用编号用\cite{}替换。手动替换非常麻烦且容易出错。要实现自动转换,可在zotero中定制一种新的引文格式,自动将…

常见的6种软件测试用例设计方法

常见的软件测试用例设计方法,个人认为主要是下面这6种: 流程图法(也叫场景法)等价类划分法边界值分析判定表正交法错误推测法 这6种常见方法中,我分别按照定义、应用场景、使用步骤、案例讲解这4个部分进行讲解。 所…

实习|基于SSM的实习管理系统设计与实现(源码+数据库+文档)

实习管理系统目录 目录 基于SSM的实习管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员功能介绍 (1)管理员登录 (2)实训方向管理 (3)公告信息管理 (4&#xff0…

STM32MP135开发板助力电力行业,IEC61850协议移植笔记

1.概述 IEC61850是变电站自动化系统(SAS)中通信系统和分散能源(DER)管理的国际标准。它通过标准的实现,实现了智能变电站的工程运作标准化。使得智能变电站的工程实施变得规范、统一和透明,在电力和储能系…

(java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~

目录 冒泡排序(BubbleSort): 代码详解: 冒泡排序的优化: 选择排序(SelectSort): 代码详解: 插入排序(InsertSort): 代码详解: 希尔排序(ShellSort): 法一…

Java中的常用API

常用API Object类浅克隆与深克隆 ObjectsObjects中的equals 包装类StringBuilder和StringBufferStringBuilder是可变字符串对象StringBuffer线程安全案例![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/87649c20e6464113a42aee5f16f1ee22.png) StringJoiner Object…

关于ZYZ旋转和XYZ旋转

ZYZ旋转和XYZ旋转 概述1、XYZ旋转2、ZYZ旋转 概述 以下公式默认为右手坐标系;ZYZ通常可以避免死解情况,因此在六轴末端解算时常被用到;参考文章 1、XYZ旋转 XYZ旋转一般是绕固定轴旋转(外旋),旋转矩阵的构成为:RzRy…

软考 系统分析师系列知识点之需求管理(3)

接前一篇文章:软考 系统分析师系列知识点之需求管理(2) 所属章节: 第11章. 软件需求工程 第8节. 需求管理 11.8.4 需求跟踪 根据IEEE的定义,可跟踪性包含两个层面的含义:一个是开发过程的两个或多个产品之…

无广告iOS获取设备UDID 简单方便快捷

ps: 为啥不用蒲公英了,就是因为有广告了,获取个UDID还安装游戏,真恶心?,所以找了新的获取UDID都方法,网页直接获取就可以,不会安装软件。 UDID 是一种 iOS 设备的特殊识别码。除序号之外&…

(1)cpu0简介

一、cpu0介绍 cpu032位架构16位通用寄存器,协处理器和其他特殊寄存器 (1)通用寄存器 全局指针寄存器:"Global Pointer register"(全局指针寄存器)是一个在某些处理器架构中存在的专用寄存器&…

单臂路由实验(思科)

一,实验目的 在路由器的一个接口上通过配置子接口的方式,实现相互隔离的不同vlan之间互通。 二,设备配置 Switch1 Switch>enable 全局模式 Switch#configure terminal 配置模式 Switch(config)#vlan 10 …

【leetcode】20. 有效的括号

有效的括号 题目链接 // 栈结构 typedef char valuetype; typedef struct {valuetype* arr;int top;int capacity; } Stack;void Init(Stack* stack);void Push(Stack* stack, valuetype value); void Pop(Stack* stack);valuetype Top(Stack* stack); int Size(Stack* stack…

嵌入式中C 语言中的三块技术难点

C 语言在嵌入式学习中是必备的知识,甚至大部分操作系统都要围绕 C 语言进行,而其中有三块技术难点,几乎是公认级别的“难啃的硬骨头”。 今天就来带你将这三块硬骨头细细拆解开来,一定让你看明白了。 0x01 指针 指针是公认最难理…

26元/月起!腾讯云一键自动搭建4核16G幻兽帕鲁服务器

腾讯云无需任何配置自动搭建幻兽帕鲁游戏联机服务器,游戏24小时在线,4核16G游戏联机服务器低至26元/月起,新手小白也能一键搭建属于自己的幻兽帕鲁游戏联机服务器! 第一步:购买游戏联机服务器 购买入口:htt…

Django知识随笔

目录 1.如何再ajax中传输post数据? 2.在form表单中使用jquery序列化,input框过多。 1.如何再ajax中传输post数据? 在ajax传递的那个网址,会调用你路由的视图函数,在视图函数上面加一句 csrf_exempt 。写上之后会有提…

Android:RecyclerView跨行跨列的LayoutManager:Spannedgridlayoutmanager

前言: RecyclerView可以使用GridLayoutManager实现跨行,但是不能跨列;瀑布流布局可以跨列但是又不能跨行。原生自带的各个LayoutManager中并没有可以又跨行又能跨列的。网上搜寻了一番,找到了一个亲测可行好用的三方库&#xff1…

DL/T1578-2021电力线路多旋翼无人机巡检系

DL/T1578-2021电力线路多旋翼无人机巡检系 DL/T 1578—2021标准的发布和实施对于架空电力线路的巡检工作具有里程碑式的意义。它不仅填补了多旋翼无人机巡检系统在行业标准方面的空白,还为电力行业提供了一套完整、科学的测试和评估方法。这将有助于提高架空电力线…

使用apifox创建一个Mock Server Api 接口

安装 下载 Apifox - API 文档、调试、Mock、测试一体化协作平台。拥有接口文档管理、接口调试、Mock、自动化测试等功能,接口开发、测试、联调效率,提升 10 倍。最好用的接口文档管理工具,接口自动化测试工具。 创建mock api项目中使用 创建项…

构建LLM辅助生物威胁制造预警系统 人类越发展获取的超能力越大,破坏力越大,威胁越大。我们需要什么样的预警系统?既克服威胁又具有超能力 安全基础

https://openai.com/research/building-an-early-warning-system-for-llm-aided-biological-threat-creation 人类越发展获取的超能力越大,破坏力就越大,威胁越大。 人工智能就是为了赋予人人都能有超能力,而一旦被恶意或无意使用又威胁到人…