Redis - String 字符串

一、基本认识

字符串类型是Redis最基础的数据类型,关于字符串需要特别注意:

  1. Redis中所有的键的 类型都是字符串类型,⽽且其他⼏种数据结构也都是在字符串类似基础上构建的,例如列表和集合的 元素类型是字符串类型,所以字符串类型能为其他4种数据结构的学习奠定基础。
  2. 如图2-7 所⽰,字符串类型的值实际可以是字符串,包含⼀般格式的字符串或者类似JSON、XML格式的字符串;数字,可以是整型或者浮点型;甚⾄是⼆进制流数据,例如图⽚、⾳频、视频等。不过⼀个字符 串的最⼤值不能超过512MB。

由于Redis内部存储字符串完全是按照⼆进制流的形式保存的,所以Redis是不处理字符集 编码问题的,客⼾端传⼊的命令中使⽤的是什么字符集编码,就存储什么字符集编码。

图2-7字符串数据类型

二、常见命令

2.1、SET

将string 类型的value设置到key中。如果key之前存在,则覆盖,⽆论原来的数据类型是什么。之 前关于此key的TTL也全部失效。

语法:

SET key value [expiration EX seconds|PX milliseconds] [NX|XX]

命令有效版本:1.0.0之后

时间复杂度:O(1)

选项:

SET命令⽀持多种选项来影响它的⾏为:

  • EX seconds⸺使⽤秒作为单位设置key的过期时间。
  • PX milliseconds⸺使⽤毫秒作为单位设置key的过期时间。
  • NX ⸺只在key不存在时才进⾏设置,即如果key之前已经存在,设置不执⾏。
  • XX ⸺只在key存在时才进⾏设置,即如果key之前不存在,设置不执⾏。

注意:由于带选项的SET命令可以被 SETNX 、 SETEX、PSETEX等命令代替,所以之后的版本中,Redis可能进⾏合并。

返回值:

  • 如果设置成功,返回OK。
  • 如果由于SET指定了NX或者XX但条件不满⾜,SET不会执⾏,并返回(nil)

⽰例:

 redis> EXISTS mykey(integer) 0redis> SET mykey "Hello"OKredis> GET mykey"Hello"redis> SET mykey "World" NX(nil)redis> DEL mykey(integer) 1redis> EXISTS mykey(integer) 0redis> SET mykey "World" XX(nil)redis> GET mykey(nil)redis> SET mykey "World" NXOKredis> GET mykey"World"redis> SET mykey "Will expire in 10s" EX 10OKredis> GET mykey"Will expire in 10s"redis> GET mykey  # 10秒之后(nil)

2.2、GET

获取key对应的value。如果key不存在,返回nil。如果value的数据类型不是string,会报错。

语法:

GET key

命令有效版本:1.0.0之后

时间复杂度:O(1)

返回值:key对应的value,或者nil当key不存在。

⽰例:

 redis> GET nonexisting(nil)redis> SET mykey "Hello""OK"redis> GET mykey"Hello"redis> DEL mykey(integer) 1redis> EXISTS mykey(integer) 0redis> HSET mykey name Bob(integer) 1redis> GET mykey(error) WRONGTYPE Operation against a key holding the wrong kind of value

2.3、MGET

⼀次性获取多个key的值。如果对应的key不存在或者对应的数据类型不是string,返回nil。

语法:

MGET key [key ...]

命令有效版本:1.0.0之后

时间复杂度:O(N)N是key数量

返回值:对应value的列表

⽰例:

 redis> SET key1 "Hello""OK"redis> SET key2 "World""OK"redis> MGET key1 key2 nonexisting1) "Hello"2) "World"3) (nil)

2.4、MSET

⼀次性设置多个key的值。

语法:

 MSET key value [key value ...]

命令有效版本:1.0.1之后

时间复杂度:O(N)N是key数量

返回值:永远是OK

⽰例:

 redis> MSET key1 "Hello" key2 "World""OK"redis> GET key1"Hello"redis> GET key2"World"

图2-8多次getvs单次mget

 

 如图2-8所⽰,使⽤mget/mset由于可以有效地减少了⽹络时间,所以性能相较更⾼。假设⽹络耗 时1毫秒,命令执⾏时间耗时0.1毫秒,则执⾏时间如表2-2所⽰。

表2-21000次get和1次mget对⽐

