当前位置: 首页 > news >正文

Redis 哈希表操作实战(全)

目录

HSET 添加

HSETNX 添加

HMSET 批量添加

HGET 获取元素

HGETALL 获取所有

HMGET 批量查询

HEXISTS 判断是否存在

HINCRBY 增加整数

HINCRBYFLOAT 添加浮点数

HLEN 查Field数量

HKEYS 查所有Field

HVALS 查所有Field值

HSCAN 迭代

HDEL 删除Field


HSET 添加

HSET key field value:将哈希表 key 中的域 field 的值设为 value。

  • key不存在,创建新的哈希表并hset操作。
  • key存在,覆盖旧值。
127.0.0.1:6379> flushdb
OK# field不存在,hset成功返回 1
127.0.0.1:6379> hset person name 'cxian'
(integer) 1
127.0.0.1:6379> hset person age '22'
(integer) 1# field已存在并覆盖值,hset成功返回 0
127.0.0.1:6379> hset person age '25'
(integer) 0
127.0.0.1:6379> set name 100
OK# 对已存在的key执行hset报错
127.0.0.1:6379> hset name high 1.75
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复试度为O(1)。

返回值:

  • 返回1:field不存在并值设置成功。
  • 返回0:field已存在并覆盖旧值成功。
  • 报错:key为类型。

HSETNX 添加

HSETNX key field value:将哈希表 key 中的域 field 的值设置为 value。

  • 若field已存在,该操作无效。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> hsetnx person age 10
(integer) 1# age已存在
127.0.0.1:6379> hsetnx person age 12
(integer) 0

时间复杂度O(1)。

设置成功返回1,field已存在则操作不成功返回0。

HMSET 批量添加

HMSET key field value [field value ...]:同时将多个 field-value (域-值)对设置到哈希表 key 中。

  • 此命令会覆盖哈希表中已存在的域。
  • 如果 key 不存在,一个空哈希表被创建并执行 HMSET 操作。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> hmset person age 12 name cxian
OK
127.0.0.1:6379> hmget person age name
1) "12"
2) "cxian"

时间复杂度O(N),N为field-value的数量。

执行成功返回OK,当key不是hash表类型时报错。

HGET 获取元素

HGET key field:返回哈希表 key 中给定域 field 的值。

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> hset person age 88
(integer) 1
127.0.0.1:6379> hget person age
"88"# key不存在或field不存在
127.0.0.1:6379> hget person1 age
(nil)
127.0.0.1:6379> hget person age1
(nil)

时间复杂度O(1)。

返回给定域的值。

  • key不存在或field不存在,返回nil。

HGETALL 获取所有

HGETALL key:返回哈希表 key 中,所有的域和值。

  • 返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> hset person age 88
(integer) 1
127.0.0.1:6379> hget person age
"88"
127.0.0.1:6379> hset person name cxian
(integer) 1
127.0.0.1:6379> hgetall person
1) "age"       # field
2) "88"        # value
3) "name"
4) "cxian"# key不存在
127.0.0.1:6379> hgetall person1
(empty array)

时间复杂度O(N),N为哈希表的大小。

以列表形式返回哈希表的域和域的值。

  • 若key不存在返回空列表。

HMGET 批量查询

HMGET key field [field ...]:返回哈希表 key 中,一个或多个给定域的值。

  • 域不存在于哈希表,那么返回一个 nil 值。
  • 若key不存在,列表返回对应field数量的nil值。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> hset person age 88
(integer) 1
127.0.0.1:6379> hget person age
"88"127.0.0.1:6379> hmget person age name address
1) "88"
2) "cxian"
3) (nil)# key不存在
127.0.0.1:6379> hmget person1 age name
1) (nil)
2) (nil)

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

返回一个包含多个给定域的关联值的表。

  • 表值的排列顺序和给定域参数的请求顺序一样。

HEXISTS 判断是否存在

HEXISTS key field:查看哈希表 key 中,给定域 field 是否存在。

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> hset person age 88127.0.0.1:6379> hexists person age
(integer) 1# 不存在field或不存在的key
127.0.0.1:6379> hexists person age1
(integer) 0
127.0.0.1:6379> hexists person1 age
(integer) 0

时间复杂度为O(1)。如果key和field都存在返回1,否则返回0。

HINCRBY 增加整数

HINCRBY key field increment:为哈希表 key 中的域 field 的值加上增量 increment。

  • 若increment为负数相当于相减。
  • 若key或field不存在,创建(默认值为0)并执行hincrby命令。
  • 若field对应值不为数字,则报错。
  • 本操作的值被限制在 64 位(bit)有符号数字表示之内。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
(empty array)# key和field不存在
127.0.0.1:6379> hincrby person age 22
(integer) 22
127.0.0.1:6379> hget person age
"22"# increment为负数
127.0.0.1:6379> hincrby person age -10
(integer) 12
127.0.0.1:6379> hget person age
"12"
127.0.0.1:6379> 
127.0.0.1:6379> hset person name cxian
(integer) 1# field对应值不为数字
127.0.0.1:6379> hincrby person name 12
(error) ERR hash value is not an integer

