Redis数据类型之(哈希Hash和集合Set)

news2024/10/7 16:15:35

Redis数据类型之(哈希Hash和集合Set)

一定注意看红色注意项。

哈希(Hash):

Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。

Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。

特征:提到hash首先想到Java语言中的hashMap,他的结构也是key-value结构(下面就用字段名和值表示hash里面的key value)。这就相当于redis的里面可以存一个key - (key-value),这有点像json了,只不过就2层。如果有一个用户,他有姓名、年龄、地址等信息。在redis中就可以用hash类型来存储。下面是hash的使用命令。

由于他是string类型的一个映射表,所以他的命令基本都是H开头的String命令:如下

  1. Hset:field相当于字段名,value是值
    HSET key field value
    将哈希表 key 中的字段 field 的值设为 value 。

  2. Hget:
    HGET key field
    获取存储在哈希表中指定字段的值。

  3. Hmset:设置多对字段名和值,成对出现。
    HMSET key field1 value1 [field2 value2 ]
    同时将多个 field-value (域-值)对设置到哈希表 key 中。

  4. Hmget:获取多个字段值
    HMGET key field1 [field2]
    获取所有给定字段的值

  5. Hkeys:获取key 中的所有字段名
    HKEYS key
    获取哈希表中的所有字段

  6. Hvals:获取key 中的所有值
    HVALS key
    获取哈希表中所有值。

  7. Hlen:获取key中的字段数量
    HLEN key
    获取哈希表中字段的数量

  8. Hgetall:获取key中的字段名和值,都输出
    HGETALL key
    获取在哈希表中指定 key 的所有字段和值

  9. Hexists:字段名是否存在
    HEXISTS key field
    查看哈希表 key 中,指定的字段是否存在。

  10. Hdel:删除多个字段
    HDEL key field1 [field2]
    删除一个或多个哈希表字段

  11. Hincrby:可以给字段中的数值增加,比如age:18。可以增加age的值1。1就是加1,如果写-1就是减一,不需要再多加一个减法命令。
    HINCRBY key field increment
    为哈希表 key 中的指定字段的整数值加上增量 increment 。

  12. Hincrbyfloat:上面提到整数增减了,这个是浮点数增减,比如:0.5 就是加0.5,-0.5就是减0.5。注意:如果用浮点型命令加0.5后,就只能使用浮点命令操作了,因为他就变成了浮点型。若果用浮点型给一个整数增加了1,则还可以用整数型命令继续操作,因为数值还是整数。
    HINCRBYFLOAT key field increment
    为哈希表 key 中的指定字段的浮点数值加上增量 increment 。
    在这里插入图片描述

  13. Hsetnx:如果该字段不存在时,设置该字段值
    HSETNX key field value
    只有在字段 field 不存在时,设置哈希表字段的值。

实操:

在这里插入图片描述
这里可以看到我用hmset设置了多组属性,并且设置了两次name。最终查询结果表示name被最后一个设置覆盖了,所以可以说明他具有hashmap的特征,去重。
在这里插入图片描述
这里也支持设置一个空字符串。和hashmap一样。

哈希(Hash)的使用场景:

由于他可以对字段进行数值计算。所以可以在点赞,收藏场景使用,巨鹿用户点赞数,然后每点一次就+1,取消-1,收藏同样。因为他还是key-value结构,用来存储详情页信息等。

  1. 点赞
  2. 收藏
  3. 存储详情页信息

集合(Set):

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

集合对象的编码可以是 intset 或者 hashtable。

Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

特征:他和Java语言中的set一样,所以具有set的特征。无序和去重

他的命令基本都是S开头:如下

  1. Sadd:member1 是值。如果设置多个同样的值,会自动去重
    SADD key member1 [member2]
    向集合添加一个或多个成员
  2. Scard:返回集合的成员数量有几个
    SCARD key
    获取集合的成员数
  3. Smembers:返回集合中具体的成员
    SMEMBERS key
    返回集合中的所有成员
  4. Srem:删除元素。因为他是无序,所以只能增删,不能改
    SREM key member1 [member2]
    移除集合中一个或多个成员

