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

初识Redis · 命令、数据结构补充、协议

目录

前言:

数据结构补充

stream

geospaital

Hyperloglog

bitmap

bitfield

渐进式遍历命令等

认识Redis客户端及协议


前言:

在前文,我们总览一下,我们已经介绍了什么是Redis,Redis的应用场景是什么,以及我们是从分布式系统引出了Redis,并且引入了负载均衡的概念,以及微服务的概念,具体是什么,各位同学可以移步到对应的Redis的第一篇文章。

那么从上文,我们知道了Redis可以使用在缓存,也可以使用为数据库,也可以使用为消息队列使用,不过Redis现在似乎不是很适合当作消息队列来用,虽然说list可以吧,一会儿我们介绍的stream也可以,但是还有更可以的,所以消息队列方面的话,Redis可能差了一点点意思。

我们在前面的几篇文章,介绍了常见的,常用的五种数据类型,分别是string,list,hash,set,zset,其中较为复杂的是zset,不过其实也还好。

那么,我们现在就来简单介绍一下补充的这几种数据类型,因为不常见,或者说在特定的应用场景才会使用,就简短的过了就行。

进入正题。


数据结构补充

stream

Redis 的 Stream(流)类型是一个 高性能的消息队列结构,用于存储一系列按时间顺序排列的消息项。它结合了传统消息队列(如 Kafka)和 Redis 自身高效的数据结构,既能做数据持久化,又能支持高并发消费。

特性描述
持久化存储不同于 Pub/Sub,消息是可以持久保存的
消费者组支持多个消费者可协同消费,支持消息确认和追踪
高吞吐、低延迟写入和读取性能极佳
轻量级 Kafka 替代对中小项目非常友好

可以说stream是一个加强版本的list的blpop和brpop版本。

命令说明
XADD添加一条消息到流中
XRANGE / XREVRANGE正序/逆序读取消息
XREAD拉取新消息
XGROUP CREATE创建消费者组
XREADGROUP消费者组方式读取消息
XACK确认消费消息

geospaital

我们可以上百度翻译查阅一下对应的意思,它的意思是

所以它是一个和地理位置有关的类型了,那么对于地理位置来说重要的是经纬度吧?所以它存储的内容是坐标。

Redis 的 Geospatial 类型 是在底层使用 Sorted Set(有序集合zset) 实现的扩展功能,允许你存储地理位置坐标(经纬度)并对其进行 范围查询、距离计算、排序等地理空间操作

