Redis中的Hash相关命令总结 redis的hash算法用的是啥?
wptr33 2024-12-25 16:02 34 浏览
作者 / 以码为梯
排版 / 以码为梯
文章字数 / 1847
阅读时长 / 8分钟
希望大家可以从本文有所收获[凝视]
Redis哈希数据类型是字符串字段和字符串值之间的映射,该数据类型多用于表示对象。在Redis中每个哈希表最多能存放2^32-1个字段值对。
下面我们主要从新增字段/值对、删除字段/值对、修改字段对应的值、查询字段/值对这四个方面来介绍相关的命令。
新增字段/值对
Redis中HSET、HMSET、HSETNX都可以用来新增键值对。
从Redis 4.0.0开始HSET也实现了可变参数并允许多个字段/值对,效果跟HMSET一样,因此HMSET在Redis 4.0.0后被视为过期的。
HSET、HMSET可以接收多个字段/值对,哈希表中已经存在的字段对应的值会被覆盖。对于返回结果,HSET执行成功返回插入的字段/值对的个数,HMSET执行成功返回字符串OK。两个命令的语法如下:
HMSET key field value [field value ...]
HSET key field value [field value ...]命令HSETNX只能接收一个字段/值对,且该命令对哈希表中已经存在字段对应的值不会覆盖也不会有其他任何影响(NX可以理解为NOT EXISTS)。该命令在成功新增一个字段/值对时会返回1,在字段已经存在于哈希表的情况,返回0。命令的语法如下:
HSETNX key field value删除字段/值对
Redis提供了HDEL命令来删除哈希表中指定字段的的字段/值对,该命令可以一次性删除多个字段/值对。命令的语法如下:
HDEL key field [field ...]修改字段对应的值
Redis中提供了HINCRBY、HINCRBYFLOAT两个命令对字段对应的值进行增/减操作,命令的语法如下。
HINCRBY key field increment
HINCRBYFLOAT key field increment对于命令HINCRBY,在值不符合64位带符号的整数时会报错。
对于HINCRBYFLOAT,在值不是字符串以及字符串值和指定的增量不能转换为双精度浮点数时会报错。
对于increment参数,在increment为正数时执行加法,在increment为负数时执行减法,两个命令在执行成功之后,返回增/减之后的值。
查询字段/值对
Redis提供了较多查询哈希表相关信息的命令,我们一一介绍
- 通过HGETALL命令返回哈希表中所有的字段/值对
该命令返回哈希表中所有的字段/值对,命令的语法如下:
HGETALL key- 通过HEXISTS命令查询字段/值对是否在哈希表中
字段存在于哈希表中时返回1,不存在时返回0
HEXISTS key field- 通过HGET/HMGET命令获取字段对应的值
HGET命令返回的是字符串或(nil)(字段存在于键对应的哈希表中返回对应的值,否则返回(nil))。
HMGET命令返回的是字段对应的值组成的数组。对于数组中的值,如果字段存在于哈希表中则数组中的值为字段对应的值,否则为(nil)。
HGET key field
HGET key field [field...]- 通过HKEYS命令获取哈希表中所有字段
命令返回哈希表中所有字段构成的数组,键不存在的情况返回空数组。
HKEYS key- 通过HVALS命令获取哈希表中所有的值
命令返回哈希表中所有字段对应的值构成的数组,在键不存在的情况下返回空数组。
KVALS key- 通过HLEN命令获取哈希表中字段/值对的个数
命令返回键对应的哈希表中字段/值对的个数,在键不存在时返回0。
HLEN key- 通过HSTRLEN命令获取哈希表中字段对应的值的长度
命令返回字段对应的值的长度,在字段不存在或键不存在时返回0。
HSTRLEN key field- 通过HRANDFIELD命令从哈希表中随机获取字段或字段/值对
命令的语法如下:
HRANDFIELD key [count [WITHVALUES]]在命令只带有key一个参数时作用是从哈希表中获取任意一个字段。
在命令带有count参数且count>0时返回的结果有下面的特点:
返回的字段是不重复的。
返回的字段个数不超过哈希表中字段个数(如果count值大于最大字段个数只返回全部字段)。
返回的字段的顺序并不是真正的随机的。
在命令带有count参数且count的值小于0时返回的结果有下面的特点:
返回的字段是可以重复的。
返回的字段的个数是count的绝对值个,字段个数可以大于哈希表中有的字段个数。
返回的字段的顺序是真正随机的。
- 通过HSCAN命令以游标的方式获取哈希表元素
在哈希表中字段/值对比较多的情况,如果使用HGETALL命令一次性取出所有的字段/值,有可能会阻塞服务器。但是我们可以通过HSCAN命令以迭代的方式,一次性获取一小部分内容直到将所有的元素取出为止,HSCAN命令的语法如下:
HSCAN key cursor [MATCH pattern] [COUNT count]该命令返回的是两个值组成的数组,第一个值表示下一次调用中使用的新游标(当这个值为0时,说明已经遍历结束),第二个表示本次调用获取的元素列表。
HSCAN是Redis中SCAN系列命令中的一个针对Hash的命令。这里只是讲解了其简单的用法,其实这是一个比较复杂的命令,后续会单独写一篇文章来讲解这个命令。
到这里这篇关于Redis中Hash相关的命令就结束了,希望对大家能有些许帮助。
点个赞再走呗[惊喜][惊喜][惊喜]
相关推荐
- oracle数据导入导出_oracle数据导入导出工具
-
关于oracle的数据导入导出,这个功能的使用场景,一般是换服务环境,把原先的oracle数据导入到另外一台oracle数据库,或者导出备份使用。只不过oracle的导入导出命令不好记忆,稍稍有点复杂...
- 继续学习Python中的while true/break语句
-
上次讲到if语句的用法,大家在微信公众号问了小编很多问题,那么小编在这几种解决一下,1.else和elif是子模块,不能单独使用2.一个if语句中可以包括很多个elif语句,但结尾只能有一个...
- python continue和break的区别_python中break语句和continue语句的区别
-
python中循环语句经常会使用continue和break,那么这2者的区别是?continue是跳出本次循环,进行下一次循环;break是跳出整个循环;例如:...
- 简单学Python——关键字6——break和continue
-
Python退出循环,有break语句和continue语句两种实现方式。break语句和continue语句的区别:break语句作用是终止循环。continue语句作用是跳出本轮循环,继续下一次循...
- 2-1,0基础学Python之 break退出循环、 continue继续循环 多重循
-
用for循环或者while循环时,如果要在循环体内直接退出循环,可以使用break语句。比如计算1至100的整数和,我们用while来实现:sum=0x=1whileTrue...
- Python 中 break 和 continue 傻傻分不清
-
大家好啊,我是大田。...
- python中的流程控制语句:continue、break 和 return使用方法
-
Python中,continue、break和return是控制流程的关键语句,用于在循环或函数中提前退出或跳过某些操作。它们的用途和区别如下:1.continue(跳过当前循环的剩余部分,进...
- L017:continue和break - 教程文案
-
continue和break在Python中,continue和break是用于控制循环(如for和while)执行流程的关键字,它们的作用如下:1.continue:跳过当前迭代,...
- 作为前端开发者,你都经历过怎样的面试?
-
已经裸辞1个月了,最近开始投简历找工作,遇到各种各样的面试,今天分享一下。其实在职的时候也做过面试官,面试官时,感觉自己问的问题很难区分候选人的能力,最好的办法就是看看候选人的github上的代码仓库...
- 面试被问 const 是否不可变?这样回答才显功底
-
作为前端开发者,我在学习ES6特性时,总被const的"善变"搞得一头雾水——为什么用const声明的数组还能push元素?为什么基本类型赋值就会报错?直到翻遍MDN文档、对着内存图反...
- 2023金九银十必看前端面试题!2w字精品!
-
导文2023金九银十必看前端面试题!金九银十黄金期来了想要跳槽的小伙伴快来看啊CSS1.请解释CSS的盒模型是什么,并描述其组成部分。...
- 前端面试总结_前端面试题整理
-
记得当时大二的时候,看到实验室的学长学姐忙于各种春招,有些收获了大厂offer,有些还在苦苦面试,其实那时候的心里还蛮忐忑的,不知道自己大三的时候会是什么样的一个水平,所以从19年的寒假放完,大二下学...
- 由浅入深,66条JavaScript面试知识点(七)
-
作者:JakeZhang转发链接:https://juejin.im/post/5ef8377f6fb9a07e693a6061目录...
- 2024前端面试真题之—VUE篇_前端面试题vue2020及答案
-
添加图片注释,不超过140字(可选)...
- 今年最常见的前端面试题,你会做几道?
-
在面试或招聘前端开发人员时,期望、现实和需求之间总是存在着巨大差距。面试其实是一个交流想法的地方,挑战人们的思考方式,并客观地分析给定的问题。可以通过面试了解人们如何做出决策,了解一个人对技术和解决问...
- 一周热门
- 最近发表
-
- oracle数据导入导出_oracle数据导入导出工具
- 继续学习Python中的while true/break语句
- python continue和break的区别_python中break语句和continue语句的区别
- 简单学Python——关键字6——break和continue
- 2-1,0基础学Python之 break退出循环、 continue继续循环 多重循
- Python 中 break 和 continue 傻傻分不清
- python中的流程控制语句:continue、break 和 return使用方法
- L017:continue和break - 教程文案
- 作为前端开发者,你都经历过怎样的面试?
- 面试被问 const 是否不可变?这样回答才显功底
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)