下面介绍一下他的交、并、差集,应用多

  1. Sinter:返回他们的交集。
    SINTER key1 [key2]
    返回给定所有集合的交集

  2. SinsterStore:把他们交集返回并存储在destination 中。写的时候可以都小写,我只是为了看着清晰,才驼峰写法
    SINTERSTORE destination key1 [key2]
    返回给定所有集合的交集并存储在 destination 中

  3. Sunion:返回他们的并集。
    SUNION key1 [key2]
    返回所有给定集合的并集

  4. SunionStore:把他们并集返回并存储在destination 中。
    SUNIONSTORE destination key1 [key2]
    所有给定集合的并集存储在 destination 集合中

  5. Sdiff:返回他们的差集。**这里需要注意,key1和key2的顺序。key1在前表示返回key1中key2没有的数据,反之则返回key2中key1没有的数据。下面会提到他的具体用处
    SDIFF key1 [key2]
    返回第一个集合与其他集合之间的差异。
    在这里插入图片描述

  6. SdiffStore:把他们差集返回并存储在destination 中。
    SDIFFSTORE destination key1 [key2]
    返回给定所有集合的差集并存储在 destination 中

  7. Smove:
    SMOVE source destination member
    将 member 元素从 source 集合移动到 destination 集合

  8. Spop:随机移除一个 。可以用到抽奖上,抽完且不放回
    SPOP key
    移除并返回集合中的一个随机元素

  9. Srandmember:返回一个或多个随机数。可以用到抽奖可重复中,因为不删除
    SRANDMEMBER key [count]
    返回集合中一个或多个随机数

  10. SisMember:判断元素是否存在
    SISMEMBER key member
    判断 member 元素是否是集合 key 的成员

集合(Set)的使用场景:

由于他可以进行交并差集运算。所以可以在点赞,收藏场景使用,巨鹿用户点赞数,然后每点一次就+1,取消-1,收藏同样。因为他还是key-value结构,用来存储详情页信息等。

  1. 抽奖:
    A:只抽1次,1次抽n个人。
    B:抽多次,比如三等奖抽3名,二等奖抽2名,一等奖抽1名。
    主要利用Set结构元素的不重复性和获取随机数的方法来实现

  2. 微博、微信点赞(文章的收藏)
    微信朋友圈用户A的某条消息的点赞功能,要实现点赞、取消点赞、获取点赞列表、获取点赞用户数量、判断某用户是否点赞过。
    A:点赞 sadd方法

    B:取消点赞 srem方法

    C:获取点赞列表 smembers方法

    D:获取点赞用户数量 scard方法

    E:判断某用户是否点赞过 sIsMember方法

  3. 关注模型
    比如微博关注或者共同好友的问题,以微博关注为例,要实现:同时关注、关注的和、关注A的用户中也关注B的、当A进入B页面,求可能认识的人。

    A:关注和取消关注: sadd方法 和 srem方法

    B:同时关注:求交集

    C:关注的和:求并集

    D:关注A的用户中也有关注B的 注意这里不是取交集,而是在A的用户中判断,是否有关注B的,所以要遍历一遍A的用户:遍历A中的用户,利用sIsMember判断是否也关注B

    E:当A进入B页面,求可能认识的人:这里指的是关注B中的用户 扣去 里面也关注A的用户,就是A可能认识的人。 注意:这里的A和B求差集是有顺序的,比如求A的可能认识的人,就要把B放在A前面:Sdiff B A。仔细思考下是不是这样,要求A的可能认识人,就相当于求B中没有在A中出现的人。反之就是Sdiff A B。

求差集:B-A,A-B

暂时就理解到这儿。

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

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

相关文章

promethues 之PromQL数据类型介绍(二)

promethues 之PromQL数据类型介绍(二) 1、PromQL 介绍 PromQL是promethues 监控系统内置的一种查询语言,类似于MySQL的SQL语句,该语言仅用于读取数据。PromQL是我们学习Promethues最困难也是最重要的部分。当Promethues从系统和服务收集到指标数据时&…

PIP-Net:用于可解释图像分类的基于patch的直观原型

文章目录 PIP-Net: Patch-Based Intuitive Prototypes for Interpretable Image Classification摘要本文方法模型结构Self-Supervised Pre-Training of PrototypesTraining PIP-NetScoring Sheet ReasoningCompact Explanations 实验结果 PIP-Net: Patch-Based Intuitive Proto…

bug 记录 - 接口被重复调用,响应时长不同,结果被覆盖的问题

发现问题与调试过程 需求:输入框中输入关键字,根据关键字去调用接口,返回模糊查询的结果集合。问题:输入的关键字越少,接口响应时间越长。例如:输入“阿”,接口响应时间大概是 5 秒&#xff0c…

【计算机网络中ip概念总结】【平时我们说的ip 到底是什么】【计算机网络中 ip地址是什么】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

【Linux】重定向dup

文章目录 前言重定向的原理dup函数添加重定向功能到myshell 前言 了解重定向之前需要明白文件描述符的工作规则,可以看这篇文章:文件系统 最关键的一点是:在进程中,在文件描述符表中,会将最小的、没有被使用的数组元…

vscode整合gitee

vscode需要下载的插件 第一个可以多仓库进行操作 第二个主要是用于仓库的管理和展示 vscode的gitee操作 1、按F1,搜索gitee 2、根据提示进行操作 标1的是第一个插件的操作 标2的是第二个插件的操作 绑定用户私钥 两个插件绑定私钥的方式不同, gitee的私…

