Redis中Hash类的操作

Redis中Hash类型是键值对的形式保存数据,其中键被称为字段(field),值称为字段值(value)。在一个key中,字段不能重复,而值可以重复。无论是字段还是值都是无序的(保存的次序和添加的次序不同)

    默认情况下hash使用listpack存储,当保存的字段-值的数量大于512个或者当个字段的值大于64个字节时,改为hashtable。


一、使用场景
1、购物车

    可以使用redis的hash实现购物车,字段为商品的信息,值为数量

2、权限列表

    保存用户的权限,字段为权限的标识 ,值为状态

3、缓存进度

    比如小说的阅读进度,字段为小说编号,值为位置。还比如视频的播放进度,字段为视频编号 ,值为已播放的位置。

二、添加和修改
1、hset

向Hash中添加一到多个字段和值,返回添加成功的数量,如果其中某个字段名已存在,会忽略此字段的添加

语法

hset key field value [field value ...]

示例

//添加两个商品类型,添加成功,返回2
hset product_type 1 家电  2 鞋帽

//字段1已存在,只会添加3,返回1
hset prouct_type 1 果蔬 3 成衣

2、hmset

    向hash中添加一到多个字段和值,与hset不同的是,当字段已存在,它会替换原来的值,如果成功,返回“OK”

语法

hmset key field value [field value ...]

示例

//添加两个商品类型,2会把之前的鞋帽替换,返回OK
hmset product_type 2 '手机' 6 '数码'

3、hsetnx

    仅当字段不存在时,才会添加此字段和值,成功返回1,失败返回0

语法

hsetnx key field value

示例

//添加一个新的字段
hsetnx product_type 7 '保健'

三、删除
1、hdel 

    删除一个或多个字段,返回实际删除的字段数量

语法

hdel key field [field ...] [exists match field]

其中

exists match为判断条件,如果指定字段存在,则删除此字段,否则不删除

示例

//删除1和9两个字段
hdel product_type 1 9

//如果3存在,则删除
hdel product_type exists match 3

四、查看
1、hexists

    用于判断指定的字段是否存在,如果存在返回1,不存在返回0

语法

hexists key field

示例

//判断字段2是否存在
hexists product_type 2

2、hlen

    用于查看字段的数量

语法

hlen key

示例

hlen product_type

3、hgetall

    查看所有的字段和值,返回的结果的格式为 

字段名
字段值
字段名
字段值
........ 

语法

hgetall key

示例

hgetall product_type

4、hkeys

    查看所有字段的名称,返回字段名列表

语法

hkeys key

示例

hkeys product_type

5、hvals

    查看所有的值,返回字段值列表

语法

hvals key

示例

hvals product_type

6、hget

    查看指定字段的值,如果字段不存在,返回null

语法

hget key field

示例

hget product_type 2

7、hmget

    查看一到多个字段的值,如果字段不存在,对应的值返回为null

语法

hmget key field [field ...]

示例

hmget product_type 1 2 3

8、hscan

    以游标的方式查看所有或符合条件的字段和值

语法

hscan key cursor [MATCH pattern] [COUNT count]

其中 

    cursor:为游标名,一般为0,即游标开始的位置

   match:筛选条件,pattern为条件,可以使用“*”做为通配符来进行模糊匹配

    count:从指定的游标开始,在此指定字段数中查询,默认值为10,在默认情况(存储结构不是hashtable)下此值无效,只有当hash中字段数大于512或者某个字段的值的长度大于64个字节的时候才有效(ziplist存储结构会转换成hashtable)。

    但要注意的是实际查询的数量会等于或大于count,特别是指定了match时。

示例

//查看所有字段和值
hscan product_type 0

//查看所有字段
hscan product_type 0 match '*'

//查看字段名中包含1的字段
hscan product_type 0 match '*1*'

//返回前2个字段
hscan product_type 0 count 2

9、hincrby

    为字段添加指定的整数增量,如果此字段的值不是数值,会提示错误“ERR hash value is not an integer”,如果成功返回增加增量后的值

