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.hqwc.cn/news/448562.html

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

相关文章

动态微信小程序码和开发者工具解析小程序码

一、动态生成微信小程序码 1、方式一 微信官方网站,对已发布的小程序,提供了一个快捷的入口,输入微信小程序的page页面即可。 page页面可以通过右侧开启入口获取 也可以通过开发者工具左下角的页面地址和参数地址那里获取到 二、生成的小…

【Java程序设计】【C00224】基于Springboot+vue的前后端分离的党员信息管理系统(论文)

基于Springbootvue的前后端分离的党员信息管理系统(论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springbootvue的前后端分离的党建信息管理系统 本系统分为用户以及管理员2个角色。 用户模块管理:用户登录、用户注…

追觅科技发布全折叠高速吹风机Pocket

2月2日,追觅科技召开2024新品发布会,一系列年度新品亮相。现场,追觅科技发布了个护重磅新品——追觅Pocket折叠高速吹风机,这也是行业首个全折叠高速吹风机。 创新柔性折叠技术,直卷吹一机全能 追觅Pocket折叠高速吹风…

运维SRE-04 磁盘管理体系

磁盘管理体系详解 磁盘管理系统概述 目标 熟练掌握常用磁盘配置(容量,转速,个数)熟练说出来或写出来: raid级别熟练掌握磁盘基础使用:拿到一块硬盘到可以向硬盘写入数据分区,格式化,挂载熟练掌握: 磁盘空间不足 no space left on device 故障,原因,排查,解决. 磁盘基础内容 …

【算法与数据结构】300、674、LeetCode最长递增子序列 最长连续递增序列

文章目录 一、300、最长递增子序列二、674、最长连续递增序列三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、300、最长递增子序列 思路分析: 第一步,动态数组的含义。 d p [ i ] dp[i] dp[i…

记录element-plus树型表格的bug

问题描述 如果数据的子节点命名时children,就没有任何问题,如果后端数据结构子节点是其他名字,比如thisChildList就有bug const tableData [{id: 1,date: 2016-05-02,name: wangxiaohu,address: No. 189, Grove St, Los Angeles,selectedAble: true,th…

应用层协议 ——— HTTP协议

应用层协议 ——— HTTP协议 HTTP简介认识URL二、登录信息三、服务器地址四、服务器端口号五、带层次的文件路径六、查询字符串七、片段标识符urlencode和urldecodeHTTP协议格式HTTP请求协议格式HTTP的方法HTTP的状态码HTTP常见的HeaderHTTPS VS HTTP对称加密 VS 非对称加密 HT…

python自动化测试框架unittest与pytest的区别

有使用过unittest单元测试框架,再使用pytest单元测试框架,就可以明显感觉到pytest比unittest真的简洁、方便很多。 unittest与pytest的区别: 主要从用例编写规则、用例的前置和后置、参数化、断言、用例执行、失败重运行和报告这几个方面比…

闲聊电脑(4)硬盘分区

夜深人静,万籁俱寂,老郭趴在电脑桌上打盹,桌子上的小黄鸭和桌子旁的冰箱又开始窃窃私语…… 小黄鸭:冰箱大哥,上次你说的那个“分区”和“格式化”是什么意思? 冰箱:分区么,就是分…

总结Java中的双列集合

目录 双列集合 双列集合的特点 集合体系结构 Map的常见API Map的遍历方式 键找值 键值对 Lambda表达式 底层源码: HashMap HashMap的特点 案例 LinkedHashMap TreeMap TreeMap基本应用 需求1: 需求2: 案例 可变参数 Collections Collections常用…

day03.函数与指针(含new与delete关键字)

一.指针 #include<iostream> using namespace std; #define pi 3.14159//定义常量int main(){cout<<pi<<endl;int a10;int *pNULL;//定义指针p&a;cout<<"a的地址为&#xff1a;"<<p<<endl;cout<<"a"<&l…

大学与社会的区别是什么?

大家好&#xff0c;我是秋意零。 在回答这个问题前&#xff0c;你可能也会有两个疑问。 ● 为什么在社会中不能像在学校一样自律&#xff1f; ● 如何调整适应社会这个新环境呢&#xff1f; 一、为什么在社会中不能像在学校一样自律&#xff1f; 为什么在社会中不能像在学…