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

初识Redis · set和zset

目录

前言:

set

基本命令

交集并集差集

内部编码和应用场景

zset

基本命令

交集并集差集

内部编码和应用场景

应用场景(AI生成)

排行榜系统

应用背景

设计思路

热榜系统

应用背景

设计思路

热度计算方式

总结对比表


前言:

在前几篇Redis的基本数据类型中,我们已经了解了string list hash,并且了解了对应的内部编码和实际的应用场景,也是对于基本的命令操作花了比较多的文字描述的去介绍。那么在本文呢,既然有了前几个类型多个基础,我们学习set和zset也是会比较轻松的了。

废话不多说,我们直接进入主题吧。


set

基本命令

首先,set它是代表集合的意思,那么对于它来说,存在的几个特点有:无序的,不可重复的,那么因为无序,它也就不存在索引的特点。

既然是集合,我们曾经在高中阶段,或者是大学阶段均接触过集合的概念,对于集合来说有的基本操作有交集并集差集,在Redis中也存在这几个操作,所以这里的set虽然说和C++中的set差别比较大,但是和数学中的集合还是挺有相同点的。

sadd:给集合中添加元素,返回值为添加成功了几个元素

因为集合是去重的,所以我们重复添加元素的话,是会添加失败的。

smembers:查看集合中的元素 

sismember: 判断元素是否在集合内部

不过sismember只能判断一个元素,其实对于这种命令来说我们甚至可以通过翻译的方式判断它是什么意思,比如sismember,s代表set is的意思代表是 member代表成员,那么sismember的意思就是是否是set的成员。所以我们也没有必要专门记命令。

scard:查询set中有多少个元素

spop:随机删除一个元素

注意,这里的随机是真的随机,我们也可以通过验证的方式判断是否是随机的,第一次是1 4,第二次是1 3,不存在任何的顺序。这其实就有点意思了,随机删除。

至于为什么是随机的呢,可能也和set本身是无序的有关系吧,而且官方文档也明确说了spop是随机的,并且在源码中也是使用的生成随机数的方式的:

既然我们现在提到了无序,我们可以简单引出一个话题,即什么是有序的?

其实对于有序来说,分为有顺序和排名有序的,比如我们拿set来说,有1 2 3 4和4 1 3 2的两种情况的set都是一样的,拿list来说,1 2 3 4和 1 2 4 3的两种不是一样的,因为list是有序的,但是以上我们两种说的有序的都是指的是有顺序的。对于有顺序的话,比如排名一类的,就是有序的,但是这个有序的是指按照某种权重进行排序的,而非顺序上的有序。

以上是对有序这个词的讨论。

smove:将某个元素从source移动到destination

不过要是没有这个元素,也就返回0了。

srem:将某个元素从key中删除。

这里的rem代表的意思是remove,即移除的意思,它的返回值的意思是删除成功的元素的个数。

交集并集差集

对于集合之间的运算涉及到的命令是:sinter,sunion,sdiff,sinterstore,sunionstore,sdiffstore。

sinter:求多个集合的交集

比如sinter key key1就是求两个key之间的交集,我们也可以求多个,不过我们设置的多个集合之间并没有交集,所以什么也没有返回。

sinterstore:求多个集合之间的交集并存在一个集合中

我们倒是发现了一个有意思的点是,key2原本的数据被清空了,只剩下了求完交集之后的元素。以上两个命令的时间复杂度是O(N*M),N和M分别代表的是最小的集合元素个数和最大的集合元素个数。

sunion,sunionstore:求并集元素(并把并集的元素放在另一个集合中)。

同样,还是具备清空的效果,那么对于以上两个命令的时间复杂度是O(N),这个N是总的元素个数。

有意思的是,不管我们如何更换求交集或者并集的set的次序,结果都是不会改变的,而差集不一样,差集存在一定的次序问题,比如sdiff key1 key2 和sdiff key2 key1之间的结果是不同的,因为差集的定义是key1中有的而key2中没有的,反过来肯定就不一样了:

