【Redis_Day5】String类型
【Redis_Day5】String类型
- String
- 操作String的命令
- set和get:设置、获取键值对
- mset和mget:批量设置、获取键值对
- setnx/setex/psetex
- incr和incrby:对字符串进行加操作
- decr/decrby:对字符串进行减操作
- incrbyfloat:浮点数加/减
- 一个汉字究竟占几个字节?
- append:字符串拼接
- redis中字符串也有下标
- getrange:返回key对应的string的子串
- setrange:替换字符串指定部分
- strlen:获取字符串的长度
- 字符串相关命令小结
- flushall:删库
- String内部编码
- String的应用场景
- 缓存
- 计数功能
- 共享会话(Session)
String
redis中的所有key都是字符串类型,value也可能是字符串类型。
String类型的值可以是字符串,包含⼀般格式的字符串或者类似JSON、XML格式的字符串;可以是数字,可以是整型或者浮点型;甚⾄可以是⼆进制流数据,例如图⽚、⾳频、视频等。但是⼀个字符串的最⼤值不能超过512MB。
redis内部存储字符串的时候,完全是按照⼆进制流的形式保存的,所以Redis是不会做任何编码转换的,客户端传⼊的命令中使用的是什么字符集编码,就存储什么字符集编码。
比如mysql8采用utf8mb4编码,mysql存数据的时候会默认对数据按照ytf8mb4进行编码。redis存数据时不会这样,redis内部没有设计字符集,所以使用redis时遇到乱码的概率很小。
操作String的命令
在redis中,操作不同类型的数据需要用不同的命令,下面总结一些操作String类型数据的命令:
set和get:设置、获取键值对
通过set和get可以操作字符串String。
set和get的基础操作不再赘述。
总结set的用法:
参考redis文档
:SET key value [expiration EX seconds|PX milliseconds] [NX|XX]
其中:
[]相当于一个独立单元,表示可选项(可有可无)
|是或者意思
[]和[]之间可以同时存在
set后可以跟选项:
set key1 value1 ex xxx
(相当于set key1 value1和expire key xxx的结合,优化后减少了网络通信的次数且保证了命令原子性):把键值对存到redis中并为该键值对设置过期时间为xxx。如果key1不存在,创建新的键值对,如果key存在,让value1覆盖旧的value,覆盖过程中可能会改变原来的数据类型,此时原来key的ttl(生存时间)也会失效。- 同理,
set key1 value1 px xxx
(相当于set key1 value1和pexpire key xxx的结合) set key1 value1 nx/xx
:如果这条命令后加了nx或者xx,
nx表示如果key1已经存在,返回nil本次设置无效,如果key1不存在,设置key1的值为value1并返回OK。
xx表示如果key1不存在,返回nil本次设置无效,如果key1存在,用本次设置的value1覆盖之前设置的并返回OK。
nx是默认项。
总结get的用法:
get只支持字符串类型的value。如果value是其他类型,使用get获取就会出错。
比如用get获取list类型的value:
mset和mget:批量设置、获取键值对
相比于get和set,mset和mget可以一次操作多组键值对。优点很明显:减少网络通信的次数,提高效率。
学会使⽤批量操作,可以有效提⾼业务处理效率,但是要注意,每次批量操作所发送的键的数量也不是无节制的,否则可能造成单⼀命令执⾏时间过⻓,导致Redis阻塞。
总结mset的用法:
mset key value [key value ...]
:一次性设置多个key的值。返回值永远是OK。
总结mget的用法:
mget key [key ...]
:一次性获取多个key的值。如果对应的key不存在或者对应的数据类型不是string,返回nil。
mset和mget的时间复杂度都是O(N),N是当前命令中key的数量。所以时间复杂度也就是O(1)。
setnx/setex/psetex
setnx key value
:setnx即加了nx选项的set命令。key存在,设置失败,key不存在,设置成功。
setex 键 值 过期时间
:setex即加了ex选项的set命令。把键值对存到redis中并且设置过期时间,过期时间的单位是秒。
psetex 键 值 过期时间
:psetex即加了px选项的set命令。过期时间的单位是ms。
incr和incrby:对字符串进行加操作
incr:针对value+1
incrby:针对value+n
总结incr的用法:
incr key
:key对应的value必须是整数(8byte整数)。返回值是value+1之后的值。如果key对应的value不是⼀个整型或者范围超过了64位有符号整型,则报错。
incr key(key不存在)
:incr操作的key如果不存在,则视为key对应的value是0。
总结incrby的用法:
incrby key n
:将key对应的string表⽰的数字加上n。
如果key不存在,则视为key对应的value是0。如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错。
- incrby可以加负数。相当于decrby。
decr/decrby:对字符串进行减操作
decr:针对value-1
decrby:针对value-n
decr,decrby和incr,incrby的用法完全一样。
key5不存在:
incrbyfloat:浮点数加/减
decr、decrby、incr、incrby都只能算整数。
incrbyfloat:针对String类型的value进行加一个小数或减一个小数操作。减一个小数相当于加上一个负的小数。vlalue可以是小数。
没有decrbyfloat这个命令!!!
如果key不存在,则视为key对应的value是0。如果key对应的不是string,或者不是⼀个浮点数,则报错。允许采⽤科学计数法表示浮点数。
decr、decrby、incr、incrby、incrbyfloat的时间复杂度都是O(1)。
一个汉字究竟占几个字节?
如果编码方式是utf8,一个汉字占3个字节。如果编码方式是unicode,一个汉字占2个字节。
最典型的就是在java中,char类型的单位是字符,一个汉字是一个字符,此时一个字符等于2个字节,因为char用的是Unicode;String类型的单位也是字符,一个汉字是一个字符,此时一个字符等于三个字节,因为String背后的编码方式utf8。在Java标准库中,char和String之间的变化方式非常丝滑,程序员感受不到。
mysql中的数据类型varchar(N),单位也是字符,一个汉字是一个字符,所以一个字符可能是多个字节。至于一个字符具体相当于多少个字节,要看varchar(N)采用的编码方式。
C++中字符串的单位是字节。
redis中字符串的单位是字节。但是redis内部没有设计任何字符集,一个汉字占3个字节是怎么回事?这是因为xshell终端默认的字符编码是utf8,在xshell终端输入汉字后,汉字先按照utf8编码的,而一个汉字在utf8字符集中通常是3个字节,所以在redis中一个汉字占三个字节。
每中编码方式的码表都不一样。同一个汉字,使用的编码方式不同,得到的对应值也不同。
append:字符串拼接
字符串也支持一些常用的操作,比如拼接,获取/修改字符串的内容,获取字符串的长度,redis中支持这样的命令。
总结append的用法:
-
append key value
:如果key已经存在并且是⼀个string,命令会将value追加到原有string的后边。如果key不存在,则效果等同于SET命令(创建一个新的键值对)。时间复杂度是O(1)。
-
返回值是追加完成之后String的长度。String长度的单位是字节。
get keys后,显示的是用utf8编码后的“你好”。(客户端传⼊的命令中使用的是什么字符集编码,就存储什么字符集编码。)
其中\x是转义字符,不属于数据内容。 -
在启动redis客户端时,加上
--raw
选项,可以使redis客户端自动把二进制数据尝试翻译。
redis中字符串也有下标
redis中字符串也有下标,第一个字符处于0下标。最后一个字符可以用-1下标表示。
getrange:返回key对应的string的子串
总结getrange的用法:
getrange key start end
:返回key对应的string的子串,由start和end确定(左闭右闭)。start为0,表示的是字符串第一个字符。使⽤负数表示倒数。-1代表倒数第⼀个字符,-2代表倒数第⼆个,其他的与此类似。超过范围的偏移量会根据string的长度调整成正确的值。
- 如果字符串中保存的是汉字,此时进行子串切分,很可能切出来的就不是完整的汉字了。
setrange:替换字符串指定部分
总结setrange的用法:
setrange key offset value
:从下标offset开始,用value覆盖字符串。返回值是替换后的新的字符串的长度。0,表示的是字符串第一个字符。
- 如果当前key的value是一个中文字符串,进行setrange,容易出问题。就比如说一个汉字占三个字节,但是只覆盖了这个汉字的前两个字节。
- 如果key不存在,
如下面例子:key1不存在:
\x是转义字符,表示这是一个十六进制数据。\x00表示凭空生成一个字节,这个字节里面的内容是0x00(0x00是16进制)。
strlen:获取字符串的长度
总结strlen的用法:
strlen key
:获取key对应的string的⻓度。当key存放的值不是string类型时,报错。返回值是字符串的长度。如果key不存在,返回0。
字符串相关命令小结
flushall:删库
flushall
:清楚redis上的所有数据 ,也就是删库。
String内部编码
字符串类型的内部编码有3种:
• int:8个字节(64bit)的长整型。
• embstr:小于等于39个字节的字符串。(短字符串)
• raw:大于39个字节的字符串。(长字符串)
Redis会根据当前值的类型和⻓度动态决定使用哪种内部编码实现。
redis存储小数,本质上是把小数当做字符串来存储。这意味这每次进行算术运算,都需要把字符串转换成小数,运算结束后再把结果转回字符串保存。
String的应用场景
缓存
redis作缓存的时候,常被用来存储“热点”数据。热点数据就是被高频使用的数据。不同场景下对高频的定义也不同。由于Redis具有⽀撑⾼并发的特性,所以缓存通常能起到加速读写和降低后端压⼒的作⽤。
redis+mysql组成的缓存存储架构:
假设把最近使用到的数据作为热点数据存储在redis中,解释上面的场景:
redis做缓存的时候,应用服务器访问数据,先查询Redis,如果redis上数据存在,就直接从redis上取数据交给应用服务器,不继续访问mysql了。如果redis上数据不存在,再读取mysql,把读到的结果返回给应用服务器的同时,把这个数据也写入到redis中。
但在上述场景中存在一个问题:随着时间的推移,有越来越多的key在redis上访问不到,从而从mysql读取并写入redis,redis中的数据会越来越多。
解决办法:
- 把数据写到redis中的同时,给这个key设置一个过期时间。
- redis在内存不足的时候,提供了淘汰策略。
用伪代码模拟上述场景,进一步理解String在其中的应用:
redis用key-value存储用户信息,
key:user:info:uid
,value是String类型。
例如:
(JSON格式的数据)
key=user:info:student01,value=经过序列化后的01用户对象字符串;
key=user:info:student02,value=经过序列化后的02用户对象字符串;
mysql用表user_info保存用户信息:
//当用户发来请求时,假设业务根据用户uid获取用户信息:
//业务层
UserInfo getUserInfo(long uid) {//先查询redis,假设用户信息保存在"user:info:<uid>"对应的键中:String key = "user:info:" + uid;//从redis中获取对应的值String value = 这里执行redis中的get key命令;
//如果缓存命中(hit),即如果redis上存在这个信息if (value != null) {// 假设我们的⽤⼾信息是按照 JSON 格式存储的UserInfo userInfo = JSON反序列化(value);return userInfo;}
//如果redis上数据不存在,再读取mysql,把读到的结果返回给应用服务器的同时,把这个数据也写入到redis中(miss)if (value == null) {// 从mysql数据库中,根据 uid 获取⽤⼾信息UserInfo userInfo = MySQL执⾏SQL语句:select * from user_info where uid = <uid>// 如果mysql表中没有 uid 对应的⽤⼾信息if (userInfo == null) {响应 404return null;}// 如果mysql表中有 uid 对应的⽤⼾信息//1. 将⽤⼾信息序列化成 JSON 格式String value = JSON序列化(userInfo);//写⼊缓存,为了防⽌数据腐烂(rot),设置过期时间为 1 ⼩时(3600 秒)Redis 执⾏命令:set key value ex 3600//2. 返回⽤⼾信息return userInfo;}
}
关于key的命名:
与MySQL等关系型数据库不同的是,Redis没有表、字段这种命名空间,而且也没有对键名有强制要求(除了不能使用⼀些特殊字符)。但设计合理的键名,有利于防止键冲突和项目的可维护性,比较推荐的⽅式是使用**"业务名:对象名:唯⼀标识:属性"**作为键名。
例如:
MySQL的数据库名为vs,用户表名为user_info,
那么对应的键名可以使用"vs:user_info:6379"、“vs:user_info:6379:name"来表示,如果当前Redis只会被⼀个业务使用,可以省略业务名"vs:”。
如果键名太长,则可以使用团队内部都认同的缩写替代,例如:
"user_info:6379:name"可以被"ui:6379:na
"代替。毕竟键名过长,会导致Redis的性能明显下降的。
从redis中取出来的用户信息是String格式(JSON格式),通过JSON反序列化可以把它变成对象。
从mysql中取出来的用户信息是对象,通过JSON序列化可以把转成字符串然后再存到redis中。
计数功能
许多应⽤都会使⽤Redis作为计数的基础⼯具,它可以实现快速计数、查询缓存的功能,同时数据可以异步处理或者落地到其他数据源。
例如使用Redis来记录视频网站的视频播放次数:用户每播放⼀次视频,相应的视频播放数就会⾃增1。
redis并擅长数据统计,比如再上述场景中,统计播放量前100的视频有哪些,基于redis完成这个任务很麻烦。相比之下,如果是mysql存储上述数据,一个sql命令就完成了。但是用mysql记录,遇上高并发场景又容易挂。
解决办法:把redis上统计相关的数据通过异步的方式同步到统计数据仓库上,统计数据仓库可能是mysql,hdfs等。
异步方式不是redis收到xxx个播放请求就立即把它也写到仓库中,而是根据仓库的接收能力把数据持续地写入到仓库中,只要保证最终能把数据都正确写入到仓库中即可。
实际中要开发⼀个成熟、稳定的真实计数系统,要面临的挑战远不止如此简单:防作弊、按照不同维度计数(完播率等)、避免单点问题(数据备份)、数据持久化到底层数据源等。
共享会话(Session)
会话是客户端和服务器再交互过程中产生的一些专属于该客户端的中间状态的数据。
cookie是浏览器的会话存储机制,session是服务器的会话存储机制。
cookie和session中都是用键值对存储数据的。
为了更好的理解共享会话(Session),先来看看**服务器之间不共享会话(session)**的情况:
session分散存储:
上面是一个分布式Web服务,在这个服务中,用户的Session信息(例如用户登录信息)保存在各自的服务器中,但这样会造成⼀个问题:出于负载均衡的考虑,分布式服务会将用户的访问请求均衡到不同的服务器上,并且通常无法保证用户每次请求都会被均衡到同⼀台服务器上,这样当用户刷新⼀次访问是可能会发现需要重新登录,这个问题是用户⽆法容忍的。
如何解决上述问题:
用redis集中管理session,即服务器之间通过redis共享会话session。
以上是Redis的字符串数据类型可以使⽤的三个典型场景,其适⽤场景远不止于此。
总结两个xshell热键:
ctrl+s:冻结当前画面。
ctrl+q:解除冻结。
下次见~
相关文章:
【Redis_Day5】String类型
【Redis_Day5】String类型 String操作String的命令set和get:设置、获取键值对mset和mget:批量设置、获取键值对setnx/setex/psetexincr和incrby:对字符串进行加操作decr/decrby:对字符串进行减操作incrbyfloat:浮点数加…...
【CVE-2024-48694】OfficeWeb365 SaveDraw
漏洞描述 OfficeWeb365 v.8.6.1.0和v7.18.23.0中的文件上传漏洞允许远程攻击者通过pw/savedraw组件执行任意代码。 影响版本: V8.6.1.0; V7.18.23.0 网络测绘 “OfficeWeb365” 漏洞信息 POST /PW/SaveDraw?path../../Content/img&idx6.ashx H…...
leecode134.加油站
一开始想的是总体上加油量超过耗油量那么就一定能找到一个起始点可以跑一圈,这个起始点选择补充油量与耗油量差值最大的那gas个点,但是我没仔细审题,这个起始点是索引逐次1绕一圈而不是随便选择,gas[5,8,2,8],cost[6,5…...
分层架构 IM 系统之 Entry 部署模式
在前面的一篇技术短文(分层架构 IM 系统之架构解读)中,对【分层架构】进行了详细分析;今天我们聊一下【入口层】Entry 的部署模式。 Entry 作为 IM 系统整个后端集群的入口,直接与客户端建立 TCP 长连接,E…...
【Java从入门到放弃 之 多线程 四】
多线程 四 多线程 四读写锁的使用代码演示 乐观锁的使用代码演示 信号量代码演示 倒计时门禁代码演示 循环栅栏Condition详解代码案例 多线程 四 读写锁的使用 上一篇我们介绍到了可重入锁,现在我们来介绍读写锁。实际上,使用可重入锁的时候我们就可以…...
OpenHarmony-3.驱动HDF
OpenHarmony HDF 框架 1.OpenHarmony HDF 框架概述 OpenHarmony驱动子系统采用C面向对象编程模型构建,通过平台解耦、内核解耦,兼容不同内核,提供了归一化的驱动平台底座,旨在为开发者提供更精准、更高效的开发环境,力…...
udp_socket
文章目录 UDP服务器封装系统调用socketbind系统调用bzero结构体清0sin_family端口号ip地址inet_addrrecvfromsendto 新指令 netstat -naup (-nlup)包装器 的两种类型重命名方式包装器使用统一可调用类型 关键字 typedef 类型重命名系统调用popen关于inet_ntoa UDP服务器封装 系…...
Java NIO 核心知识总结
在学习 NIO 之前,需要先了解一下计算机 I/O 模型的基础理论知识。还不了解的话,可以参考我写的这篇文章:Java IO 模型详解。 一、NIO 简介 在传统的 Java I/O 模型(BIO)中,I/O 操作是以阻塞的方式进行的。…...
音频信号采集前端电路分析
音频信号采集前端电路 一、实验要求 要求设计一个声音采集系统 信号幅度:0.1mVpp到1Vpp 信号频率:100Hz到16KHz 搭建一个带通滤波器,滤除高频和低频部分 ADC采用套件中的AD7920,转换率设定为96Ksps ;96*161536 …...
PyTorch基础学习03_数学运算自动微分
目录 一、数学运算 1、基本操作 2、三角函数 3、统计学函数 二、保存和加载 三、并行化 四、自动微分 1、相关概念 2、计算梯度 1.标量梯度计算 2.向量梯度计算 3.多标量梯度计算 4.多向量梯度计算 5.矩阵梯度计算 3、梯度上下文控制 1、梯度控制 2、梯度更新…...
HarmonyOS4+NEXT星河版入门与项目实战(16)------ 状态管理 @State(页面数据刷新与渲染)
文章目录 1、@State装饰器2、视图渲染演示1、无嵌套的对象属性值变化时可以触发页面渲染2、嵌套对象的嵌套属性值变化时不能够触发页面刷新渲染3、数组中对象的属性值变化时不能触发页面刷新渲染3、总结1、@State装饰器 2、视图渲染演示 常规的 string、number 这里就不演示了…...
K8s 一键部署 MongoDB 的 Replica-Set 和 MongoDB-Express
什么是 MongoDB 副本集? MongoDB 副本集(Replica-Set)是一个分布式数据库系统,它包含一个主节点和多个从节点。主节点负责处理所有写操作,从节点用于读取数据。当主节点发生故障时,从节点可以自动选举一个…...
React Native的界面与交互
React Native (RN) 是一个由 Facebook 开发的开源框架,用于构建跨平台的移动应用程序。它允许开发者使用 JavaScript 和 React 来创建原生 iOS 和 Android 应用。RN 的出现极大地简化了移动应用的开发过程,使得开发者可以更快速、更高效地构建高质量的应…...
【探寻密码的奥秘】-001:解开密码的神秘面纱
目录 1、密码学概述1.1、概念1.2、目的1.3、应用场景 2、密码学的历史2.1、第一时期:古代密码时代2.2、第二时期:机械密码时代2.3、第三时期:信息密码时代2.4、第四时期:现代密码时代 3、密码学的基本概念3.1、一般通信系统3.2、保…...
C++实现Raft算法
概念部分 Raft 算法是一种用于实现分布式系统中的一致性的算法。它是为了容易理解而设计的,其目标是实现和 Paxos 算法相同的功能,但更加容易理解和实现。Raft 算法在分布式系统中尤其关键,因为它帮助系统中的多个节点就其数据的准确状态达成…...
FastApi教程
FastAPI框架 fastapi,一个用于构建 API 的现代、快速(高性能)的web框架。 fastapi是建立在Starlette和Pydantic基础上的,Pydantic是一个基于Python类型提示来定义数据验证、序列化和文档的库。Starlette是一种轻量级的ASGI框架/…...
HTB:WifineticTwo[WriteUP]
目录 连接至HTB服务器并启动靶机 信息搜集 使用rustscan对靶机TCP端口进行开放扫描 使用nmap对靶机开放端口进行脚本、服务扫描 使用curl访问靶机8080端口 使用浏览器直接访问/login路径 漏洞利用 使用searchsploit搜索该WebAPP漏洞 Payload USER_FLAG:bb…...
ubuntu16.04在ros使用USB摄像头-解决could not open /dev/video0问题
首先检查摄像头 lsusb 安装 uvc camera 功能包 sudo apt-get install ros-indigo-uvc-camera 安装 image 相关功能包 sudo apt-get install ros-kinetic-image-* sudo apt-get install ros-kinetic-rqt-image-view运行 uvc_camera 节点 首先输入roscore 然后另外开一个终端输入…...
大模型专栏--什么是大模型
什么是大模型 来自 chatGPT 的回答: “大模型”通常指的是在机器学习和深度学习领域,尤其是自然语言处理(NLP)和计算机视觉(CV)中,具有大量参数和复杂结构的模型。这些模型通常需要大量的数据和…...
LLaMA-Mesh: Unifying 3D Mesh Generation with Language Models 论文解读
目录 一、概述 二、相关工作 1、LLMs到多模态 2、3D对象生成 3、自回归的Mesh生成 三、LLaMA-Mesh 1、3D表示 2、预训练模型 3、有监督的微调数据集 4、数据集演示 四、实验 1、生成的多样性 2、不同模型text-to-Mesh的比较 3、通用语境的评估 一、概述 该论文首…...
golang实现TCP服务器与客户端的断线自动重连功能
1.服务端 2.客户端 生成服务端口程序: 生成客户端程序: 测试断线重连: 初始连接成功...
项目实战:基于深度学习的人脸表情识别系统设计与实现
大家好,人脸表情识别是计算机视觉领域中的一个重要研究方向,它涉及到对人类情感状态的理解和分析。随着深度学习技术的发展,基于深度学习的人脸表情识别系统因其高精度和强大的特征学习能力而受到广泛关注。本文旨在探讨基于深度学习的人脸表…...
【mongodb】社区版8:改变配置bindip和授权
更改配置 sudo systemctl restart mongod (base) root@k8s-master-pfsrv:/home/zhangbin# sudo tail -n 20 /var/log/mongodb/mongod.log 日志感觉是成功了:{"t":{"$date":"2024-11-19T19:57:47.076+08:00"...
python入门9-函数基础
函数介绍 <1>什么是函数 请看如下代码: print(" _ooOoo_ ") print(" o8888888o ") print(" 88 . 88 ") print(" …...
AMD(Xilinx) FPGA配置Flash大小选择
目录 1 FPGA配置Flash大小的决定因素2 为什么选择的Flash容量大小为最小保证能够完成整个FPGA的配置呢? 1 FPGA配置Flash大小的决定因素 在进行FPGA硬件设计时,选择合适的配置Flash是我们进行硬件设计必须考虑的,那么配置Flash大小的选择由什…...
TypeScript学习笔记(二)
接一 四、类型声明 使用 : 来对变量或函数形参,进行类型声明: let a: string //变量a只能存储字符串 let b: number //变量b只能存储数值 let c: boolean //变量c只能存储布尔值 a hello a 100 //警告:不能将类型“number”分配给类型“…...
Centos Stream 9安装Jenkins-2.485 构建自动化项目步骤
官网:https://www.jenkins.io/ 1 下载 环境准备: 版本支持查询:https://pkg.jenkins.io/redhat-stable/ 安装JDK17:https://blog.csdn.net/qq_44870331/article/details/140784297 yum -y install epel-release wget upgradew…...
多目标粒子群优化(Multi-Objective Particle Swarm Optimization, MOPSO)算法
概述 多目标粒子群优化(MOPSO) 是粒子群优化(PSO)的一种扩展,用于解决具有多个目标函数的优化问题。MOPSO的目标是找到一组非支配解(Pareto最优解),这些解在不同目标之间达到平衡。…...
【网络系统管理】2023年全国职业院校技能大赛:组策略--10套题组合--1
1、限制访问C盘; (1)搜索《我的电脑》 (2)用户配置\策略\管理模板\Windows组件\文件资源管理器 2、禁止运行run.exe; (1)搜索《应用程序》 (2)用户配置\策略\管理模板\系统...
【Golang】——Gin 框架中的 API 请求处理与 JSON 数据绑定
在现代 Web 开发中,API(特别是 RESTful API)是前后端分离架构的核心。Gin 框架提供了丰富的功能来处理 API 请求和 JSON 数据,使得开发者可以快速构建高效的接口服务。本篇博客将从基础到深入,全面讲解如何使用 Gin 框…...
在Linux下配置gitee与Github的远程仓库
目录 前言 云服务器下载git 检测是否下载成功git Linux下配置gitee远程仓库 代码提交演示 git三板斧 Linux下配置Github远程仓库 最后的提醒 前言 那么本篇文章将是在,你已经创建了本地仓库的基础上,在Linux下配置gitee的远程仓库的步骤ÿ…...
自动化测试过程操作细节
一、软件与框架介绍 1. Postman 读音:[pəʊstmən](剖斯特曼) 介绍:API开发与测试的得力助手,通过直观界面发送HTTP请求,查看响应数据。支持环境变量、集合、脚本等功能。 主要特点:易于使用…...
iic协议
IIC(Inter-Integrated Circuit)协议,也被称为I2C协议,是一种由荷兰的PHILIPS公司(现为NXP半导体公司)开发的简单、高效的通信协议。以下是关于IIC协议的详细介绍: 一、IIC协议概述 定义&#…...
uniapp、js判断输入的内容是整数
清奇的思路 通过取余运算符 % 来检查 输入的内容是否为整数 for (var i 0; i < this.list.length; i) {if (this.list[i].times % 1 ! 0) { // 使用取余运算符检查是否为整数uni.showToast({icon: none,title: 请输入整数的套餐次数,})return;}}...
《Qt Creator:人工智能时代的跨平台开发利器》
《Qt Creator:人工智能时代的跨平台开发利器》 一、Qt Creator 简介(一)功能和优势(二)快捷键与效率提升(三)跨平台支持(四)工具介绍与使用主要特性:使用步骤…...
The Yarn application application_xxx_xxx doesn‘t exist in RM
本文主要解决flink在standalone模式下,flink run却一直使用yarn-session模式的问题。 问题 有个客户找到笔者,问题是报错如下: 分析 笔者先从环境入手,首先要确定的是flink是使用了什么模式。确认过后是使用standalone模式。 那就很奇怪&a…...
爬虫实战:采集知乎XXX话题数据
目录 反爬虫的本意和其带来的挑战目标实战开发准备代码开发发现问题1. 发现问题[01]2. 发现问题[02] 解决问题1. 解决问题[01]2. 解决问题[02] 最终结果 结语 反爬虫的本意和其带来的挑战 在这个数字化时代社交媒体已经成为人们表达观点的重要渠道,对企业来说&…...
【C++篇】像解谜一样转换字符串:stoi 带你走向整数的世界
文章目录 前言 在现代 C 编程中,字符串与数字之间的转换是非常常见的需求。随着编程语言的发展,C 提供了多种方式来处理这种转换。stoi(string to integer)函数正是为了简化这一任务而被引入的。 在 C 的早期版本中,字…...
小U数数问题
问题描述 小U正在数偶数,从 0,2,4,6,8,10,12,…0,2,4,6,8,10,12,… 开始,依次将这些数连在一起,形成一个无穷长的字符串,例如:"0246810121416..."。小U想知道这个字符串中的第 nn 个字符是什么。 测试样例 …...
Rocky Linux 系统安装/部署 Docker
1、下载docker-ce的repo文件 [rootlocalhost ~]# curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker.repo % Total % Received % Xferd Average Speed Time Time Time Current Dloa…...
程序语言语法上手题目合集
程序语言语法上手题目合集 1跑步2猜年龄3Vigenre 密码 1跑步 2.跑步 - 蓝桥云课 枚举日期,判断是否符合条件即可。 参考程序: #include<stdio.h> int y2022,m1,d1; int week6; int month[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};int judg…...
MCU通过APB总线与FPGA 数据交互(实现JATG 模块的控制)
问题出发点: 通过MCU 的APB 将数据发送到fpga 端;fpga 端实现 jtag 模块功能,支持状态机TAP的移动主要是:从IDLE 移动到 shirft-IR 发送指令数据然后再回到 IDLE ,从 IDLE 移动到shirft-DR 发送用户数据再回到IDLE;从而可以 通过 mcu端实现jtag 协议控制。 为了实现 MC…...
Mysql的UPDATE(更新数据)详解
MySQL的UPDATE语句是用于修改数据库表中已存在的记录,本文将详细介绍UPDATE语句的基本语法、高级用法、性能优化策略以及注意事项,帮助您更好地理解和应用这一重要的SQL命令。 1. 基本语法 单表更新 单表更新的基本语法如下: UPDATE [LOW…...
【AI最前线】DP双像素sensor相关的AI算法全集:深度估计、图像去模糊去雨去雾恢复、图像重建、自动对焦
Dual Pixel 简介 双像素是成像系统的感光元器件中单帧同时生成的图像:通过双像素可以实现:深度估计、图像去模糊去雨去雾恢复、图像重建 成像原理来源如上,也有遮罩等方式的pd生成,如图双像素视图可以看到光圈的不同一半&#x…...
如何使用AWS Lambda构建一个云端工具(超详细)
首发地址(欢迎大家访问):如何使用AWS Lambda构建一个云端工具(超详细) 1 前言 1.1 无服务器架构 无服务器架构(Serverless Computing)是一种云计算服务模型,它允许开发者构建和运行…...
Scala—数组(数组定义、数组常用方法等)— 用法详解
Scala Scala-数组-用法详解 Scala一、数组的定义1. new 关键字2. Array 对象的 apply 方法3. 创建多维数组 二、数组常用方法1. length:获取数组的长度。2. apply:通过索引获取数组中的元素。3. update:通过索引更新数组中的元素。4. foreach…...
使用 Elastic 收集 Windows 遥测数据:ETW Filebeat 输入简介
作者:来自 Elastic Chema Martinez 在安全领域,能够使用 Windows 主机的系统遥测数据为监控、故障排除和保护 IT 环境开辟了新的可能性。意识到这一点,Elastic 推出了专注于 Windows 事件跟踪 (ETW) 的新功能 - 这是一种强大的 Windows 原生机…...
二分排序
二分问题之前遇到很多次了,不过一直是手写完整二分,现在转变一下想法,直接使用函数lower_bound和upper_bound更方便 lower_bound 有序数组中 查找第一个不小于指定值的位置。 本质二分代码: int lower_bound_custom(int* arr, i…...
数据库---HSQLDB使用教程详解
本学校期末的课程设计要求使用HSQLDB数据库,作为一个小众且轻量的数据库,很少人接触过,再加上同学们都问这个方面,所以就出教程,展示怎么使用HSQLDB。 第一步:启动HSQLDB 下载HSQLDB的jar包,因…...
Makefile基础应用
1 使用场景 在Linux环境下,我们通常需要通过命令行来编译代码。例如,在使用gcc编译C语言代码时,需要使用以下命令。 gcc -o main main.c 使用这种方式编译代码非常吃力,每次调试代码都需要重新在命令行下重新编译,重复…...