时间复杂度O(1)。

返回执行hincrby之后field对应的值。

HINCRBYFLOAT 添加浮点数

HINCRBYFLOAT key field increment

  • 与HINCRBY key field increment相似。
  • 不同点是HINCRBYFLOAT的increment必须是双精度浮点数且可以用指数符号形式表示(如2.0e7 、 3e5 、 90e-2等)。
127.0.0.1:6379> hincrbyfloat person age 23.8
"35.8"
127.0.0.1:6379> hincrbyfloat person age -8.9
"26.9"

HLEN 查Field数量

HLEN key:返回哈希表 key 中域的数量。

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> hmset person age 23 name cxian
OK
127.0.0.1:6379> hlen person
(integer) 2

时间复杂度O(1)。

返回哈希表中field的数量。

  • key不存在时返回0。

HKEYS 查所有Field

HKEYS key:返回哈希表 key 中的所有field。

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> hmset person age 23 name cxian
OK
127.0.0.1:6379> hlen person
(integer) 2
127.0.0.1:6379> hkeys person
1) "age"
2) "name"# key不存在
127.0.0.1:6379> hkeys person1
(empty array)

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

一个包含哈希表中所有域的表。

  • 当key不存在时返回空表。

HVALS 查所有Field值

HVALS key:返回哈希表 key 中所有域的值。

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> hmset person age 23 name cxian
OK127.0.0.1:6379> hvals person
1) "23"
2) "cxian"# key不存在
127.0.0.1:6379> hvals person1
(empty array)
127.0.0.1:6379> 

时间复杂度为O(N),N为field数量。

返回一个包含哈希表中所有值的表。

  • 当key不存在时返回空表。

HSCAN 迭代

HSCAN key cursor [MATCH pattern] [COUNT count]:迭代哈希键中的键值对。

  • 详见SCAN命令操作实战。

HDEL 删除Field

HDEL key field [field ...]:删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。

127.0.0.1:6379> hgetall person
1) "age"
2) "23"
3) "name"
4) "cxian"
127.0.0.1:6379> hdel person age
(integer) 1# field不存在 或 key不存在
127.0.0.1:6379> hdel person age1
(integer) 0127.0.0.1:6379> hgetall person
1) "name"
2) "cxian"

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

返回被移除的field的数量。

相关文章:

Redis 哈希表操作实战(全)

目录 HSET 添加 HSETNX 添加 HMSET 批量添加 HGET 获取元素 HGETALL 获取所有 HMGET 批量查询 HEXISTS 判断是否存在 HINCRBY 增加整数 HINCRBYFLOAT 添加浮点数 HLEN 查Field数量 HKEYS 查所有Field HVALS 查所有Field值 HSCAN 迭代 HDEL 删除Field HSET 添加 …...

element table合并行或列 span-method

首先来看下官网上如何写的 <template><div><el-table:data"tableData":span-method"objectSpanMethod"borderstyle"width: 100%; margin-top: 20px"><el-table-columnprop"id"label"ID"width"18…...

【操作系统笔记】内存分配

内存对齐 问题&#xff1a;为什么需要内存对齐呢&#xff1f; 主要原因是为了兼容&#xff0c;为了让程序可以运行在不同的处理器中&#xff0c;有很多处理器在访问内存的时候&#xff0c;只能从特定的内存地址读取数据。换个说法就是处理器每次只能从内存取出特定个数字节的数…...

Web 整合

HTML span 行内元素 p 块级元素 br/ 强制换行 i em倾斜 b strong 加粗 u 下划线 mark 高亮 超链接 a &#xff1a;a href"链接地址" target"_blank" alt"可替文本" title"文字提示" tartget&#xff1a;_self 自己界面打开 _…...

hasOwnProperty 方法解析

一、含义&#xff1a; hasOwnProperty 是 JavaScript 中的一个内置方法&#xff0c;用于检查对象是否具有指定名称的属性。 具体来说&#xff0c;hasOwnProperty 方法用于判断一个对象是否拥有某个指定的属性&#xff0c;而不是继承自原型链的属性。它是一个布尔值方法&#…...

使用 nohup 运行 Python 脚本

简介&#xff1a;在数据科学、Web 开发或者其他需要长时间运行的任务中&#xff0c;我们经常需要让 Python 脚本在后台运行。尤其是在远程服务器上&#xff0c;可能因为网络不稳定或需要执行多个任务&#xff0c;我们不希望 Python 脚本因为终端关闭而被终止。这时&#xff0c;…...

Django:五、登录界面实现动态图片验证码

一、下载包 pip install pillow 二、代码 这是一个函数&#xff0c;无输入&#xff0c;返回两个值。一个值是图片&#xff0c;一个值是图片中的数字及字母。 需要注意&#xff1a;font_fileMonaco.ttf 是一个验证码字体文件&#xff0c;如有需要&#xff0c;可三连私信。 …...

GPT,GPT-2,GPT-3,InstructGPT的进化之路