操作时间
1000 次get1000 x1+1000x0.1=1100毫秒
1 次mget1000个键1 x1+1000x0.1=101毫秒

        学会使⽤批量操作,可以有效提⾼业务处理效率,但是要注意,每次批量操作所发送的键的数量也不 是⽆节制的,否则可能造成单⼀命令执⾏时间过⻓,导致Redis阻塞。

2.5、SETNX

设置key-value但只允许在key之前不存在的情况下。

语法:

SETNX key value

命令有效版本:1.0.0之后

时间复杂度:O(1)

返回值:1表⽰设置成功。0表⽰没有设置。

⽰例:

 redis> SETNX mykey "Hello"(integer) 1redis> SETNX mykey "World"(integer) 0redis> GET mykey"Hello"

三、计数命令

3.1、INCR

        将key对应的string表⽰的数字加⼀。如果key不存在,则视为key对应的value是0。如果key对 应的string不是⼀个整型或者范围超过了64位有符号整型,则报错。

语法:

INCR key

命令有效版本:1.0.0之后

时间复杂度:O(1)

返回值:integer类型的加完后的数值。

⽰例:

 redis> EXISTS mykey(integer) 0redis> INCR mykey(integer) 1redis> SET mykey "10""OK"redis> INCR mykey(integer) 11redis> SET mykey "234293482390480948029348230948""OK"redis> INCR mykey(error) value is not an integer or out of rangeredis> SET mykey 'not a number'"OK"redis> INCR mykey(error) value is not an integer or out of range

3.2、INCRBY

        将key对应的string表⽰的数字加上对应的值。如果key不存在,则视为key对应的value是0。如 果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错。

语法:

INCRBY key decrement

命令有效版本:1.0.0之后

时间复杂度:O(1)

返回值:integer类型的加完后的数值。

⽰例:

 redis> EXISTS mykey(integer) 0redis> INCRBY mykey 3(integer) 3redis> SET mykey "10""OK"redis> INCRBY mykey 3(integer) 13redis> INCRBY mykey "not a number"(error) ERR value is not an integer or out of rangeredis> SET mykey "234293482390480948029348230948""OK"redis> INCRBY mykey 3(error) value is not an integer or out of rangeredis> SET mykey 'not a number'"OK"redis> INCRBY mykey 3(error) value is not an integer or out of range

3.3、DECR

        将key对应的string表⽰的数字减⼀。如果key不存在,则视为key对应的value是0。如果key对 应的string不是⼀个整型或者范围超过了64位有符号整型,则报错。

语法:

 DECR key

命令有效版本:1.0.0之后

时间复杂度:O(1)

返回值:integer类型的减完后的数值。

⽰例:

 redis> EXISTS mykey(integer) 0redis> DECR mykey(integer) -1redis> SET mykey "10""OK"redis> DECR mykey(integer) 9redis> SET mykey "234293482390480948029348230948""OK"redis> DECR mykey(error) value is not an integer or out of rangeredis> SET mykey 'not a number'"OK"redis> DECR mykey(error) value is not an integer or out of range

3.4、DECYBY

        将key对应的string表⽰的数字减去对应的值。如果key不存在,则视为key对应的value是0。如 果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错。

语法:

DECRBY key decrement

命令有效版本:1.0.0之后

时间复杂度:O(1)

返回值:integer类型的减完后的数值。

⽰例:

 redis> EXISTS mykey(integer) 0redis> DECRBY mykey 3(integer) -3redis> SET mykey "10""OK"redis> DECRBY mykey 3(integer) 7redis> DECRBY mykey "not a number"(error) ERR value is not an integer or out of rangeredis> SET mykey "234293482390480948029348230948""OK"redis> DECRBY mykey 3(error) value is not an integer or out of rangeredis> SET mykey 'not a number'"OK"redis> DECRBY mykey 3(error) value is not an integer or out of range

3.5、INCRBYFLOAT

        将key对应的string表⽰的浮点数加上对应的值。如果对应的值是负数,则视为减去对应的值。如果 key 不存在,则视为key对应的value是0。如果key对应的不是string,或者不是⼀个浮点数,则报错。允许采⽤科学计数法表⽰浮点数。

语法:

INCRBYFLOAT key increment

命令有效版本:2.6.0之后

时间复杂度:O(1)

返回值:加/减完后的数值。

⽰例:

redis> SET mykey 10.50"OK"redis> INCRBYFLOAT mykey 0.1"10.6"redis> INCRBYFLOAT mykey -5"5.6"redis> SET mykey 5.0e3"OK"redis> INCRBYFLOAT mykey 2.0e2"5200"

        很多存储系统和编程语⾔内部使⽤CAS机制实现计数功能,会有⼀定的CPU开销,但在Redis中完全 不存在这个问题,因为Redis是单线程架构,任何命令到了Redis服务端都要顺序执⾏。