语法

hincrby key field increment

示例

//添加一个整数值的字段
hset product_type 11 '11'

//字段值加3
hincrby product_type 11 3

10、hincrbyfloat

    为字段添加指定的浮点数增量,如果此字段的值不是数值,会提示错误“ERR hash value is not an integer”,如果成功返回增加增量后的值

语法

hincrbyfloat key field increment

示例

//添加一个整数值的字段
hset product_type 10 '10'

//字段值加2.5
hincrbyfloat product_type 10 2.5

11、hstrlen

    查询值的字节数

语法

HSTRLEN key field

示例

hstrlen product_type 10

 文章来源于哔站《Redis中Hash类的操作》

更多学习视频和专栏文章请到哔站个人空间: 布道师学院的个人空间-布道师学院个人主页-哔哩哔哩视频

更多资源和项目下载请到:”开源吧(找实战项目和毕设项目的好网站)“ ​ :开源吧

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

mysql双主+双从集群连接模式

架构图: 详细内容参考: 结果展示: 178.119.30.14(主) 178.119.30.15(主) 178.119.30.16(从) 178.119.30.17(从)

添加驱动模块到内核的两种方法

添加驱动模块到内核的两种方法 1. 放在内核源代码树中 步骤总结: 新建文件夹编写Makefile、编写Kconfig修改上层Kconfig执行make menuconfig执行make zImage 或 make modules 1.1 源码放入文件夹 例如:添加一个按键字符设备模块 在内核目录下的 dri…

【推荐系统】多任务学习模型

介绍一些多任务学习模型了解是如何处理多任务分支的。 ESSM, Entire Space Multi-Task Model 阿里提出的ESSM全称Entire Space Multi-Task Model,全样本空间的多任务模型,有效地解决了CVR建模(转化率预估)中存在的两个非常重要…

MATLAB中plot3函数用法

目录 语法 说明 向量和矩阵数据 表数据 其他选项 示例 绘制三维螺旋图 绘制多个线条 使用矩阵绘制多个线条 指定等间距刻度单位和轴标签 将点绘制为不带线的标记 自定义颜色和标记 指定线型 在绘图后修改线条 绘制表中的数据 在 x 和 y 轴上绘制多个表变量 指…

10.2 调试事件获取DLL装载

理解了如何通过调试事件输出当前进程中寄存器信息,那么实现加载DLL模块也会变得很容易实现,加载DLL模块主要使用LOAD_DLL_DEBUG_EVENT这个通知事件,该事件可检测进程加载的模块信息,一旦有新模块被加载或装入那么则会触发一个通知…

Qt扫盲-QSqlTableModel理论总结

QSqlTableModel理论总结 一、概述二、使用1. 与 view 视图绑定2. 做中间层,不显示 三、常用函数 一、概述 QSqlTableModel是用于从单个表读写数据库记录的高级接口。它构建在较低级的QSqlQuery之上,可用于向QTableView 等视图类提供数据。这个主要是对单…

苹果V3签名是什么?优势是什么?什么场合需要应用到?该怎么部署?

v3签名,或称为Apple Developer Program v3签名,是苹果公司在2021年6月推出的一种签名格式,用于对应用程序进行签名和验证。 它是取代了之前的v2签名格式,用于增强应用程序的安全性和完整性。 v3签名能够做到以下几点:…

【Linux基础】Linux发展史

👉系列专栏:【Linux基础】 🙈个人主页:sunny-ll 一、前言 本篇主要介绍Linux的发展历史,这里并不需要我们掌握,但是作为一个合格的Linux学习者与操作者,这些东西是需要了解的,而且…

前端JavaScript入门到精通,javascript核心进阶ES6语法、API、js高级等基础知识和实战 —— Web APIs(五)

思维导图 Bom操作 一、Window对象 1.1 BOM(浏览器对象模型) <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"vi…

k8s集群-6(daemonset job cronjob控制器)