ChatGPT 火遍圈内外&#xff0c;突然之间&#xff0c;好多人开始想要了解 NLP 这个领域&#xff0c;想知道 ChatGPT 到底是个什么&#xff1f;作为在这个行业奋斗5年的从业者&#xff0c;真的很开心让人们知道有一群人在干着这么样的一件事情。这也是我结合各位大佬的文章&…...

firefox_dev_linux下载安装配置(部分系统自带包请看结尾)

download 从 Firefox 的官方网站下载 Firefox Developer Edition 的 tar 文件 firefox_dev_linux_download # 终端快速下载 wget https://download.mozilla.org/?productfirefox-devedition-latest-ssl&oslinux64&langen-US彻底删除自带原版 # apt系 sudo apt --pu…...

vim缓存-交换文件

Catf1agCTF靶场 web swp 题目链接&#xff1a;http://catf1ag.cn/ 个人博客&#xff1a;https://sword-blogs.com/ 题目考点&#xff1a; vim在编辑文档的过程中如果异常退出&#xff0c;会产生缓存文件 vim 交换文件名 参考文章&#xff1a;vim手册 https://yianwillis.…...

Hive 优化建议与策略

目录 ​编辑 一、Hive优化总体思想 二、具体优化措施、策略 2.1 分析问题得手段 2.2 Hive的抓取策略 2.2.1 策略设置 2.2.2 策略对比效果 2.3 Hive本地模式 2.3.1 设置开启Hive本地模式 2.3.2 对比效果 2.3.2.1 开启前 2.3.2.2 开启后 2.4 Hive并行模式 2.5 Hive…...

CentOS 7.5 centos failed to load selinux policy 错误解决方法

这是个 selinux 使能导致的&#xff0c; 关闭即可 在进入到内核选中界面&#xff0c;选中要启动的内核&#xff0c; 按键盘 e 就会进入启动参数界面 进入启动参数界面如图&#xff0c;按上下键找到 UTF8 UTF8如图&#xff0c; 添加 selinux0 添加完成如图&#xff0c; 按 ctr…...

注入之SQLMAP(工具注入)

i sqlmap是一个自动化的SQL注入工具&#xff0c;其主要功能是扫描&#xff0c;发现并利用给定的URL和SQL注入漏洞&#xff0c;其广泛的功能和选项包括数据库指纹&#xff0c;枚举&#xff0c;数据库提权&#xff0c;访问目标文件系统&#xff0c;并在获取操作权限时执行任…...

Linux学习资源Index

由于Linux是支撑“云计算”的最核心、最底层、最重要的技术&#xff0c;持续提升自已的Linux水平是必须的&#xff0c;这里将不断更新的Linux学习索引。 书籍 书籍首页 - Documentation (rockylinux.org) WWW链接 提定发行版 RockyLinux Rocky Linux Download Rocky | R…...

什么是SVG(可缩放矢量图形)?它与普通图像格式有何不同?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是SVG&#xff1f;⭐ 与普通图像格式的不同⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚…...

求生之路2服务器搭建插件安装及详细的游戏参数配置教程windows

求生之路2服务器搭建插件安装及详细的游戏参数配置教程windows 大家好我是艾西&#xff0c;最近研究了下 l4d2&#xff08;求生之路2&#xff09;这款游戏的搭建以及架设过程。今天就给喜欢l4d2这款游戏的小伙伴们分享下怎么搭建架设一个自己的服务器。毕竟自己当服主是热爱游…...

React TypeScript 定义组件的各种方式

目录 举例说明1. 使用 class 定义2. 使用函数定义2.1 使用普通函数2.2 使用函数组件 举例说明 比如我们要定义一个计数器 Counter&#xff0c;它包含一个 label 和一个 button&#xff0c;计数器的初始值由外部传入&#xff0c;点击 button 计数加 1: 这虽然是个简单组件&…...

互联网摸鱼日报(2023-09-20)

互联网摸鱼日报(2023-09-20) 36氪新闻 国货美妆这五年&#xff1a;押注头部主播&#xff0c;追求极致流量中遭反噬 ​处于水深火热之中的奈飞该如何自救&#xff1f; 一头“灰犀牛”将冲击美国 年轻人花钱的样子变了 金V之后再推橙V&#xff0c;微博正试图重建创作者生态 …...

AWS入列CNCF基金会

7月27日&#xff0c;IT之家曾经报道&#xff0c;微软加入Linux旗下CNCF基金会&#xff0c;在这之后不到一个月的今天&#xff0c;亚马逊AWS也宣布&#xff0c;以铂金身份加入此基金会。 CNCF&#xff0c;全称Cloud Native Computing Fundation&#xff0c;该基金会旨在使得容器…...

岭回归与LASSO回归:解析两大经典线性回归方法

文章目录 &#x1f34b;引言&#x1f34b;岭回归&#xff08;Ridge Regression&#xff09;&#x1f34b;实战---岭回归&#x1f34b;LASSO回归&#xff08;LASSO Regression&#xff09;&#x1f34b;实战---LASSO回归&#x1f34b;岭回归和LASSO哪个更容易是直线&#x1f34b…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...