四、其他命令

4.1、APPEND

        如果key已经存在并且是⼀个string,命令会将value追加到原有string的后边。如果key不存在, 则效果等同于SET命令。

语法:

APPEND KEY VALUE

命令有效版本:2.0.0之后

时间复杂度:O(1).追加的字符串⼀般⻓度较短,可以视为O(1).

返回值:追加完成之后string的⻓度。

⽰例:

 redis> EXISTS mykey(integer) 0redis> APPEND mykey "Hello"(integer) 5redis> GET mykey"Hello"redis> APPEND mykey " World"(integer) 11redis> GET mykey"Hello World"

4.2、GETRANGE

        返回key对应的string的⼦串,由start和end确定(左闭右闭)。可以使⽤负数表⽰倒数。-1代表 倒数第⼀个字符,-2代表倒数第⼆个,其他的与此类似。超过范围的偏移量会根据string的⻓度调整 成正确的值

语法:

 GETRANGE key start end

命令有效版本:2.4.0之后

时间复杂度:O(N).N为[start,end]区间的⻓度.由于string通常⽐较短,可以视为是O(1)

返回值:string类型的⼦串

⽰例:

 redis> SET mykey "This is a string""OK"redis> GETRANGE mykey 0 3"This"redis> GETRANGE mykey -3 -1"ing"redis> GETRANGE mykey 0 -1"This is a string"redis> GETRANGE mykey 10 100"string"

4.3、SETRANGE

覆盖字符串的⼀部分,从指定的偏移开始。

语法:

SETRANGE key offset value

命令有效版本:2.2.0之后

时间复杂度:O(N),N为value的⻓度.由于⼀般给的value⽐较短,通常视为O(1)

返回值:替换后的string的⻓度。

⽰例:

 redis> SET key1 "Hello World""OK"redis> SETRANGE key1 6 "Redis"(integer) 11redis> GET key1"Hello Redis"

4.4、STRLEN

获取key对应的string的⻓度。当key存放的类似不是string时,报错。

语法:

STRLEN key

命令有效版本:2.2.0之后

时间复杂度:O(1)

返回值:string的⻓度。或者当key不存在时,返回0。

⽰例:

redis> SET mykey "Hello world"
"OK"redis> STRLEN mykey(integer) 11redis> STRLEN nonexisting(integer) 0

五、命令⼩结

        表2-3是字符串类型命令的效果、时间复杂度,开发⼈员可以参考此表,结合⾃⾝业务需求和数据⼤⼩选择合适的命令。

表2-3字符串类型命令⼩结

命令执⾏效果时间复杂度
set key value [keyvalue...]设置 key 的值是 valueO(k),k是键个数
get key获取 key 的值O(1)
del key [key...]删除指定的 keyO(k),k是键个数
mset key value [key value ...]批量设置指定的 key 和 valueO(k),k是键个数
mget key [key...]批量获取 key 的值O(k),k是键个数
incr key指定的key的值+1O(1)
decr key指定的key的值-1O(1)
incr by key n指定的key的值+nO(1)
decr by key n指定的key的值-nO(1)
incrbyfloat key n指定的key的值+nO(1)
append key value指定的 key 的值追加 valueO(1)
strlen key获取指定 key 的值的⻓度O(1)
setrange key offset value覆盖指定 key 的从 offset 开始的部分值O(n),n是字符 串⻓度,通常视 为O(1)
get range key start end获取指定 key 的从 start 到 end 的部分值O(n),n是字符 串⻓度,通常视 为O(1)

六、内部编码

字符串类型的内部编码有3种:

  • int:8个字节的⻓整型。
  • embstr:⼩于等于39个字节的字符串。
  • raw:⼤于39个字节的字符串。

Redis 会根据当前值的类型和⻓度动态决定使⽤哪种内部编码实现。

整型类型⽰例如下:

 127.0.0.1:6379> set key 6379OK127.0.0.1:6379> object encoding key"int"

短字符串⽰例如下:

# ⼩于等于 39 个字节的字符串127.0.0.1:6379> set key "hello"OK127.0.0.1:6379> object encoding key"embstr"

⻓字符串⽰例如下:

# ⼤于 39 个字节的字符串127.0.0.1:6379> set key "one string greater than 39 bytes ........"OK127.0.0.1:6379> object encoding key"raw"

七、典型使⽤场景

