Redis 数据类型之集合、有序集合与 hash(二)|学习笔记

简介: 快速学习 Redis 数据类型之集合、有序集合与 hash(二)

开发者学堂课程【Redis 入门实战演练Redis 数据类型之集合、有序集合与 hash(二)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/653/detail/10837


Redis 数据类型之集合、有序集合与 hash(二)


四、追加数据

追加的时候不能追加已经存在的数据

127.0.0.1:6379>SADD  set1  v3  v4(追加数据)

(integer) 3

127.0.0.1:6379>SADD  set1  v2 #没有追加成功

(integer) 0

127.0.0.1:6379> TYPE  set1

Set

127.0.0.1:6379> TYPE  set12

Set


五、查看集合的所有数据

127.0.0.1:6379 > SMEMBERS  set1

1)“v1”

2)“v2”

3)“v3”

4)“v4”

127.0.0.1:6379 > SMEMBERS  set2

1)“v4”

2)”v2”

(那么这个集合会用于哪个场景呢?)

 

六、获取集合的差集

差集:已属于 A 而不属于B的元素称为 A 与 B 的差集(已属于 set1 不属于 set2)先确定以哪个为主。

127.0.0.1:6379 >  SDIFF  set1  set2(做对比)

1)“v1”

2)“v3”

 

七、获取集合的交集

交集:已属于 A 且属于 B 的元素称为 A 与 B 的交集(求共同用户)

127.0.0.1:6379 > SINTER  set1  set2

1)“v4”

2)“v2”

(好的方法性能会快好多倍,无论有多少信息,直接将信息放入 Redis 中,然后求并集即可)

 

八、获取集合的并集

并集:已属于 A 或属于 B 的元素为称为 A 与 B 的并集(比较特殊)

127.0.0.1:6379 > SUNION  set1  set2

1)“v2”

2)“v4”

1)“v1”

2)“v3”

(使用 SUNION 计算 set1 和 set2)将用户1和用户2的列表加起来去重相加。

无论是什么,开发操作比较多。

(假如用户一有99个好友,包括张三。其他的好友都和用户二不一样。用户二有120个好友,其中也包括张三,其他的和用户一都不相同。那么并集是:218.相加去重)

无论是集合列表还是字符号主要是开发考虑和开发操作比较多,主要是为了熟悉数据类型。

 

九、有序集合(sorted set)

Redis 有序集合和集合一样也是 string类型元素的集合,且不允许重复的成员,不同的是每个元素都会关联一个 double (双精度浮点型)类型的分数。(根据访问的热度不同会产生一个评分,根据评分对其进行排序)redis 正是通过该分数来为集合中的成员进行以小到大的排序,有序集合的成员是唯一的(不同视频的点击率可以作为它的分数,将点击率进行排序,从高到低,做页面数据,将最优秀或最喜爱的商品放在前面),但分数(score)却可以重复,集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1), 集合中最大的成员数为 2^32-1(4294967295,每个集合可存储40多亿个成员)。

复杂度:数据的总数有多少不会根据数据量的增长而导致查询时间的增长。

(在1000里面找一个值和在10000里面找一个值是一样的时间。)

这就是它的优势。

1668264484373.jpg

 

十、生成有序集合

127.0.0.1:6379>ZADD zset1 1(分值) v1(加信息)

(integer)1

127.0.0.1:6379>ZADD zset1 2 v2

(integer)1

127.0.0.1:6379> ZADD zset1 2 v3

(integer)1

127.0.0.1:6379> ZADD zset1 3 v4

(integer)1

127.0.0.1:6379> TYPE zset1

Zset

127.0.0.1:6379> TYPE zset2

zset

一次生成多个数据:(和生成列表插入数据比较类似)

192.168.7.101:6379>ZADD zset2 1 v1 (一对)2 v2 3 v3 4v45 v5

(integer)5(需要在每个数据前面加上分数或者次数,成对)

 

十一、获取集合的长度数(看列表中的数据长度)

127.0.0.1:6379>ZCARD zset1

(integer) 4

127.0.0.1:6379> ZCARD zset?

(integer)4

(对于开发列表很重要,因为开发列表数据不是任意拿的,是一个一个拿的,或者拿到列表的总长度,然后全部获取出来。为什么?避免产生多余的链接溢出。否则会出现错误。OUT OF RANGE,所以需要拿到总长度)

 

十二、基于索引返回数值

怎么通过下标获取数据?

第一个,第二个等数据都会有隐藏的下标,从0开始依次往后。

127.0.0.1:6379> ZRANGE  zset1 0(开始) 3(结束)这是下标的范围

1)“v2"

2)“v3"

3) "V4"

如果想要取一个固定的数据,那么就要固定它的开头和结尾。

127.0.0.1:6379> ZRANGE zset1 0 2

1)“V1"

2)“v2”

3) “V3"

127.0.0.1:6379> ZRANGE zset1 2 2

1) "V3"

对于开发的时候需要注意

 

十三、返回某个数值

127.0.0.1:6379> ZRANK zset1 v2(不知道的下标位)

(integer) 1

127.0.0.1:6379> ZRANK zset1 v3

(integer) 3

 

十四、集合排行案例(实用场景)

192.168.7.104:6379> ZADD paihangbang 90 nezha 199 zhanlang 60 zhuluoji 30 gangtiexia(电影名称)

(integer) 4

192.168.7.101:6379> ZRANGE  paihangbang 0(第一个) -1(最后一个)#是示集合内所有的 key 无论有序集合有多长,-1都可以将最后一个值取出来。

1)"gangtiexia"

2)"zhuluoji"

3) "nezha"

4) "zhanlang"(不知道分数)

192-166.7-104:6379~ ZREVRANGE paihangbang o -1 withscores #显示指定集合内所有 key 和得分情况

1)"zhuluoji"

2)“60"

3)"nezha"

4)*90"

5) "zhanlang"

6) “199"

自动排行,根据频数或者销量。取消了之后不会消失。

有些程序会根据页面排行。例如:根据频数进行排行。(需要具有评分标准)

1668264570710.jpg

相关文章
|
4天前
|
数据采集 人工智能 安全
|
13天前
|
云安全 监控 安全
|
5天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1093 152
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1770 9
|
10天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
701 152
|
12天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
663 13
|
7天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
458 5