这本数智平台白皮书讲透了大型企业数智化升级业务痛点

在以“升级企业数智化底座”为主题的2023用友BIP技术大会上,用友联合全球权威咨询机构IDC共同发布《建设数字中国 升级数智底座——企业数智化底座白皮书》,在这本数智平台白皮书里深入剖析了大型企业的数智化升级痛点。 大型企业普遍具有广域的业务覆盖…

六级备考15天|CET-6|翻译真题练习|北京大兴国际机场|9:15~10:20

目录 中文 英文 词汇 订正 解析 练习 中文 英文 词汇 put sth. into use 投入使用 距离south of地点 “...以南....公里处” construction 开工建设 the giant project 巨型工程 on the site …

LED显示屏驱动IC基本原理

LED显示屏驱动IC(Integrated Circuit,集成电路)是一种专门设计用于控制和驱动LED显示屏的电子元件。LED显示屏驱动IC的基本原理涉及到LED的电流控制、亮度调节、扫描控制和图像数据处理等方面。 以下是LED显示屏驱动IC的基本原理的详细说明&a…

只需简单几步,就能在报表工具FastReport .NET 中使用 RFID 标签

FastReport 是功能齐全的报表控件,可以帮助开发者可以快速并高效地为.NET,VCL,COM,ActiveX应用程序添加报表支持,由于其独特的编程原则,现在已经成为了Delphi平台最优秀的报表控件,支持将编程开…

喜讯丨计讯物联5G物联网数据网关TG463荣登2022年度中国物联网行业创新产品榜

近日,备受瞩目的2022‘物联之星’中国物联网产业年度榜单颁奖典礼在上海世博展览馆会场隆重举行。经由申报筛选、网络人气投票、专家评委投票等多重环节,计讯物联旗下5G物联网数据网关TG463荣登2022年度中国物联网行业创新产品榜。 作为中国物联网行业…

chatgpt赋能python:Python编写抽奖程序——让你的活动更加有趣

Python编写抽奖程序——让你的活动更加有趣 在现代社会中,抽奖活动已经成为了许多商家和组织吸引关注、增强互动的重要手段。而使用Python编写抽奖程序可以帮助我们更加方便地进行这一活动。本文将介绍Python编写抽奖程序的方法,以及如何在实际应用中优…

【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等)、趣味项目实现、学术应用项目实现

【强化学习原理项目专栏】必看系列:单智能体、多智能体算法原理项目实战、相关技巧(调参、画图等、趣味项目实现、学术应用项目实现 对于深度强化学习这块规划为: 基础单智能算法教学(gym环境为主)主流多智能算法教学…

Hive和Hadoop关系

Hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以查询和分析存储在Hadoop中的大规模数据的机制。Hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成Ma…

vue组件库 vue marquee vue跑马灯 vue走马灯 ​vue-marquee-text-component​中文

vue2运行安装 npm install vue-marquee-text-component1.2.0 Name说明DescriptionConfigduration持续时间动画持续时间{类型:数字,默认值:15}Animation Duration{ type: Number, default: 15 }repeatrepeat重复插槽的…

chatgpt赋能python:Python内置函数:如何查找和使用?

Python内置函数:如何查找和使用? 作为一名有10年Python编程经验的工程师,我想与大家分享一下Python内置函数的使用技巧。Python内置函数是指已经定义好的函数,无需另外安装也无需导入就可以直接在Python中使用的函数。这篇文章将…

chatgpt赋能python:Python编程教程:如何用Python写抢购程序

Python编程教程:如何用Python写抢购程序 随着网购的流行和限量商品的推出,抢购已经成为了一个非常热门的话题。有些人甚至会通过软件或程序来提高他们成功抢到商品的机会。在本篇文章中,我们将介绍如何用Python编写一个简单易用的抢购程序&a…

客户频繁变更需求,项目经理该如何应对?

王博刚当上项目经理,接手了一个中型软件项目。公司高层多次提醒他要尊重客户需求,并充分满足客户的期望。 一开始项目进展顺利,但后来客户频繁变更需求给团队带来了很多额外工作。王博动员大家加班保证项目进度,让客户非常满意。…

【面上对象三大特性之多态】

目录 1.什么是多态2.多态的条件 3.向上转型3.1向上转型的三种写法3.2 优缺点 4.向下转型(用得少)5.避免在构造方法中调用重写的方法6.重写6.1什么是重写6.2 重写和重载的区别 1.什么是多态 多态的概念:通俗来说,就是多种形态&…

PARSeq论文翻译

《Scene Text Recognition with Permuted Autoregressive Sequence Models》论文翻译 文章目录 《Scene Text Recognition with Permuted Autoregressive Sequence Models》论文翻译Abstract1、Introduction2、Related Work3、Permuted Autoregressive Sequence Models3.1、Mod…