7.1、缓存(Cache)功能

        图2-10是⽐较典型的缓存使⽤场景,其中Redis作为缓冲层,MySQL作为存储层,绝⼤部分请 求的数据都是从Redis中获取。由于Redis具有⽀撑⾼并发的特性,所以缓存通常能起到加速读写和 降低后端压⼒的作⽤。

图2-10Redis+MySQL组成的缓存存储架构

 下⾯的伪代码模拟了图2-10的业务数据访问过程:

1. 假设业务是根据⽤⼾uid获取⽤⼾信息

UserInfo getUserInfo(long uid) {...
}

2. ⾸先从Redis获取⽤⼾信息,我们假设⽤⼾信息保存在"user:info:<uid>"对应的键中:

// 根据 uid 得到 Redis 的键
String key = "user:info:" + uid;// 尝试从 Redis 中获取对应的值
String value = Redis 执⾏命令:get key;// 如果缓存命中(hit)
if (value != null) {// 假设我们的⽤⼾信息按照 JSON 格式存储UserInfo userInfo = JSON 反序列化(value);return userInfo;
}

3. 如果没有从Redis中得到⽤⼾信息,及缓存miss,则进⼀步从MySQL中获取对应的信息,随后写 ⼊缓存并返回:

// 如果缓存未命中(miss)
if (value == null) {// 从数据库中,根据 uid 获取⽤⼾信息UserInfo userInfo = MySQL 执⾏ SQL:select * from user_info where uid = <uid>// 如果表中没有 uid 对应的⽤⼾信息if (userInfo == null) {响应 404return null;}// 将⽤⼾信息序列化成 JSON 格式 String value = JSON 序列化(userInfo);// 写⼊缓存,为了防⽌数据腐烂(rot),设置过期时间为 1 ⼩时(3600 秒)Redis 执⾏命令:set key value ex 3600// 返回⽤⼾信息return userInfo;}

        通过增加缓存功能,在理想情况下,每个⽤⼾信息,⼀个⼩时期间只会有⼀次MySQL查询,极⼤地提 升了查询效率,也降低了MySQL的访问数。

与MySQL等关系型数据库不同的是,Redis没有表、字段这种命名空间,⽽且也没有对键名
有强制要求(除了不能使⽤⼀些特殊字符)。但设计合理的键名,有利于防⽌键冲突和项⽬
的可维护性,⽐较推荐的⽅式是使⽤"业务名:对象名:唯⼀标识:属性"作为键名。例如
MySQL的数据库名为vs,⽤⼾表名为user_info,那么对应的键可以使⽤
"vs:user_info:6379"、"vs:user_info:6379:name" 来表⽰,如果当前Redis只会被⼀个业务
使⽤,可以省略业务名"vs:"。如果键名过程,则可以使⽤团队内部都认同的缩写替代,例如
"user:6379:friends:messages:5217"可以被"u:6379:fr:m:5217"代替。毕竟键名过⻓,还
是会导致Redis的性能明显下降的。

7.2、计数(Counter)功能

        许多应⽤都会使⽤Redis作为计数的基础⼯具,它可以实现快速计数、查询缓存的功能,同时数 据可以异步处理或者落地到其他数据源。如图2-11所⽰,例如视频⽹站的视频播放次数可以使⽤ Redis来完成:⽤⼾每播放⼀次视频,相应的视频播放数就会⾃增1。

// 在 Redis 中统计某视频的播放次数
long incrVideoCounter(long vid) {key = "video:" + vid;long count = Redis 执⾏命令:incr keyreturn counter;}

实际中要开发⼀个成熟、稳定的真实计数系统,要⾯临的挑战远不⽌如此简单:防作弊、按
照不同维度计数、避免单点问题、数据持久化到底层数据源等。

7.3、共享会话(Session)

        如图2-12所⽰,⼀个分布式Web服务将⽤⼾的Session信息(例如⽤⼾登录信息)保存在各⾃ 的服务器中,但这样会造成⼀个问题:出于负载均衡的考虑,分布式服务会将⽤⼾的访问请求均衡到 不同的服务器上,并且通常⽆法保证⽤⼾每次请求都会被均衡到同⼀台服务器上,这样当⽤⼾刷新⼀ 次访问是可能会发现需要重新登录,这个问题是⽤⼾⽆法容忍的。

图2-12Session分散存储

         为了解决这个问题,可以使⽤Redis将⽤⼾的Session信息进⾏集中管理,如图2-13所⽰,在这种模 式下,只要保证Redis是⾼可⽤和可扩展性的,⽆论⽤⼾被均衡到哪台Web服务器上,都集中从 Redis 中查询、更新Session信息。

图2-13Redis集中管理Session

7.4、⼿机验证码

        很多应⽤出于安全考虑,会在每次进⾏登录时,让⽤⼾输⼊⼿机号并且配合给⼿机发送验证码, 然后让⽤⼾再次输⼊收到的验证码并进⾏验证,从⽽确定是否是⽤⼾本⼈。为了短信接⼝不会频繁访 问,会限制⽤⼾每分钟获取验证码的频率,例如⼀分钟不能超过5次。

此功能可以⽤以下伪代码说明基本实现思路:

String 发送验证码(phoneNumber) {key = "shortMsg:limit:" + phoneNumber;// 设置过期时间为 1 分钟(60 秒)    // 使⽤ NX,只在不存在 key 时才能设置成功    bool r = Redis 执⾏命令:set key 1 ex 60 nxif (r == false) {// 说明之前设置过该⼿机的验证码了        long c = Redis 执⾏命令:incr keyif (c > 5) {// 说明超过了⼀分钟 5 次的限制了           // 限制发送            return null;}}// 说明要么之前没有设置过⼿机的验证码;要么次数没有超过 5 次     String validationCode = ⽣成随机的 6 位数的验证码();validationKey = "validation:" + phoneNumber;// 验证码 5 分钟(300 秒)内有效     Redis 执⾏命令:set validationKey validationCode  ex 300;// 返回验证码,随后通过⼿机短信发送给⽤⼾     return validationCode ;}// 验证⽤⼾输⼊的验证码是否正确
bool 验证验证码(phoneNumber, validationCode) {validationKey = "validation:" + phoneNumber;String value = Redis 执⾏命令:get validationKey;if (value == null) {// 说明没有这个⼿机的验证码记录,验证失败        return false;}if (value == validationCode) {return true;} else {return false;}}

        以上介绍了使⽤Redis的字符串数据类型可以使⽤的⼏个场景,但其适⽤场景远不⽌于此,开发 ⼈员可以结合字符串类型的特点以及提供的命令,充分发挥⾃⼰的想象⼒,在⾃⼰的业务中去找到合 适的场景去使⽤Redis的字符串类型。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树-好难-疑难_GPT

// // Created by 徐昌真 on 2024/11/10. // #include <iostream> using namespace std;template<typename T> struct ListNode{ //新建链表节点T data; //指向下一个子节点 ListNode< TreeNode<T>* > childHead; 这里的 T 是TreeNde类型的…

Mysql数据类型面试题15连问

整数类型的 UNSIGNED 属性有什么用&#xff1f; MySQL 中的整数类型可以使用可选的 UNSIGNED 属性来表示不允许负值的无符号整数。使用 UNSIGNED 属性可以将正整数的上限提高一倍&#xff0c;因为它不需要存储负数值。 例如&#xff0c; TINYINT UNSIGNED 类型的取值范围是 0 ~…

【go从零单排】Mutexes互斥锁

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 在 Go 语言中&#xff0c;互斥锁&#xff08;Mutex&#xff09;是一种用于保护共…

LLM时代下Embedding模型如何重塑检索、增强生成

文章目录 一、背景二、C-MTEB评测结果三、性能不错的向量模型腾讯Conan系列阿里GTE系列商汤Piccolo系列合合信息acge系列智源BGE系列数元灵Dmeta系列jina系列OpenAI系列 四、业务中选择向量模型有哪些考量五、洞察与总结为什么需要RAG和Embedding向量化技术&#xff1f;RAG 和 …

[SWPUCTF 2022 新生赛]Power! 反序列化详细题解

知识点: PHP反序列化(执行顺序) 构造POP链 代码审计 题目主页: 输入框可以输入内容,习惯性先查看一下页面的源代码,收集信息 发现源码中有提示参数source 先不急,再看一下其他信息 是apache服务器,php版本为7.4.30 url传参 ?sourceindex.php 回显了index.php的源码 …

【go从零单排】Rate Limiting限流

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 在 Go 中&#xff0c;速率限制&#xff08;Rate Limiting&#xff09;是一种控制…

【GPTs】MJ Prompt Creator:轻松生成创意Midjourney提示词

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | GPTs应用实例 文章目录 &#x1f4af;GPTs指令&#x1f4af;前言&#x1f4af;MJ Prompt Creator主要功能适用场景优点缺点 &#x1f4af; 小结 &#x1f4af;GPTs指令 中文翻译&#xff1a; 任务说明 您是一款为幻灯片工…

Android Profiler 内存分析

Android studio&#xff08;下面简称AS&#xff09;为App提供的性能分析工具&#xff0c;在AS3.0替换掉旧的分析工具&#xff0c;对于其使用方法&#xff0c;官方也有对应的介绍&#xff1a;Android Profiler 对于使用方法&#xff0c;我只用到比较简单的功能&#xff0c;高级的…

[ Linux 命令基础 3 ] Linux 命令详解-文件和目录管理命令

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

HTMLCSS: 实现可爱的冰墩墩

效果演示 HTML <div class"wrap"><div class"body"></div><div class"ear"></div><div class"ear rightEar"></div><div class"leftHand"></div><div class"…

【电力系统】永磁同步电机调速系统带有扰动观测器

【电力系统】永磁同步电机调速系统带有扰动观测器( DOB)的最优滑模控制、改进补偿滑模控制、传统滑模、PID控制研究 摘要 本文研究了永磁同步电机&#xff08;PMSM&#xff09;调速系统中的不同控制策略&#xff0c;包括最优滑模控制、改进补偿滑模控制、传统滑模控制以及PID控…

TVM计算图分割--分割方式

文章目录 TVM中的计算图分割方式1. Partition Pass2. dataflow_pattern3. 内置图分割接口4. Pipeline Executor5. BYOC框架6. Collage7. UMA深度学习模型通常是用计算图来表示的。计算图是一种有向无环图,其中节点代表算子,表示一个操作,节点之间的边表示算子之间的数据依赖…

如何使用IDEA创建Maven/SSM工程?

鉴于很多学校还在教授SSMJSP&#xff0c;很多同学不会使用IDEA创建Maven工程&#xff0c;这里进行说明 windows下安装jdk并配置环境 添加链接描述Windows下安装Maven并配置环境 首先你要本地安装jdk&#xff0c;Maven并配置基础环境变量&#xff0c;然后对IDEA进行jdk、Mave…

大数据新视界 -- 大数据大厂之 Impala 性能优化:优化数据加载的实战技巧(下)(16/30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

从0开始机器学习--Day23--支持向量机

经过前面的学习&#xff0c;我们已经知道在解决问题时&#xff0c;重要的不仅仅是要在算法A或算法B中选择更优的&#xff0c;而是考虑怎么选择用于学习算法的特征和正则化参数&#xff0c;相比神经网络和逻辑回归&#xff0c;支持向量机在这两个方面做得更好。 优化目标(Optimi…

macOS 设置固定IP

文章目录 以太网Wifi![请添加图片描述](https://i-blog.csdnimg.cn/direct/65546e966cae4b2fa93ec9f0f87009d8.png) 基于 macOS 15.1 以太网 Wifi

Pandas | 数据分析时将特定列转换为数字类型 float64 或 int64的方法

类型转换 传统方法astype使用value_counts统计通过apply替换并使用astype转换 pd.to_numericx对连续变量进行转化⭐参数&#xff1a;返回值&#xff1a;示例代码&#xff1a; isnull不会检查空字符串 数据准备 有一组数据信息如下&#xff0c;其中主要将TotalCharges、MonthlyC…

HarmonyOS Next 实战卡片开发 02

HarmonyOS Next 实战卡片开发 02 卡片开发中&#xff0c;还有一个难点是显示图片。其中分为显示本地图片和显示网络图片 显示本地图片 卡片可以显示本地图片&#xff0c;如存放在应用临时目录下的图片。路径比如 /data/app/el2/100/base/你的项目boundleName/temp/123.png 以…

双十一云服务器抢购后,用SD-WAN连通多云网络

双十一个个云厂商都有一定的优惠&#xff0c;我在阿里云和腾讯云都购买了服务器&#xff0c;原本主要是使用的阿里云&#xff0c;一堆乱七八糟的东西都是部署在阿里云的&#xff0c;现在买了一台腾讯云之后就在思考一个问题&#xff0c;怎么在腾讯云使用阿里云原本部署的服务。…

从0开始学docker (每日更新 24-11-7)

docker网络基础 docker容器网络模型 容器网络项目libnetwork&#xff1a;docker网络架构基于一套称为容器网络模型&#xff08;CNM&#xff09;的接口 CNM高层架构 包括&#xff1a; 沙箱&#xff08;Sandbox&#xff09;&#xff1a;又称沙盒&#xff0c;包含容器的网络栈…