就像这样。

同理,它的时间复杂度还是O(N),因为要遍历所有的元素,但是具体怎么实现的,就是Redis内部源码的实现了,我们后面更新。

以上就是Redis中set的基本命令了。

内部编码和应用场景

对于set来说,它内部的编码方式分为了两种,一种是intset一种是hashtable,如果set内部的元素是整数并且数据个数不多的就是使用的intset,如果是字符串一类的,那么就是hashtable了:

而且我们也能发现,内部编码方式一旦确定了,也是不太好轻易发生修改的。

它的应用场景的话也是非常显然的,比如使用QQ的时候,我们经常会收到某某某和你有多少个共同好友,是否加他为好友?这其实就是set求交集的结果,set也可以用来保存用户的标签,而用户的标签是多样化的,因为千人千面嘛,所以对于用户数据来说很多都是公司是共享的,比如A软件的用户数据有青年,18岁,喜欢看美女,B软件的用户数据有青年,18岁,喜欢跑车,那么就有一种业务是让两个公司对接一下用户数据。

这样用户的互联网画像也就是越来越完整了。

还有一个非常经典的应用场景是:用Set统计PV和UV数据。同学可自行下来探索~


zset

基本命令

对于zset和set来说,zset的特点是有序的,这里的有序代表的就是用权重来进行排序了

就像这张表一样,不同的三国猛将用武将值来进行排序,这样就构成了一个zset,不过因为引入了分数的概念,那么对于zset来说,它的命令操作自然就要复杂的多了。

不过我们首先引入一个问题,因为zset中元素是不允许重复的,分数是可以重复的,如果分数重复了,如何进行排序呢?实际上就按照元素的字典序来进行排序

既然引入了分数的概念,我们需要认识到一个点是zset存储的是元素,对于分数来说,它只是一个辅助工具而已。

zadd:向集合添加元素,不过这里涉及到了一些选项,比如NX|XX GT|LT INCR等 。

我们一个一个来,先是最普通的应用:

我们插入了之后,可以通过zrange查看,其中如果要带有分数的查看,就加上withscores就行了,这里默认的是升序,咱们虽然说zset是有序的,有序无非是升序和降序,对于zset来说默认的就是升序了。

对于选项,NX和XX 与之前我们学习string的时候有点差别

string是对key存在性的判断,zset是对成员存在性的判断。

因为两个成员都存在,所以自然就添加失败,对于XX来说,就更像是一种更新了:

而对于zadd来说它的返回值是新增了的元素个数(并不包括更新的元素)

对于LT和GT官方的描述是这样的,如果要更新元素,那么LT代表是less than,GT代表的是greater than,如果分数小于原来的就更新或者分数如果大于原来的就更新。

不过不幸的是,GT和LT是6.2之后才有的,我们的版本没到那里,所以我们先了解一下。

接着是CH,它的作用就是更改返回值,因为zadd的返回值是只返回新增加的元素,对于更新的元素是不管的,那么CH就是加上了更新的元素

最后是incr,它其实就是用来单个增加分数的,和之前的incr hincr没啥区别: 

它类似的有这个命令

但是zadd已经可以完成了。

这个命令的时间复杂度是logN:

它不像之前的hash list set一样的时间复杂度为O(1),它因为是有序的,并且要找到对应的位置,所以在它内部实现的时候,使用跳表利用有序的特点找到对应的位置。

zcard:查看集合中的所有元素

返回值是有几个元素。

但是因为引入了分数的概念,所以我们也可以使用zcount指定区间查看对应的元素个数:

那么我们想用zcount实现成zcard的效果,我们就可以:

使用inf,inf代表的是无穷大,那么我们指定闭区间为负无穷大到无穷大,就可以完成所有元素的遍历。

它的时间复杂度是O(logN)其中主要是为了找到Min和max对应的位置,然后因为zset内部会记录每个元素当前的次序,找到了之后做个减法,就可以得到对应的结果了。