Daemonset 一个节点部署一个节点 当有节点DaemonSet 确保全部 (或者某些) 节点上运行一个 Pod 的副本。加入集群时&#xff0c;也会为他们新增一个 Pod 。当有节点从集群移除时&#xff0c;这些Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。 DaemonSet 的典型用…

Boost程序库完全开发指南:1.1-C++基础知识点梳理

主要整理了N多年前&#xff08;2010年&#xff09;学习C的时候开始总结的知识点&#xff0c;好长时间不写C代码了&#xff0c;现在LLM量化和推理需要重新学习C编程&#xff0c;看来出来混迟早要还的。 1.shared_ptr 解析&#xff1a;shared_ptr是一种计数指针&#xff0c;当引…

数字电路逻辑与设计 之循环码和 移存码

有发现错误的能力&#xff0c;不能纠正 只能检查单次的错误&#xff0c;不能完全抗干扰 可以按照上面的方法来循环构造 移存码可以通过前推后推来实现

pycharm配置python3.8版本专门用于undecteded_chromedriver测试

pycharm配置python3.8版本专门用于undecteded_chromedriver测试 作者&#xff1a;虚坏叔叔 博客&#xff1a;https://pay.xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; 一、Pycharm及python环境的配置 1.安装python-3.8.7rc1-amd64.e…

MySQL进阶_3.性能分析工具的使用

文章目录 第一节、数据库服务器的优化步骤第二节、查看系统性能参数第三节、 慢查询日志第四节、 查看 SQL 执行成本第五节、 分析查询语句&#xff1a;EXPLAIN5.1 基本语法5.2 EXPLAIN各列作用 第一节、数据库服务器的优化步骤 当我们遇到数据库调优问题的时候&#xff0c;可…

十三、Django之添加用户(原始方法实现)

修改urls.py path("user/add/", views.user_add),添加user_add.html {% extends layout.html %} {% block content %}<div class"container"><div class"panel panel-default"><div class"panel-heading"><h3 c…

全志ARM926 Melis2.0系统的开发指引①

全志ARM926 Melis2.0系统的开发指引① 1. 编写目的2. Melis2.0 系统概述3. Melis2.0 快速开发3.1. Melis2.0 SDK 目录结构3.2. Melis2.0 编译环境3.3. Melis2.0 固件打包3.4. Melis2.0 固件烧录3.5.串口打印信息3.6. Melis2.0 添加和调用一个模块3.6.1. 为什么划分模块&#xf…

[GWCTF 2019]枯燥的抽奖

参考 https://www.cnblogs.com/AikN/p/15764428.html [GWCTF 2019]枯燥的抽奖-CSDN博客 打开环境 笑死我了&#xff0c;怎么那么像我高中校长 查看源代码 看到check.php&#xff0c;去访问一下 ok看到源代码了 因为上次做过&#xff0c;看到这个我就想到用php_mt_seed逆推…

【Hello Linux】多路转接之 epoll

本篇博客介绍&#xff1a; 多路转接之epoll 多路转接之epoll 初识epollepoll相关系统调用epoll的工作原理epoll服务器编写成员变量构造函数 循环函数HandlerEvent函数epoll的优缺点 我们学习epoll分为四部分 快速理解部分概念 快速的看一下部分接口讲解epoll的工作原理手写epo…

解决ASP.NET Core的中间件无法读取Response.Body的问题

概要 本文主要介绍如何在ASP.NET Core的中间件中&#xff0c;读取Response.Body的方法&#xff0c;以便于我们实现更多的定制化开发。本文介绍的方法适用于.Net 3.1 和 .Net 6。 代码和实现 现象解释 首先我们尝试在自定义中间件中直接读取Response.Body&#xff0c;代码如…

Arcgis提取玉米种植地分布,并以此为掩膜提取遥感影像

Arcgis提取玉米种植地分布上&#xff0c;并以此为掩膜提取遥感影像 一、问题描述 因为之前反演是整个研究区&#xff0c;然而土地利用类型有很多类&#xff0c;只在农田或者植被上进行反演&#xff0c;需要去除水体、建筑等其他类型&#xff0c;如何处理得到下图中只有耕地类…