IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 5.redis数据类型2/5:hash(哈希) -> 正文阅读

[数据结构与算法]5.redis数据类型2/5:hash(哈希)

hash散列列表

介绍

Redis是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他数据类型,一个散列类型键可以包含至多2的32次方减1个字段
散列类型适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的属性,而字段的值则存储属性值,例如:user对象有id,name和age属性,他的字段值就是对象的属性值。
在这里插入图片描述

注意事项:

hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果数据未获取到,对应的值为(nil)
每个 hash 可以存储 2 32 - 1 个键值对
hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了存储大量对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用
hgetall 操作可以获取全部属性,如果内部field过多,遍历整体数据效率就很会低,有可能成为数据访问瓶颈。

hash命令列表

理解好上面的图,对命令的构成会容易理解一点
添加/修改数据
hset key field value
获取数据
hget key field
hgetall key
删除数据
hdel key field1 [field2]
添加/修改多个数据
hmset key field1 value1 field2 value2 …
获取多个数据
hmget key field1 field2 …
获取哈希表中字段的数量
hlen key
获取哈希表中所有的字段名或字段值
hkeys key
hvals key
获取哈希表中是否存在指定的字段
hexists key field
设置指定字段的数值数据增加指定范围的值
hincrby key field increment
hincrbyfloat key field increment
为哈希表中不存在的的字段赋值
hsetnx key field value

添加/修改数据

hset key field value
为user这个key的age字段赋值,其值为20
在这里插入图片描述

获取数据

hget key field
获取user的age字段的值:
在这里插入图片描述
hgetall key
获取user这个key的全部数据
下面因为只有一个才获取到一个,如果是多个的话,是全部获取的
在这里插入图片描述
### 删除数据
hdel key field1 [field2]
删除user的age字段,删除成功再获取就是nil(空)了,也可以指定多个字段进行多个字段的删除的在这里插入图片描述

添加/修改多个数据

	hmset key field1 value1 field2 value2 … 

为key这个键添加多个数据,都是以field value这样的形式,一对一对的
此时可以理解为person的id为123456,name为meng,age为24,像一个java对象一样
在这里插入图片描述
### 获取多个数据
hmget key field1 field2 …
获取上面刚刚添加的多个数据,为person这个键获取id,name,age这几个字段的值
在这里插入图片描述
### 获取哈希表中字段的数量
hlen key
获取刚刚添加的person的字段数量(id,nameage)所以得到结果为3
在这里插入图片描述

获取哈希表中所有的字段名或字段值

	hkeys key

获取刚刚添加的person这个键的所有字段名
在这里插入图片描述
hvals key
获取person这个键的所有字段的值
在这里插入图片描述

获取哈希表中是否存在指定的字段

	hexists key field、

查询的person键的name字段真实存在,返回1
在这里插入图片描述
查询person键的city字段不存在,返回0
在这里插入图片描述

设置指定字段的数值数据增加指定范围的值

	hincrby key field increment

让person这个键的age字段的值增加20,因为原本是24,加上20就是返回值44
在这里插入图片描述
如果增加一个负值,它就会减少对应的值
在这里插入图片描述
hincrbyfloat key field increment
让person键的age字段的值增加1.5(浮点数),因为上面已经修改age为44了,所有加上1.5就是45.5
在这里插入图片描述

为哈希表中不存在的的字段赋值 。

(应用于购物车数据存储设计,购物车里面有该商品就不添加,没有才能添加)
hsetnx key field value
如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。
如果字段已经存在于哈希表中,操作无效。
如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。
设置成功,返回 1 。如果给定域已经存在且没有操作被执行,返回 0 。
失败:
在这里插入图片描述
成功:
在这里插入图片描述

摘录一个别人的文章:hset 和hsetnx 的区别

原文链接:https://blog.csdn.net/qq756684177/article/details/81518766

命令参数:
HSET key field value
HSETNX key field value

作用区别:
HSET 将哈希表 key 中的域 field 的值设为 value 。如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作。如果域 field 已经存在于哈希表中,旧值将被覆盖。

HSETNX 将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在。若域 field 已经存在,该操作无效。

如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。

返回值区别:
HSET:如果 field 是哈希表中的一个新建域,并且值设置成功,返回 1 。如果哈希表中域 field 已经存在且旧值已被新值覆盖,返回 0 。
HSETNX:设置成功,返回 1 。如果给定域已经存在且没有操作被执行,返回 0 。
————————————————
版权声明:本文为CSDN博主「Tinywan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

应用场景

电商网站购物车设计与实现

解决方案
? 以客户id作为key,每位客户创建一个hash存储结构存储对应的购物车信息
? 将商品编号作为field,购买数量作为value进行存储
? 添加商品:追加全新的field与value
? 浏览:遍历hash
? 更改数量:自增/自减,设置value值
? 删除商品:删除field
? 清空:删除key
?

抢购,限购类、限量发放优惠卷、激活码等业务的数据存储设计

?以商家id作为key
? 将参与抢购的商品id作为field
? 将参与抢购的商品数量作为对应的value
? 抢购时使用降值的方式控制产品数量

string存储对象(json)与hash存储对象

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-24 18:44:08  更:2021-12-24 18:46:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 17:24:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码