不过这里有一个比较反人类的设定,如果我们想要设置为开区间,就在想要设置为开区间的元素前面加一个(即可:

zrevrange:逆序遍历,这个是对上面zrange的补充。

但是对应的索引是不变的。

既然我们可以通过索引来查看元素,我们是否也可以通过分数来查看呢?

使用命令zrangebyscore即可

zpopmax:删除最高分数的count个元素

首先我们先记住,它的时间复杂度是O(M * logN),其中N是key中的总元素,M是count的,我们有基础的话,很难不去想对于删除一个有序的特殊位置,比如尾部,它的时间复杂度是logN而不是O(1),这就让人有点疑惑了,因为按照Redis的技术是完全可以的,但是咱也不知道为啥没有优化,可能是技术人员认为优化这里完全没有必要,因为LogN已经很快了,所以在zpopmax的内部还是调用的通用的删除函数:

Bzpopmax:按照阻塞的方式删除最高分数的count个元素

和前面学习的blpop一摸一样的,它也是能够一次性检测多个key。它的时间复杂度是O(M * logN),这个M不是监测了几个key的M,而是在key上删除了元素的key个数。

zpopmin和bzpopmin:(按照阻塞的方式)删除最低分数的count个元素,因为用法几乎是一样的,所以咱在这里啊 也就不演示了。

zrank和zrevrank:从前往后(从后往前)计算对应的排名,对应的时间复杂度是O(logN)

zscore:返回对应member的分数,时间复杂度是O(1),这里的话就是Redis针对进行特殊的优化的,是采取了空间换时间的做法

zrem和zremrangebyrank:(根据排名)删除元素

有趣的是,根据排名的时候是可以使用负数的,-1代表的就是最后一名,不过用法还是从前往后的,时间复杂度是logN + M,其中N是成员总数,M是区间个数。

zincrby:调整某个元素的分数

但是改变了分数之后,整体还是会保持升序的。

交集并集差集

这里涉及到的命令有:zunion,zinter,zdiff,不过这三个命令都是6.2版本才开始支持,我们这里就暂时不讨论,我们这里讨论两个命令,一个是zinterstore,一个是zunionstore

destination代表的存储到这个key里面,numbers代表的是有几个集合参与运算,weights代表的是权重,虽然说是不同的key进行运算,但是根据实际情况不同的key自己的份量不同,所以运算的时候分数会乘上我们给定的权重,然后就是合并的时候,是总和呢还是最小的还是最大的,就是最后一个参数了,默认是按照总和。

这里使用到了numkeys来指定集合数,就非常像我们之前学习http的时候,报头里面有一个字段是正文部分的长度,如果这里出现了问题,就会导致粘包问题。

就像这样。

主要涉及到的还是score的计算,那你说,zunionstore的使用是不是一样的?完全一样嘛,所以这里就不演示了。

内部编码和应用场景

它的内部编码方式有ziplist和skiplist,如果元素较少,单个元素体积小,就使用ziplist,反之就使用skiplist,不过对于这里的ziplist还是使用的空间换取时间的做法,自然就不敢元素多了还用ziplist了。

明白啦,下面是为博客撰写的纯文字版内容,格式整洁、内容完整,可直接复制粘贴上传到博客平台(如 CSDN、掘金、个人博客等):


应用场景(AI生成)

排行榜系统

应用背景

排行榜常用于游戏、竞赛、学习平台等系统中,主要用来展示用户在某项指标上的相对排名,例如积分榜、活跃度榜、胜率榜等。系统要求能够快速地更新用户得分、获取前几名用户,以及查询某个用户的实时排名。

设计思路

在排行榜中,每个用户对应一个唯一标识(如用户 ID),而其得分则用于排序依据。Redis 的有序集合能够很好地完成这项任务。它会根据用户得分自动维持从低到高的顺序,同时支持查询、更新、分页等操作。

为了方便扩展,不同类型的排行榜可以用不同的 key 名进行管理,比如设置日榜、周榜、总榜等。

热榜系统

应用背景

在内容平台或社区系统中,文章、帖子或视频的“热度”是衡量内容受欢迎程度的重要指标。平台通常会根据内容的浏览量、点赞数、评论量等因素,计算一个热度得分,并据此展示热门内容排行榜。

与普通排行榜不同,文章热度往往涉及多维因素,还可能加入时间衰减,以保持榜单的新鲜感,避免长期霸榜。

设计思路

在 Redis 中,可以将每篇文章的唯一标识作为 ZSet 成员,将计算后的热度值作为排序依据。每当文章发生交互行为时(例如点赞、被浏览、被评论等),系统即可对其热度进行更新。

为了支持多分类内容推荐,也可以为不同的内容类别创建独立的热度榜,例如科技类、娱乐类、教育类等,每个分类对应一个有序集合。

热度计算方式

热度得分通常不是单一数据,而是由多个指标加权计算而来。例如,可以设定一个公式,综合点击量、点赞量、评论量等数据;还可以为旧文章引入时间衰减机制,防止内容因早期流量过大而长期占据榜单。

最终热度值由业务逻辑层计算完成,再写入 Redis 中的有序集合。


总结对比表

功能需求排行榜系统文章热度榜
目标成员用户 ID文章 ID
分数含义积分、活跃度热度(阅读、点赞等加权计算)
更新频率实时(如游戏加分)实时或周期更新(如点赞、点击)
查询方式Top N、用户排名、分页热榜分页、热度值查询
清理策略删除低排名用户,节省空间删除冷文章,保持热榜实时性

感谢阅读!

相关文章:

初识Redis · set和zset

目录 前言: set 基本命令 交集并集差集 内部编码和应用场景 zset 基本命令 交集并集差集 内部编码和应用场景 应用场景(AI生成) 排行榜系统 应用背景 设计思路 热榜系统 应用背景 设计思路 热度计算方式 总结对比表 前言&a…...

Prometheus+Grafana+K8s构建监控告警系统

一、技术介绍 Prometheus、Grafana及K8S服务发现详解 Prometheus简介 Prometheus是一个开源的监控系统和时间序列数据库,最初由SoundCloud开发,现已成为CNCF(云原生计算基金会)的毕业项目‌。它专注于实时监控和告警,特别适合云原生和分布式…...

用 AI + 前端实现一个简易产品图生成器:上传商品标题 → 多场景展示图自动生成

文章目录 一、项目背景与功能概述核心功能: 二、技术选型与环境准备安装依赖与 API Key 配置 三、核心功能模块实现1. 商品图生成器核心逻辑2. 组件模板与 UI 结构 四、功能拓展与优化建议(附代码思路)✅ 1. 本地历史记录可视化✅ 3. 支持图片…...

实现高效灵活的模糊搜索:JavaScript中的多条件过滤实践

现代Web应用中,数据搜索功能是用户体验的关键部分。本文将深入探讨如何实现一个高效灵活的模糊搜索函数,支持多条件组合查询、精确匹配、模糊匹配以及时间范围筛选。 需求分析 我们需要一个通用的搜索函数,能够处理以下场景: 多…...

ChatterBot的JupyterLab实践指南,从零开始构建AI聊天机器人

从手机上的语音助手到电商平台的客服机器人,这些能理解人类语言的程序背后,都离不开自然语言处理(NLP)技术的支撑。本文将以JupyterLab为实验平台,带您亲手打造一个会对话的AI机器人。通过这个项目,您不仅能…...

《深度学习》课程之卷积神经网络原理与实践教学设计方案

《深度学习》课程之卷积神经网络原理与实践教学设计方案 一、教学目标设计 (一)知识目标 学生能够准确描述卷积神经网络(CNN)的基本定义,包括其核心组成部分(如卷积层、池化层、全连接层等)及…...

快手OneRec 重构推荐系统:从检索排序到生成统一的跃迁

文章目录 1. 背景2. 方法2.1 OneRec框架2.2 Preliminary2.3 生成会话列表2.4 利用奖励模型进行迭代偏好对齐2.4.1 训练奖励模型2.4.2 迭代偏好对齐 3. 总结 昨天面试的时候聊到了OneRec,但是由于上次看这篇文章已经是一个月之前,忘得差不多了&#xff0c…...

算法——直接插入排序

目录 一、直接插入排序的定义 二、直接插入排序的原理 三、直接插入排序的特点 四、代码实现 一、直接插入排序的定义 直接插入排序是一种简单直观的排序算法,其基本思想是将一个元素插入到已经排好序的部分数组中,使得插入后的数组仍然保持有序。具…...

Linux 软件管理

文章目录 dpkg软件包管理工具APT软件包管理工具apt-get命令apt-cache Linux操作系统主要支持RPM和Deb两种软件包管理工具。 RPM(Redhat Package Manager)是一种用于互联网下载包的打包及安装工具。 其原始设计理念是开放的,不仅可以在Redhat平…...

电力实训中应注意以下安全事项

电力实训中应注意以下安全事项: 一、环境准备与设备检查 保持实训场地整洁通风,清除易燃物与杂物,确保操作空间充足。 电路容量需匹配设备功率,安装漏电保护器及空气开关。 非带电金属设备外壳应接地,定期检查线路…...

序列化-流量统计

新建文件夹及文件 编写流量统计的Bean对象 package com.root.mapreduce.writable; import org.apache.hadoop.io.Writable; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; //1 继承Writable接口 public class FlowBean implements Writab…...

矩阵游戏--二分图的匈牙利算法

https://www.luogu.com.cn/problem/P1129 学习路线---https://blog.csdn.net/qq_39304630/article/details/108135381 1.二分图就是两个独立的两个集合,如这里是行和列 2.匈牙利匹配就是媒婆拉媒,没伴侣或者伴侣可以换就将当前的塞给她 3.最后true的…...

spring security解析

Spring Security 中文文档 :: Spring Security Reference 1. 密码存储 最早是明文存储,但是攻击者获得数据库的数据后就能得到用户密码。 于是将密码单向hash后存储,然后攻击者利用彩虹表(算法高级(23)-彩虹表&…...

【技巧】chol分解时,矩阵非正定时的临时补救措施,以MATLAB为例

针对非正定矩阵无法进行标准Cholesky分解的解决方案及MATLAB代码实现,结合不同应用场景的需求分层解析 文章目录 数值修正方法修正Cholesky分解LDL分解 矩阵变换与重构特征值修正乘积法构造正定矩阵 替代分解与降维方法QR分解与SVD主成分分析(PCA&#x…...

Hi3518E官方录像例程源码流程分析(三)

文章目录 第二阶段,初始化第一阶段计算好的参数SAMPLE_COMM_SYS_Init 第三阶段,启动VI和chn捕获SAMPLE_COMM_VI_StartVi()SAMPLE_COMM_VI_StartBT656小阶段1 SAMPLE_COMM_VI_StartMIPI_BT1120()小阶段1 SAM…...

37.Java 异步回调(CompletableFuture 概述、CompletableFuture 使用)

一、CompletableFuture 概述 CompletableFuture 在 Java 里面被用于异步编程,异步通常意味着非阻塞,可以使得任务单独运行在与主线程分离的其他线程中,并且通过回调可以在主线程中得到异步任务的执行状态,是否完成,和是…...

数学建模AI智能体(4.16大更新)

别的不说就说下面这几点,年初内卷到现在,就现阶段AI水平,卷出了我比较满意的作品,这里分享给各位同学,让你们少走弯路: 1.轻松辅导学生 2.帮助学习 3.突破知识壁垒,缩短与大佬的差距 4.打破…...

Python 第三节 流程控制

目录 1.分支结构 条件控制 2.循环语句 3.循环控制语句 4.嵌套循环 控制代码执行的顺序 顺序结构分支结构循环结构 1.分支结构 条件控制 让代码有自主选择的能力, 当满足某个条件的时候执行对应的操作 1.1 if语句 语法格式 if 判断条件:执行语句(当判断条件为真的时候执…...

深入探究Linux编译器gcc/g++:从基础到进阶

目录 一、编译的幕后流程 (一)预处理:宏与文件的魔法融合 (二)编译:代码规范性的严格审视 (三)汇编:迈向机器语言的关键一步 (四)连接&a…...

用户态网络缓冲区

用户态网络缓冲区 缓冲区作用 用于临时存储数据以便高效地进行读写操作。用户态缓冲区位于用户空间中,与内核空间中的缓冲区(内核缓冲区)相对。 用户态接受缓存区 粘包问题,缓存非完整数据包 生产者的速度 > 消费者的速…...

解决Flutter 2.10.5在升级Xcode 16后的各种报错

Flutter 环境 Flutter version 2.10.5Dart version 2.16.2DevTools version 2.9.2CocoaPods version 1.16.2Xcode 16.3 问题一:XCResult parsing error: Error: This command is deprecated and will be removed in a future release, --legacy flag is required t…...

【学习笔记】计算机网络(八)—— 音频/视频服务

第8章 互联网上的音频/视频服务 文章目录 第8章 互联网上的音频/视频服务8.1概述8.2 流式存储音频/视频8.2.1 具有元文件的万维网服务器8.2.2 媒体服务器8.2.3 实时流式协议 RTSP 8.3 交互式音频/视频8.3.1 IP 电话概述8.3.2 IP电话所需要的几种应用协议8.3.3 实时运输协议 RTP…...

OpenCv高阶(三)——图像的直方图、图像直方图的均衡化

目录 一、直方图 1、计算并显示直方图 2、使用matplotlib方法绘制直方图(不划分小的子区间) 3、使用opencv的方法绘制直方图 (划分16个小的子亮度区间) 4、绘制彩色图像的直方图,将各个通道的直方图值都画出来 二、…...

OpenCV 图形API(39)图像滤波----同时计算图像在 X 和 Y 方向上的一阶导数函数SobelXY()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::gapi::SobelXY 函数是 OpenCV 的 G-API 模块中用于同时计算图像在 X 和 Y 方向上的一阶导数(即 Sobel 边缘检测)的一…...

领麦微:电炖锅红外测温传感器应用,告别糊锅干烧

领麦微红外测温传感器在电炖锅中的应用,特别是在应对高温环境、实现精准测温以保留食材营养、有效防止干烧与糊锅现象,以及提供安全烹饪新保障等方面,展现出了其独特的技术优势和应用价值。以下是对这些应用特点的深入剖析: 一、高…...

(Linux操作系统)自定义shell的实现

讲自定义shell之前我们先看一个东西,那就是进程替换,我们想要父进程fork之后的子进程之后运行一个全新的程序那该怎么办呢? 这里就要用一个叫做进程替换的一个东西了,程序替换是通过特定的接⼝,加载磁盘上的⼀个全新的…...

安卓jks提取pem和pk8文件

你需要安装: Java Keytool OpenSSL 系统要求:Mac/Linux/Windows 都可以。 keytool -importkeystore -srckeystore holder-keystore.jks -destkeystore holder-keystore.p12 -srcstoretype JKS -deststoretype PKCS12 -srcstorepass yzhafzKPj4 -dest…...

人脸检测-人脸关键点-人脸识别-人脸打卡-haar-hog-cnn-ssd-mtcnn-lbph-eigenface-resnet

链接:https://pan.baidu.com/s/1VhGdyIW5GWuTNkfbCEc5eA?pwdz0eo 提取码:z0eo --来自百度网盘超级会员V2的分享 创建环境 conda create -n 环境名称python3.8 conda activate 环境名称 然后配置环境 pip install requirements.txt 运行程序&…...

Gobuster :dir、dns、vhost

Gobuster 及其相关技术知识​​必须​​用于法律明确允许的场景!!! 1. dir 模式:目录/文件枚举 用途:扫描目标网站的目录和文件,常用于发现隐藏资源或敏感文件。 ​​关键参数​​: -u URL&am…...

Vue+Threejs项目性能优化

使用Vue和Three.js开发的项目,但运行一段时间后电脑内存就满了,导致性能下降甚至崩溃,分析内存泄漏的原因优化如下: 资源释放管理 手动释放Three.js资源: 在Vue组件的beforeDestroy或destroyed生命周期中&#xff0…...

Leetcode - 双周赛135

目录 一、3512. 使数组和能被 K 整除的最少操作次数二、3513. 不同 XOR 三元组的数目 I三、3514. 不同 XOR 三元组的数目 II四、3515. 带权树中的最短路径 一、3512. 使数组和能被 K 整除的最少操作次数 题目链接 本题实际上求的就是数组 nums 和的余数,代码如下&…...

[特殊字符] PostgreSQL MCP 开发指南

简介 🚀 PostgreSQL MCP 是一个基于 FastMCP 框架的 PostgreSQL 数据库交互服务。它提供了一套简单易用的工具函数,让你能够通过 API 方式与 PostgreSQL 数据库进行交互。 功能特点 ✨ 🔄 数据库连接管理与重试机制🔍 执行 SQL…...

等离子体浸没离子注入(PIII)

一、PIII 是什么?基本原理和工艺 想象一下,你有一块金属或者硅片(就是做芯片的那种材料),你想给它的表面“升级”,让它变得更硬、更耐磨,或者有其他特殊功能。怎么做呢?PIII 就像是用…...

TinyEngine 2.4版本正式发布:文档全面开源,实现主题自定义,体验焕新升级!

本文由体验技术团队李璇原创。 前言 TinyEngine低代码引擎使开发者能够定制低代码平台。它是低代码平台的底座,提供可视化搭建页面等基础能力,既可以通过线上搭配组合,也可以通过cli创建个人工程进行二次开发,实时定制出自己的低…...

gemini讲USRP

您好!USRP (Universal Software Radio Peripheral) 是一种软件无线电 (SDR) 设备系列,由 Ettus Research (现为 National Instruments 旗下公司) 开发和销售。USRP 提供了一个灵活且可配置的平台,用于设计、原型开发和部署各种无线通信系统。…...

智能超表面通信控制板--通道电压并行控制版

可重构智能超表面(Reconfigurable Intelligent Surface, RIS)技术是一种新兴的人工电磁表面技术,它通过可编程的方式对电磁波进行智能调控,从而在多个领域展现出巨大的应用潜力。超表面具有低成本、低能耗、可编程、易部署等特点&…...

Spring Task(笔记)

介绍: 应用场景: cron表达式: cron表达式在线生成器: 入门案例:...

YOLOv3的改进思路与方法:解析技术难点与创新突破

YOLOv3作为目标检测领域的经典算法,凭借其出色的速度和性能平衡获得了广泛应用。然而,随着计算机视觉技术的不断发展,YOLOv3在某些场景下的局限性也逐渐显现。本文将深入分析YOLOv3的不足之处,并系统介绍常见的改进策略和方法&…...

【解锁元生代】ComfyUI工作流与云原生后端的深度融合:下一代AIGC开发范式革命

## 从单机到云原生的认知跃迁 当2023年Stable Diffusion WebUI还在争夺本地显卡性能时,ComfyUI已悄然开启工作流模块化革命;当2024年AI绘画工具陷入"参数调优内卷",云原生技术正重塑AI开发的基础设施层。二者的深度融合&#xff0…...

shell 编程之正则表达式与文本处理器

目录 一、正则表达式 1. 概念 2. 作用 3. 分类 二、基础正则表达式(BRE) grep 命令选项 三、扩展正则表达式(ERE) 与 BRE 的区别 四、文本处理器 1. sed 工具 2. awk 工具 五、总结 总结对比 元字符总结 工具对比与…...

Shell编程之正则表达式与文本处理器

目录 一、引言 二、正则表达式 2.1 定义与用途 2.2 基础正则表达式 2.2.1 查找特定字符 2.2.2 利用中括号 “[]” 查找集合字符 2.2.3 查找行首 “^” 与行尾字符 “$” 2.2.4 查找任意一个字符 “.” 与重复字符 “*” 2.2.5 查找连续字符范围 “{}” 2.3 元字符总结…...

TMDOG——语言大模型进行意图分析驱动后端实践

语言大模型进行意图分析驱动后端实践 项目概述 项目地址:https://github.com/TMDOG666/AI_Backend_Demo 该项目通过语言大模型,通过分析用户意图、拆分任务、构建API调用链来驱动后端实践。 以一个简单的教务系统后端为例,将教务系统后端…...

未启用CUDA支持的PyTorch环境** 中使用GPU加速解决方案

1. 错误原因分析 根本问题:当前安装的PyTorch是CPU版本,无法调用GPU硬件加速。当运行以下代码时会报错:model YOLO("yolov8n.pt").to("cuda") # 或 .cuda()2. 解决方案步骤 步骤1:验证CUDA可用性 在Pyth…...

【mysql】Mac 通过 brew 安装 mysql 、启动以及密码设置

Mac 通过 brew 安装 mysql 、启动以及密码设置 使用 brew 安装 mysqlmysql 启动mysql密码设置参考文章: 使用 brew 安装 mysql brew install mysqlmysql 启动 下载完毕,终端告诉我们mysql数据库没有设置密码的,我们可以直接执行 mysql -u r…...

Vue2 nextTick

核心源码位置 Vue 2 的 nextTick 实现主要在 src/core/util/next-tick.js 文件中。 完整源码结构 import { noop } from shared/util import { handleError } from ./error import { isIE, isIOS, isNative } from ./envexport let isUsingMicroTask falseconst callbacks …...

Ubuntu 安装 NVIDIA显卡驱动、CUDA 以及 CuDNN工具

文章目录 一、简介二、查看显卡设备三、安装显卡驱动四、安装CUDA工具箱五、安装CuDNN小结 一、简介 NVIDIA 驱动:操作系统与 NVIDIA 显卡硬件之间的桥梁,负责驱动显卡硬件的运行,显卡的“底层操作系统”,一切的基础。CUDA&#…...

LeetCode算法题(Go语言实现)_50

题目 现有一个包含所有正整数的集合 [1, 2, 3, 4, 5, …] 。 实现 SmallestInfiniteSet 类: SmallestInfiniteSet() 初始化 SmallestInfiniteSet 对象以包含 所有 正整数。 int popSmallest() 移除 并返回该无限集中的最小整数。 void addBack(int num) 如果正整数 …...

idea报错java: 非法字符: ‘\ufeff‘解决方案

解决方案步骤以及说明 BOM是什么?1. BOM的作用2. 为什么会出现 \ufeff 错误?3. 如何解决 \ufeff 问题? 最后重新编译,即可运行!!! BOM是什么? \ufeff 是 Unicode 中的 BOM&#xff0…...

WPF依赖注入IHostApplicationLifetime关闭程序

WPF依赖注入IHostApplicationLifetime关闭程序 使用Application.Current.Shutdown();退出会报异常 应该使用 app.Dispatcher.InvokeShutdown(); Application.Current.Shutdown();app.Dispatcher.InvokeShutdown();static App app new();[STAThread]public static void Main(…...

如何在 IntelliJ IDEA 中安装通义灵码 - AI编程助手提升开发效率

随着人工智能技术的飞速发展,AI 编程助手已成为提升开发效率和代码质量的强大工具。在众多 AI 编程助手之中,阿里云推出的通义灵码凭借其智能代码补全、代码解释、生成单元测试等丰富功能,脱颖而出,为开发者带来了全新的编程体验。…...