命令说明
GEOADD添加地理位置(经度、纬度、名称)
GEODIST计算两个地点之间的距离
GEORADIUS(已弃用,推荐用 GEOSEARCH查询某点周围的位置
GEOSEARCH更灵活的地理范围搜索(圆形或矩形)
GEOPOS获取一个或多个元素的经纬度
GEOHASH获取元素的 Geohash 编码值(用于地图服务)

其实从定义也可以看到,它本质上还是zset,不过是多封装了一层而已。实际应用场景我们一打开地图,里面提供的地理信息就可以使用geospatial来完成。

Hyperloglog

我们前文提到了可以使用set来完成对某种数据的统计,比如某个游戏的用户的数据,我们需要用一个大榜来显示,那么我们假设这个数据是由一个longlong和int构成的,假设用户由一亿,那么就是12亿字节,对于12亿字节来说,也就1.2G左右的内存,这个内存看起来即便是对于我们日常的家用电脑也是完成能够承受的,但是实际上可能不止这么多数据。

而且,如果告诉你有一个数据结构可以用最多12KB的空间存放你想要的信息,你会如何选择呢?相信大多数同学选择的都是这个12KB的数据结构,这个数据结构就是Hyperloglog,但是它也有一定的缺点,比如它能够给你存放,但是怎么存放的你别管了。

HyperLogLog 是 Redis 中用于 基数(不重复元素数量)估算 的特殊数据结构,它可以在 极小的内存占用下(约12 KB),快速统计 大量数据中的唯一元素数量

其核心价值是:“以极低成本估算去重后的数量”,而不是保存或返回这些唯一元素本身。

所以更多的是计数,并且没有办法通过特征值返回原来的元素。

不过根据官方文档的介绍,这个误差值也只有0.81,也是完全可以接受的了。

当然你要是问怎么操作的,那就涉及到了对应的源码了,咱们后面再看咯。

bitmap

首先看到这名字咱们也应该知道怎么回事了,位图嘛,我们在C++阶段学习过位图,对于位图来说,它的优势就是可以用位来表示数据是否存在,这样就比单独用一个变量表示标志位强多了,这是非常节省空间的。

Bitmap 并不是 Redis 独立的数据类型,而是 Redis 基于 String 类型的位操作能力 实现的功能。它可以通过操作字符串的二进制位,实现 高效的布尔状态记录和统计

每个位(bit)可以表示一个对象的某种状态(如是否登录、是否签到),非常适合进行空间优化和大规模状态存储。

特性描述
空间高效每个状态只占用 1 位,1 字节可记录 8 个状态
支持位操作AND / OR / XOR / NOT 等逻辑运算
适用于布尔标记场景例如签到、活跃、已读等状态记录
命令说明
SETBIT key offset value设置指定偏移位(bit)的值(0/1)
GETBIT key offset获取指定偏移位的值
BITCOUNT key统计所有为 1 的位数量
BITOP operation destkey key1 [key2 ...]对多个 bitmap 进行位运算

当然了,具体怎么实现的还是根据源码了,我们后面再学习咯~

bitfield

这个东西大家可能看起来是非常陌生的,对于bitfield来说,咱们翻译一下,bitfield的意思就是位域,欸是不是有点熟悉了?换个名字:位段

是不是换成位段就非常熟悉了?这不就是我们在C语言阶段通过结构体学习的位段吗?

Redis 的 BITFIELD 命令是对 Bitmap 类型的一个高级扩展,它不仅可以对指定的位进行读写,还允许进行 整数类型的批量操作。通过 BITFIELD,用户可以高效地执行多位数据操作(如整数计数器、嵌入式计数器等),适合一些需要操作大规模二进制数据的应用场景。

BITFIELD 主要用于位图的分段操作,可以进行整数值的增减、查询和位操作,甚至支持直接对多个不同类型的字段进行批量操作。

特性描述
位操作扩展不仅限于布尔值,还可以操作各种整数类型(8 位、16 位、32 位等)
高效批量操作一次命令内支持多个字段操作,减少了多个命令的传输开销
对 Bitmap 扩展允许更复杂的运算,如按位增减、批量读取等
命令说明
BITFIELD key GET type offset获取指定位置的整数值(支持类型如 i8, i16, u32 等)
BITFIELD key SET type offset value设置指定位置的整数值
BITFIELD key INCRBY type offset increment增加指定位置的整数值
BITFIELD key AND type offset value按位与操作
BITFIELD key OR type offset value按位或操作

它的主要操作就是位操作了,具体怎么操作的我们还是看源码去咯~

注意了,以上的数据结构咱们了解一下就可以了,你要说真正用到的时候呢,咱们再去查官方文档也行~~~


渐进式遍历命令等

我们通过名字就可以知道,渐进式遍历的核心就是渐进式,即一部分一部分的遍历呗,那么为什么要渐进式遍历呢?

因为如果Redis中的数据库的键值对太多了的话,直接遍历完大概率是会阻塞住其他的命令的,这个时候的后果就不用我多说了吧。所以我们需要一个命令单独来慢慢的遍历数据库中的键值对。

命令作用可遍历的数据结构
SCAN遍历数据库中的键所有 key
SSCAN遍历集合中的元素Set
HSCAN遍历哈希表中的字段和值Hash
ZSCAN遍历有序集合中的成员及分值Sorted Set
XREAD / XREADGROUP渐进式读取 Stream 消息Stream(使用游标 ID)

渐进式遍历的命令有这么多,但是我们拿一个出来介绍就可以了,即scan命令,对于其他命令来说我们看看文档也是能够理解,更重要的是scan是能够遍历所有的数据结构的。

这是scan在官方文档中的介绍,第一个是游标位置,咱们可不要轻易的把这个位置认定为是下标位置,因为它根本就不是,咱们一会儿看就知道了。然后是匹配规则,对于匹配规则来说分为:

模式说明
*任意多个字符
?单个字符
[abc]匹配 abc 中的任意一个字符
[a-z]匹配范围内字符
[^e]匹配非 e 的单个字符 ✅
\*匹配字面上的 *

这个点我们其实在keys *那里是学习过了的,这里的scan是一样的。

然后是Count count,这里的意思是代表你要遍历多少个元素,但是你以为你给多少它就会给你多少个吗?并不是,这里的count只是一个建议,至于这个建议它是否接受呢,只能说接受一半,即它遍历的数据个数是在count左右的,但是会不会是count,那就不好说了。

这里的type是指定遍历哪种类型的元素,因为一个数据库里面有很多个元素,多种类型的,那么有的时候我们想要特定的元素,我们就可以通过这个选项来指定。

第一个返回的值代表的是下一次遍历开始位置,这里的位置不是下标哦,然后count我们指定一下遍历多少个元素即可。

如果scan返回的是0,那么才代表遍历结束了。不过我们在使用scan的时候要注意了,scan虽然解决了阻塞一类的问题,但是是非常不推荐在遍历的时候修改键值对的,即便它的遍历是可中断的,不对服务器保留状态产生影响的。

然后刚才我们提到了,Redis的数据库中的key有多种类型的,那么,这个数据库,是否有多个呢?是否能够像MySQL中一样,创建数据库,删除数据库呢?

不幸的是,Redis中没有这么丝滑的操作,它里面的数据库是固定了的,一共就只有16个,我们可以通过命令进行切换:

命令说明示例
SELECT index切换当前连接到指定数据库(0 ~ 15)SELECT 1
FLUSHDB清空当前数据库中的所有键FLUSHDB
FLUSHALL清空所有数据库(慎用)FLUSHALL
DBSIZE获取当前数据库中 key 的数量DBSIZE
MOVE key db将指定 key 移动到另一个数据库(前提是目标 DB 不存在同名 key)MOVE mykey 2
KEYS pattern获取匹配 pattern 的所有 key(慎用,生产环境不推荐)KEYS user:*
SCAN cursor安全遍历当前数据库所有 key(推荐)SCAN 0

所以同学们看到第三行的时候,是不是有点毛骨悚然了呢?我们使用的居然是清除所有数据库的操作。

更换数据库的时候我们也可以发现命令行终端也是发生了一定的改变的。其他命令同学们下来自行尝试吧,确实挺简单的,我们平常默认使用0号数据库就可以了。


认识Redis客户端及协议

不知道刚点进来的同学是否会有一定的疑问:啊?Redis的客户端不是我们一直使用的命令行吗?难道说这货还有其他的客户端?

是的,我们更多的时候,其实是通过调用Redis的API来实现定制化的客户端的。这里咱们需要对定制化的客户端有个简单的理解,像王者荣耀,我们是很难出一个它的定制化的客户端的,因为什么,因为在应用层我们没有办法通过协议来和王者荣耀的服务器进行通信

在之前学习http协议的时候,我们已经了解了对于自定义协议的一些内容,我们非常清楚,客户端想要和服务器进行通信是基于协议的,如果协议没有公开化,那么服务器给的数据包客户端是没有办法解析的,同理,客户端也不知道如何按照协议进行一系列的操作。

那么,我们定制化客户端的话,就明显需要知道对应的协议,那么如果Redis不公开对应的协议的话,咱们也就只能只用命令行进行操作了,好在Redis公开了自己的协议:RESP

它的协议叫做RESP,有人一看,欸,这货不是response的缩写吗,其实不是,就和之前的有序一样,相同的名字有着不同的意思,对吧。

RESP(Redis Serialization Protocol) 是 Redis 定义的应用层协议,用于客户端与服务端之间命令的序列化和响应的解析。它是状态无关的、基于文本的协议,既具有良好的可读性,也便于高性能实现,尤其适用于 Redis 典型的高并发、短连接场景。

我们在第一次涉及到协议的时候,非常粗鄙的认为了协议相当于是共同的数据类型,那么在RESP中涉及的数据表示为:

类型前缀描述
简单字符串(Simple String)+一般表示状态信息,例如 +OK
错误(Error)-错误信息,例如 -ERR wrong type
整数(Integer):数字,例如 :1000
批量字符串(Bulk String)$带长度的字符串,如 $6\r\nfoobar
数组(Array)*表示命令由多个部分组成,如 *2\r\n$3\r\nGET\r\n$3\r\nkey\r\n

比如发送一个GET mykey,通过RESP编码进行转化之后,实际发送的是:

*2\r\n$3\r\nGET\r\n$5\r\nmykey\r\n
  • RESP 2 是目前 Redis 的默认协议(适用于 Redis 2.6 ~ Redis 6)。

  • Redis 6 开始支持 RESP3,提供了更多原生类型(如 Map、Set、属性字段等),更适合新型客户端。

  • 客户端可以通过 HELLO 3 命令切换协议版本。

那么既然我们知道了对应的协议,我们是否就要手动开始进行协议的序列化等内容呢?当然不用,对应的API接口已经有大佬帮我们写好了,我们直接使用即可。

那么就是需要配置对应的Rdis环境了。

那么如何配置环境,我们下文再细说~~

以上就是对类型的简单补充,以及简单的了解了一下渐进式遍历和管理数据库的命令,最后用RESP协议进行了一个收场。


感谢阅读!

相关文章:

初识Redis · 命令、数据结构补充、协议

目录 前言: 数据结构补充 stream geospaital Hyperloglog bitmap bitfield 渐进式遍历命令等 认识Redis客户端及协议 前言: 在前文,我们总览一下,我们已经介绍了什么是Redis,Redis的应用场景是什么&#xff…...

DBA工作常见问题整理

MVCC机制: PostgreSQL的多版本并发控制(MVCC)是其核心特性之一,它允许数据库在高并发环境下保持高性能的同时提供事务隔离。 MVCC通过维护数据的多个版本实现: 读操作不阻塞写操作写操作不阻塞读操作避免使用锁实现并发控制 PostgreSQL的MVCC特点 写时…...

云转型(cloud transformation)——不仅仅是简单的基础设施迁移

李升伟 编译 云转型不仅仅是迁移基础设施,更是重塑企业运营、创新及价值交付的方式。它具有战略性、持续性,并影响着人员、流程和平台。 ☁️ 云转型涉及以下内容: 🔄 应用现代化——从单体架构转向微服务架构。 ⚙️ 运营自动…...

SpringBoot 定时任务

启用定时任务‌ 首先确定需要启用定时任务的SpringBoot类,然后添加注解(EnableScheduling)以启用定时任务 package com.mt.visitorauth.anjian.service;import org.springframework.scheduling.annotation.EnableScheduling;EnableScheduli…...

常见的低代码策略整理

低代码策略通过简化开发流程、降低技术门槛、提升效率,帮助用户快速构建灵活可靠的应用。这些策略的核心优势体现在以下方面: 快速交付与降本增效 减少编码需求:通过可视化配置(如变量替换、表达式函数)替代传统编码…...

HFSS(李明洋)学习记录1

Hfss操作记录 HFSS—solution type:选择求解类型Modeler—units:设置hfss内部的基本单位可选mm或者in(英寸)设置端口激励—波端口:右键selection model/face 选中对应的表面之后;右键assign excitation/po…...

泛目录站群技术架构演进观察:2025年PHP+Java混合方案实战笔记​

https://www.zhanqun.xin/ 在参与某跨国电商平台SEO优化项目时,我们团队对市面上主流站群系统进行了为期半年的技术评估。最终选择部署的2025版无极多功能泛目录站群程序,其技术实现路径与工程化设计思路颇具参考价值,现整理关键发现如下。 …...

sentinel安装部署及测试--实践

一、什么是 Sentinel? Sentinel 是阿里巴巴开源的一款用于微服务流量控制和系统防护的中间件。它的主要功能包括: **流量控制(Flow Control):**限制系统的 QPS 或线程数,防止因流量过大导致系统崩溃。 **…...

Yocto项目实战教程 · 第4章:4.1小节元数据

🔍 B站相应的视频教程: 📌 Yocto项目实战教程-第4章-4.1小节-元数据 记得三连,标为原始粉丝。 在嵌入式Linux系统构建中,Yocto项目凭借其高度模块化、可配置的特性成为主流工具。而其背后的关键支撑之一,便…...

应用镜像是什么?轻量应用服务器的镜像大全

应用镜像是轻量应用服务器专属的,镜像就是轻量应用服务器的装机盘,应用镜像在原有的纯净版操作系统上集成了应用程序,例如WordPress应用镜像、宝塔面板应用镜像、WooCommerce等应用,阿里云服务器网aliyunfuwuqi.com整理什么是轻量…...

关于Java集合中对象字段的不同排序实现方式

📊 关于Java集合中对象字段的不同排序实现方式 #Java集合 #排序算法 #Comparator #性能优化 一、排序基础:两种核心方式对比 方式Comparable接口Comparator接口实现位置目标类内部实现独立类或匿名内部类排序逻辑自然排序(固定规则&#xf…...

2000-2017年各省发电量数据

2000-2017年各省发电量数据 1、时间:2000-2017年 2、来源:能源年鉴、国家统计局 3、指标:行政区划代码、城市、年份、发电量 4、范围:31省 5、指标说明:发电量是指在特定时间内,发电设备(如…...

第二十二天 - 安全加固实践 - 漏洞扫描工具开发 - 练习:SSH暴力破解防护

前言 随着网络安全威胁日益严峻,掌握基础防护技能成为开发者必备能力。本文将从零开始,通过安全加固实践、漏洞扫描工具开发、SSH暴力破解防护三个维度,带您快速构建安全防御体系。所有示例均附带完整代码,建议边阅读边实践。 一…...

【AI】React Native中使用Zustand框架及自动生成选择器

引言 随着React Native在移动应用开发领域的广泛应用,高效的状态管理变得尤为重要。Zustand作为一个轻量级的状态管理库,提供了简洁而强大的API,特别适合于React Native应用开发。本报告将详细介绍如何在React Native项目中使用Zustand框架&…...

MySQL GTID集合运算函数总结

MySQL GTID 有一些运算函数可以帮助我们在运维工作中提高运维效率。 1 GTID内置函数 MySQL 包含GTID_SUBSET、GTID_SUBTRACT、WAIT_FOR_EXECUTED_GTID_SET、WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS 4个内置函数,用于GTID集合的基本运算。 1.1 GTID_SUBSET(set1,set2) …...

4.1.2 Redis协议与异步方式

文章目录 4.1.2 Redis协议与异步方式1. redis pipeline2. redis事务1. MULTI2. EXEC3. DISCARD4. WATCH 3. lua脚本1. lua基础语法2. Lua 脚本中访问 Redis 的方式3. Lua 脚本中的 KEYS 和 ARGV4、返回值5、错误处理EVALSHA 来代替 EVAL 4. ACID特性分析5. redis发布订阅1. 工作…...

ecovadis审核有什么原则?什么是ecovadis审核,有什么意义

EcoVadis审核概述 EcoVadis是一家全球知名的企业可持续发展评级机构,成立于2007年,旨在通过评估企业的环境(E)、社会(S)和治理(G)表现,帮助跨国公司管理供应链的可持续性…...

bitnet-b1.58-2B-4T和三进制

最近有个模型挺火啊现在都排进了HF排行榜的第四了 模型叫做microsoft/bitnet-b1.58-2B-4T 其实非常小的一个模型,只有2B,那这东西有多大意义呢? 它主要探索一个打法 也就是这篇论文 The era of 1-bit llms: All large language models ar…...

k8s报错kubelet.go:2461] “Error getting node“ err=“node \“k8s-master\“ not found“

问题 首先最初问题: [rootk8s-master ~]# kubectl get pods -owide --all-namespaces The connection to the server 192.168.2.129:6443 was refused - did you specify the right host or port?检查kubelet状态 查看kubelet status报找不到master节点 [rootk8…...

计算serise数据的唯一值数量

1. Series.unique() 功能:返回 Series 中所有唯一值的 数组(顺序按首次出现排列)。 返回值类型:numpy.ndarray(用户可能误认为是列表,但实际是 NumPy 数组)。 对 NaN 的处理:包含 …...

数组理论基础

什么是数组 在Java中,数组是一种数据结构,用来存储同一类型的多个元素。这些元素可以按照索引访问,方便对数据进行操作和管理。数组在编程中应用广泛,是一种基本且重要的数据结构。 数组的基本概念 1. 元素:数组中的…...

Linux操作系统--静态库和动态库的生成and四种解决加载找不到动态库的四种方法

目录 必要的知识储备: 生成静态库: 生成动态库: 解决加载找不到动态库的四种方法: 第一种:拷贝到系统默认的库路径 /usr/lib64/ 第二种:在系统默认的库路径/usr/lib64/下建立软链接 第三种&#xff1…...

安科瑞能源管理系统如何解决工业园区能源管理难,运维成本高的问题?

一、行业痛点:高能耗背后的“隐形炸弹 1. 能源管理粗放:水、电、气、冷热等多类型能源分散管理,人工抄表效率低,跑冒滴漏难追踪。 2. 电能质量隐患:变频设备引发谐波干扰,导致设备停机、电容器烧毁&#…...

大模型赋能工业制造革新:10个显效可落地的应用场景

在工业4.0的汹涌浪潮中,制造业正面临着前所未有的转型挑战。传统制造模式在效率、成本、质量等方面逐渐难以满足市场需求,企业急需借助新技术实现数字化转型,以提升自身竞争力。在此背景下,基于先进的数据分析技术、大模型、知识图…...

【android bluetooth 框架分析 02】【Module详解 4】【Btaa 模块介绍】

1. 背景 我们在上一篇文章中介绍 HciHal 模块时&#xff0c;有如下代码 // system/gd/hal/hci_hal_android_hidl.ccvoid ListDependencies(ModuleList* list) const {list->add<SnoopLogger>();if (common::init_flags::btaa_hci_is_enabled()) {list->add<ac…...

gitee新的仓库,Vscode创建新的分支详细步骤

第一步点击创建分支输入新分支的名字 第二步 第三步 第四步...

OpenHarmony - 小型系统内核(LiteOS-A)(五)

OpenHarmony - 小型系统内核&#xff08;LiteOS-A&#xff09;&#xff08;五&#xff09; 六、文件系统 虚拟文件系统 基本概念 VFS&#xff08;Virtual File System&#xff09;是文件系统的虚拟层&#xff0c;它不是一个实际的文件系统&#xff0c;而是一个异构文件系统之…...

Unity动态合批(Dynamic Batching)解析

什么是动态合批&#xff1f; 动态合批是Unity引擎的一项核心优化技术&#xff0c;用于减少绘制调用&#xff08;Draw Calls&#xff09;数量&#xff0c;提高游戏性能。它通过将多个使用相同材质的小型可移动物体的渲染操作合并为单个绘制调用&#xff0c;减轻CPU向GPU发送命令…...

【Python】迭代器(Iterator)vs 生成器(Generator)

迭代器&#xff08;Iterator&#xff09; vs 生成器&#xff08;Generator&#xff09; 1.迭代器&#xff08;Iterator&#xff09;1.1 是什么&#xff1f;1.2 示例1.3 适用场景 2.生成器&#xff08;Generator&#xff09;2.1 是什么&#xff1f;2.2 示例2.3 适用场景 3.迭代器…...

el-input 限制只能输入负数、正数或2位小数的数值

需求 el-input需要指定输入格式&#xff0c;当键盘事件触发时限制只能输入负数、正数或2位小数的数值。 解决方案 自定义校验数字输入的键盘事件方法函数。 具体实现步骤 1、创建验数字输入的键盘事件方法 /*** 校验数字输入的键盘事件* param {Event} event - 键盘事件对…...

对话框类别组件编写

形如如图所示的对话框的编写 一、基本组件的定义 <template><div><el-dialogclass"cust-dialog":title"title":model-value"show":show-close"showClose":top"toppx":width"widthpx":close-on-…...

ICMAN防水触摸芯片 - 复杂环境下精准交互,提升触控体验

▍核心优势 ◆ 超强抗干扰能力 ◆ 工业级设计&#xff0c;一致性和稳定性好 ▍提供场景化解决方案 【智能厨电矩阵】抽油烟机档位调节 | 电磁炉火力触控 | 洗碗机模式切换 【卫浴设备方案】淋浴房雾化玻璃控制 | 智能马桶触控面板 | 浴缸水位感应 【工业控制应用】仪器仪…...

深度剖析:生成式人工智能备案和登记的关键差异

在人工智能技术日新月异的当下&#xff0c;生成式人工智能以前所未有的态势广泛渗透至各个领域&#xff0c;从内容创作到智能客服&#xff0c;从图像生成到数据分析&#xff0c;其应用场景正呈指数级拓展。2024 年&#xff0c;网信部门协同相关部门&#xff0c;依据《生成式人工…...

kotlin + spirngboot3 + spring security6 配置登录与JWT

1. 导包 implementation("com.auth0:java-jwt:3.14.0") implementation("org.springframework.boot:spring-boot-starter-security")配置用户实体类 Entity Table(name "users") data class User(IdGeneratedValue(strategy GenerationType.I…...

d3.js绘制组合PCA边缘分布图

用d3.js研发了个组合PCA边缘分布图&#xff1b; 组合PCA边缘分布图中包括pca散点图、散点图可根据数据自动分为连续型和离散型、还有散点的各种配置、边缘有箱线边缘、密度边缘、柱状边缘一个各个边缘的配置等等&#xff0c;大部分你能想到的配置都是自行传参调整的&#xff0…...

开源语音合成模型SparkTTS使用

一、环境配置 git clone https://github.com/SparkAudio/Spark-TTS.git pip install -r requirements.txt 二、模型下载 从modelscope进行下载&#xff0c;pip install modelscope 创建一个download.py import torchfrom modelscope import snapshot_downloadsnapshot_dow…...

课程9. 数据降维

课程9. 数据降维 维度灾难奇异值分解SVD 变换SVD 的几何意义 SVD分解应用示例图像压缩文本分析推荐系统中的应用* 主成分分析PCA演示使用 PCA 降低多元数据的维数PCA 说明单词的语义相似性 t-SNE 维度灾难 机器学习和数据科学中的关键问题之一是数据高维性问题。我们已经遇到过…...

24-25【动手学深度学习】AlexNet + Vgg

1. AlexNet 1.1 原理 1.2 代码 import torch from torch import nn from d2l import torch as d2lnet nn.Sequential(nn.Conv2d(1, 96, kernel_size11,stride4, padding1), nn.ReLU(),nn.MaxPool2d(kernel_size3, stride2),nn.Conv2d(96, 256, kernel_size5, padding2), nn.…...

1.Axum 与 Tokio:异步编程的完美结合

摘要 深入解析 Axum 核心架构与 Tokio 异步运行时的集成&#xff0c;掌握关键原理与实践技巧。 一、引言 在当今的软件开发领域&#xff0c;高并发和高性能是衡量一个系统优劣的重要指标。对于 Web 服务器而言&#xff0c;能够高效地处理大量并发请求是至关重要的。Rust 语言…...

快速认识:数据库、数仓(数据仓库)、数据湖与数据运河

数据技术核心概念对比表 概念核心定义核心功能数据特征典型技术/工具核心应用场景数据库结构化数据的「电子档案柜」&#xff0c;按固定 schema 存储和管理数据&#xff0c;支持高效读写和事务处理。实时事务处理&#xff08;增删改查&#xff09;&#xff0c;确保数据一致性&…...

【Linux】第十章 配置和保护SSH

1. 简单说下ssh如何实现用户的免密登录&#xff1f; &#xff08;1&#xff09;生成公钥和私钥&#xff1a;使用 ssh-keygen -t rsa 命令&#xff0c;在客户端&#xff08;即你登录的机器&#xff09;上生成一对密钥——公钥&#xff08;~/.ssh/id_rsa.pub&#xff09;和私钥&…...

量子计算:开启未来科技之门的钥匙

在当今科技飞速发展的时代&#xff0c;量子计算正逐渐从实验室走向实际应用&#xff0c;成为全球科技领域的焦点之一。它有望为众多行业带来前所未有的变革&#xff0c;从密码学、药物研发到金融风险评估等&#xff0c;量子计算的潜力不可限量。 一、量子计算的原理 量子计算基…...

基础知识 - 结构体

1、结构体类型与结构体变量 1.1 结构体的定义 结构体是一种自定义的数据类型&#xff0c;它把多个不同类型的变量封装在一起&#xff0c;形成一个新的复合数据类型。可以定义该结构体类型的变量&#xff0c;与使用 int 定义变量的方法相同 结构体是一些值的集合&#xff0c;这…...

uniapp上传图片时(可选微信头像、相册、拍照)

参考文献&#xff1a;微信小程序登录——头像_onchooseavatar-CSDN博客 <button open-type"chooseAvatar" chooseavatar"onChooseAvatar"> </button>onChooseAvatar(e) {uni.showLoading({title: 上传中...,mask: true});uni.uploadFile({url…...

2025年4月16日华为笔试第二题200分

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 02. 智慧旅游路线规划 问题描述 LYA正在开发一款智慧旅游APP,该APP需要为游客规划城市景点之间的最佳路线。城市有 N N...

面试题之高频面试题

最近开始面试了&#xff0c;410面试了一家公司 针对自己薄弱的面试题库&#xff0c;深入了解下&#xff0c;也应付下面试。在这里先祝愿大家在现有公司好好沉淀&#xff0c;定位好自己的目标&#xff0c;在自己的领域上发光发热&#xff0c;在自己想要的领域上&#xff08;技术…...

一路磕磕绊绊解决flutter doctor 报错CocoaPods not installed

flutter doctor执行之后&#xff0c;出现以下错误: 错误消息&#xff1a; ✗ CocoaPods not installed.CocoaPods is a package manager for iOS or macOS platform code.Without CocoaPods, plugins will not work on iOS or macOS.For more info, see https://flutter.dev/t…...

探寻Gson解析遇到不存在键值时引发的Kotlin的空指针异常的原因

文章目录 一、问题背景二、问题原因三、问题探析Kotlin空指针校验Gson.fromJson(String json, Class<T> classOfT)TypeTokenGson.fromJson(JsonReader reader, TypeToken<T> typeOfT)TypeAdapter 和 TypeAdapterFactoryReflectiveTypeAdapterFactoryRecordAdapter …...

面试算法高频08-动态规划-01

动态规划 递归知识要点 递归代码模板&#xff1a;提供递归代码的标准形式public void recur(int level, int param) &#xff0c;包含终止条件&#xff08;if (level> MAX_LEVEL)&#xff09;、当前层逻辑处理&#xff08;process(level, param)&#xff09;、向下一层递归…...

【AI】以Llama模型为例学习如何进行LLM模型微调

以Llama模型为例学习如何进行LLM模型微调 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 以Llama模型为例学习如何进行LLM模型微调背景预训练微调全部微调参数高效微调低秩适配 (LoR…...