Redis安装及基本类型详解

news2024/11/16 12:04:24

目录

一、Redis概念

二、Redis的应用场景

三、Redis的特点

四、redis访问数据为什么快?

五、Ubuntu下安装redis

五、全局命令(针对任意类型value都可使用)

1、keys

(1)keys *

(2)keys pattern 

2、exists

3、del

4、expire

5、pexpire

6、ttl

7、type

六、redis的键过期策略

七、String类型下的命令

1、set命令

2、get命令

3、mget命令

4、mset命令

5、setnx

6、incr、incrby、decr、decrby、incrbyfloat命令

7、append、getrange、setrange、strlen命令

8、String内部的编码方式

9、string的应用场景

八、Hash类型下的命令

1、hset、hget命令

2、hdel、hexists命令

3、hkeys、hvals、hgetall命令

4、hmget、hlen命令

5、hsetnx、hincrby、hincrbyfloat命令

5、hash内部编码方式

6、hash应用场景

九、list类型下的命令

1、lpush、lpushx、rpush、rpushx命令

2、lrange命令

3、lpop、rpop命令

4、lindex、linsert、llen命令

5、lrem命令

6、blpop、brpop命令

7、list内部编码方式

8、list使用场景

十、set类型下的命令

1、sadd、smembers命令

2、sismember、scard命令

3、spop、smove、srem命令

4、sinter、sinterstore、sunion、sunionstore、sdiff、sdiffstore命令

5、set内部编码方式

6、set的应用场景

十一、zset类型下的命令

1、zadd、zcard、zcount

2、zrange、zrevrange、zrangebyscore

3、zpopmin、zpopmax、bzpopmin、bzpopmax

4、zrank、zrevrank

5、zscore、zrem、zincrby

6、zinterstore、zunionstore

7、zset内部编码方式

8、zset应用场景

十二、渐进式遍历

1、语法

2、使用

十三、数据库管理

一、Redis概念

Redis是一个在内存中存储数据的中间件,以键值对的形式存储数据,键为string类型,值为string、list、hash、set、zset等类型。

二、Redis的应用场景

1、可以作为一种非关系型数据库,存储数据;

2、作为数据缓存,将热数据(频繁使用的数据)存在redis中,全量数据存在mysql中,查找数据时先去缓存中查找,缓存中没有再去数据库中查找;

3、作为消息队列;

4、实现分布式锁。

三、Redis的特点

1、内存中存储数据,访问速度比硬盘中存储数据快(mysql);

2、数据持久化,将数据在硬盘中保存一份,防止数据丢失;

3、使用单线程模型在,减少线程之间的竞争开销以及避免了线程不安全问题;

4、不能存储大规模数据。

四、redis访问数据为什么快?

1、数据存储在内存中;

2、核心功能都是简单的逻辑,简单的操作内存中的数据;

3、网络上,redis采用了IO多路复用方式(epoll),使用一个线程管理多个socket(端点);

4、redis使用单线程模式,减少了不必要的线程之间的锁竞争开销。

五、Ubuntu下安装redis

1、安装redis

2、手动修改配置

3、重新启动服务器

4、使用redis自带的客户端连接服务器(命令行客户端)

ps:ctrl+d退出redis客户端

五、全局命令(针对任意类型value都可使用)

1、keys

时间复杂度为O(n)

(1)keys *

返回全部key

(2)keys pattern 

返回满足匹配样式的key

①?:匹配任意一个字符

②*:匹配0个或多个任意字符

③[mnq]匹配m,n,q字符

④[^m]排除m,其他都能匹配

⑤[m-n]匹配m-n范围内的字符,左闭右闭

2、exists

判断key是否存在,可以判定多个 key,返回结果是存在key的个数;

时间复杂度:O(1),针对单个key

3、del

删除指定key,可以删除多个,返回结果是删除key的个数;

时间复杂度:O(1),针对单个key

4、expire

给指定的key设置过期时间,时间单位是秒,过了给定时间后,key就会自动删除。

1表示设置成功 0表示设置失败

5、pexpire

给指定的key设置过期时间,时间单位是毫秒,过了给定时间后,key就会自动删除。

1表示设置成功 0表示设置失败

6、ttl

获取指定key即将过期时间,单位是秒

7、type

获取指定key对应value的类型

六、redis的键过期策略

1、定期删除

定期的抽取出一部分key,判定是否到了过期时间,到过期时间就自动删除。

2、惰性删除

对于已经过期的key暂时还不删除,当下次再次获取该key时,该访问会触发redis删除该key,并返回nil(空)。

七、String类型下的命令

redis中的字符串是按照二进制的方式存储的,可以存储文本数据、整数、文本字符串、json、xml、图片、视频、音频等。

1、set命令

设置一个key

语法:set key value [expiration EX seconds |PX milliseconds] [NX|XX]

方框里的内容可以省略。

EX:使用秒作为单位设置key的过期时间;

PX:使用毫秒作为单位设置key的过期时间;

NX:当前设置的key不存在时,才能设置成功。

XX:当前设置的key存在时,才能设置成功。

set一个文本字符串会是什么情况:

发现结果是字节,是因为redis存储字符串时是以二进制的方式存储的,每个文字是3个字节,就像'你'对应的是\xe4\xbd\xa0,如果需要显示中文,可以在启动redis中设置命令为:

2、get命令

获取key对应的value值,若key不存在返回nil,若key对应的value不是String类型,报错

时间复杂度:O(1)

3、mget命令

一次性获取多个指定的key

4、mset命令

一次性增加多个键值对

5、setnx

setnx:设定的key之前不存在;

结果:0表示设置成功 1表示设置失败

6、incr、incrby、decr、decrby、incrbyfloat命令

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

incrby:将key对应的String表示的数字加指定的值,如果key不存在,则视为key对应的value是0;如果key对应的string不是一个整型或者范围超过了64位有符号整型,则报错。

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

decrby:将key对应的String表示的数字减指定的值,如果key不存在,则视为key对应的value是0;如果key对应的string不是一个整型或者范围超过了64位有符号整型,则报错。

incrbyfloat:将key对应的String表示的浮点数加指定的值,如果key不存在,则视为key对应的value是0;如果key对应的value不是string,或者不是一个浮点数则报错。

7、append、getrange、setrange、strlen命令

append:如果key已经存在且value是string类型,则会在原来的value后追加,如果key不存在,效果等同于set命令。返回结果是指定key对应的value长度。

getrange:返回key对应的string子串,有start和end确定,左闭右闭,可以使用负数表示,-1代表倒数第一个字符,-2代表倒数第二个字符。超过范围的会根据string长度自动调整。

ps:此操作还需要注意一个问题:对于非文本类型的字符串,字节为1,进行获取子串时无影响,但对于文本字符串是三个字节,获取子串是按照字节数获取,会容易拆取到不完整的某个字符。

例如:

setrange:覆盖string的一部分,返回结果是该key对应value的长度

当偏移量超过字符串长度时,会把指定偏移量之前的内容填充为\x00

strlen:获取key对应的string的长度,当key存放的value不是string时,报错。

时间复杂度:O(1)

8、String内部的编码方式

string内部有3种编码方式:

①若value是string类型,且是8个字节的长整型,则value是int

②若value是string类型,且是小于等于39个字节的字符串,则value是embstr

③若value是string类型,且是大于39个字节的字符串,则value是raw

9、string的应用场景

(1)缓存

redis作为缓存层,mysql作为存储层,绝大部分请求的数据都是从redis中获取,若redis中没有得到用户信息,则进一步从mysql中获取对应的消息,随后写入缓存并返回。

(2)计数功能

搭配incr,实现快速计数。例如:用户每播放一次视频,相应的视频播放数就会自增1。

(3)redis集中管理session

将用户的session存储到redis中,使得即使面对分布式服务器,也可以实现session存在。

(4)手机验证码

可以给key设置过期时间,限制用户每分钟获取验证码的频率。

八、Hash类型下的命令

key对应的value又是一个哈希。但此时该哈希的value必须是string,且哈希不可以重复。

1、hset、hget命令

hset:设置hash中指定的字段(field)的值,可以一次设置多个。

时间复杂度为:O(1),针对单个field。返回结果:添加的字段个数。 

hget:获取hash中指定字段的值--field

2、hdel、hexists命令

hdel:删除hash中指定的字段,可以删除多个。

时间复杂度为:O(1)。返回结果:删除的字段个数。

hexists:判断hash中指定字段是否存在。

时间复杂度为:O(1)。返回结果:1表示存在,0表示不存在。

3、hkeys、hvals、hgetall命令

hkeys:获取hash中的所有字段

时间复杂度为:O(n)--n为field个数。

hvals:获取hash中的所有的值

hgetall:获取hash中的所有字段以及对应的值

4、hmget、hlen命令

hmget:一次获取hash中多个字段的值

hlen:获取hash中所有字段个数

5、hsetnx、hincrby、hincrbyfloat命令

hsetnx:在字段不存在的情况下,设置hash中的字段和值

时间复杂度为:O(1);返回结果是:1表示成功,0表示失败。

hincrby:将hash中字段对应的数值添加指定的值

时间复杂度为:O(1);返回结果是:字段变化后的值。

hincrbyfloat:将hash中字段对应的浮点数数值添加指定的值

5、hash内部编码方式

hash内部有2中编码方式:

(1)ziplist

压缩列表,当哈希类型元素个数小于特定值,且所有值字节小于某个特定值时,redis会使用ziplist作为哈希的内部实现。ziplist在内存方面更节省。

(2)hashtable

当哈希类型无法满足ziplist条件时,redis会使用hashtable作为哈希的内部实现。

6、hash应用场景

作为缓存存储关系型数据库的数据

例如:用户信息有userId、userName、passWord,主键可以是每个用户,对应value采用hash保存用户的具体信息。

九、list类型下的命令

key对应的value是一个list(类似于数组),它可以被用作栈,也可以被用作队列。列表元素可以重复。元素是有序的,此处有序不是指升序降序,指元素前后顺序,若两个列表元素内容相同,但是元素放的顺序不同,则认为这是两个不同的列表。

1、lpush、lpushx、rpush、rpushx命令

lpush:将一个或者多个元素从左侧放入到list中(头插)

时间复杂度为:O(1)--单个元素;返回结果为:列表的长度

lpushx:只有当key存在时,可以将一个或者多个元素从左侧放入到list中(头插)

rpush:将一个或者多个元素从右侧放入到list中(尾插)

rpushx:只有当key存在时,可以将一个或者多个元素从右侧放入到list中(尾插)

2、lrange命令

lrange:获取从start到end区间内的所有元素,左闭右闭。下标可以为负数。

对于范围,redis会自行判断。

3、lpop、rpop命令

lpop:从list左侧取出元素(头删)

时间复杂度为:O(1),返回结果为:取出元素的值,可能为nil

rpop:从list右侧取出元素(尾删)

4、lindex、linsert、llen命令

lindex:获取从左数第index位置的元素。index可以为负数。

linsert:在特定位置插入元素。

时间复杂度为:O(n);返回结果为:列表长度

ps:当存在多个一样的基准值时,操作的基准值是离左边最近的基准值。

llen:获取列表长度

5、lrem命令

lrem:删除list中多个指定的值。删除个数可以为正数、负数、0。

返回结果:删除元素个数。

删除个数为正数:进行左删,删除指定个数的指定值

删除个数为负数:进行右删,删除指定个数的指定值

删除个数为0:删除全部指定值

6、blpop、brpop命令

blpop:从list左侧取出元素(头删),当list中没有元素时,该命令会被阻塞一定时间,在时间内若有元素插入到list中,则该命令会运行返回结果;在等待元素放入列表中时,可以执行其他命令。与lpop的区别:当列表中有元素时,两者是没有区别的;当列表中没有元素时,lpop直接返回nil,而blpop会被阻塞,等待元素加入列表。

ps:该命令可以针对多个key操作,只要其中某个key获取到结果就返回结果。

返回结果:key+获取到的元素值

brpop:从list右侧取出元素(头删),当list中没有元素时,该命令会被阻塞一定时间,在时间内若有元素插入到list中,则该命令会运行返回结果;在等待元素放入列表中时,可以执行其他命令。与lpop的区别:当列表中有元素时,两者是没有区别的;当列表中没有元素时,lpop直接返回nil,而blpop会被阻塞,等待元素加入列表。

ps:该命令可以针对多个key操作,只要其中某个key获取到结果就返回结果。

返回结果:key+获取到的元素值

7、list内部编码方式

以前list内部编码方式有两种:

(1)ziplist(压缩列表)

当列表的元素个数小于某个值,且列表的每个元素长度小于某个值时,redis会选用ziplist作为列表的内部编码实现,节省内存空间。

(2)linkedlist(链表)

当列表无法满足ziplist条件时,redis会使用linkedlist作为列表的内部编码实现。

最近版本list内部编码方式:

quicklist

quicklist是链表和压缩列表的结合,整体是一个链表,链表的每个节点是一个压缩列表。每个压缩列表都不会太大。

8、list使用场景

(1)消息队列

搭配lpush+brpop命令,可以实现生产者--消费者模型。

(2)分页展示文章列表

使用列表展示文章。

十、set类型下的命令

key对应的value是set结构的,set类型元素不可以重复,且是无序的。

1、sadd、smembers命令

sadd:将一个或多个元素添加到指定set中,重复元素无法添加

smembers:获取一个set中的所有元素

2、sismember、scard命令

sismember:判断一个元素在不在指定set中

时间复杂度为:O(1);返回结果:1表示存在,0表示不存在

scard:获取指定set的元素个数

3、spop、smove、srem命令

spop:从set中删除并返回一个或多个元素,删除元素具有随机性。

smove:将一个元素从set中取出并放入目标set中

时间复杂度为:O(1);返回结果:1表示存入成功,0表示存入失败

srem:将指定的元素从set中删除,可以一次删除多个

4、sinter、sinterstore、sunion、sunionstore、sdiff、sdiffstore命令

sinter:获取多个指定set取交集后的元素

sinterstore:获取多个指定set取交集后的元素,并将元素放入到目标set中

sunion:获取多个指定set取并集后的元素

sunionstore:获取多个指定set取并集后的元素在,并将元素放入到目标set中

sdiff:获取多个指定set取差集后的元素

sdiffstore:获取多个指定set取并集后的元素,并将元素放入到目标set中

5、set内部编码方式

(1)当集合中的元素都是整数,且元素个数小于某个特定值时,redis选用intset实现set

(2)当集合类型无法满足intset条件时,redis采用hashtable实现set

6、set的应用场景

(1)使用set保存用户的标签

利用set的元素不可重复,保存同一个用户的一些标签。

(2)使用set计算用户之间的共同好友

利用set集合特性,求交集,计算用户之间的共同好友。

(3)使用set统计uv

pv:用户每次访问同一个服务器会产生一个pv;

uv:每个用户访问服务器都会产生一个uv;

uv需要按照用户进行去重,可以使用set。

十一、zset类型下的命令

key对应的value类型是zset,zset是一种有序集合,集合元素不能重复,每个元素都有一个唯一的浮点类型的分数与之关联,使用该分数将元素进行升序排列。

1、zadd、zcard、zcount

zadd:添加(nx)或更新(xx)指定的元素以及关联的分数到zset中,并按照分数升序排列,若分数相同则按照member排序。

时间复杂度为:O(logN);返回结果:操作的元素个数(nx);0或1(xx)

zcard:获取zset中的元素个数。

时间复杂度为:O(1)。

zcount:返回分数在[min,max]区间里的元素个数

时间复杂度为:O(logN)。

ps:若想返回(min,max)区间内的元素个数

2、zrange、zrevrange、zrangebyscore

zrange:返回指定区间里(下标)的元素,分数按照升序。带上withscores可以显示分数。

时间复杂度为:O(logN+M)。

zrevrange:返回指定区间里(下标)的元素,分数按照降序。

zrangebyscore:返回分数在[min,max]区间里的元素。

3、zpopmin、zpopmax、bzpopmin、bzpopmax

zpopmin:删除并返回分数最低的count个元素

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

bzpopmin:带阻塞的删除并返回分数最低的count个元素

bzpopmax:带阻塞的删除并返回分数最高的count个元素

4、zrank、zrevrank

zrank:返回指定元素的排名--升序

zrevrank:返回指定元素的排名--降序

时间复杂度为:O(logN)

5、zscore、zrem、zincrby

zscore:返回指定元素的分数

时间复杂度为:O(1)

zrem:删除指定的元素,可删除多个

时间复杂度为:O(logN)--针对单个

zincrby:为指定元素的分数添加指定的分数

时间复杂度为:O(logN)

6、zinterstore、zunionstore

zinterstore:求多个指定zset的交集(member),可以指定结果放到哪个key里面,可以指定每个zset结果权值,可以指定结果是取和、取最大值、最小值。

zinterstore:求多个指定zset的并集(member),可以指定结果放到哪个key里面,可以指定每个zset结果权值,可以指定结果是取和、取最大值、最小值。

7、zset内部编码方式

(1)当有序集合元素个数小于某个数,同时每个元素的值都小于某个数时,redis会用ziplist(压缩列表)来实现有序集合,减少内存的使用;

(2)当不满足ziplist的条件时,redis会使用skiplist(跳表)实现有序集合。

8、zset应用场景

进行排行榜排名时可以使用zset,可以加权重,可以进行分数修改、删除。

十二、渐进式遍历

在获取所有key时,若我们使用keys *,会出现一些问题,若我们的key非常多,可能会阻塞redis服务器,所以我们可以使用scan命令渐进式遍历key

1、语法

scan cursor [match pattern] [count count] [type type]

cursor:进行遍历时光标开始的位置,不是下标,首次scan从0开始,下一次光标位置会由前一次scan结果返回。

pattern:指定需要满足的key形式,和前面一样(*、?等等)

count:指定一次返回key的个数,默认为10

type:规定获取哪些类型的key

2、使用

当返回的下一次位置为0时,遍历结束。

十三、数据库管理

redis提供了一些面向数据库的操作,有:select、flushdb、flushall。

select:切换数据库,redis默认配置中提供了16个数据库,select 0是第一个数据库,select 15是最后一个数据库,默认为第一个数据库,且不同数据库之间的键值对不会冲突。

flushdb:清除当前数据库数据

flushall:清除所有数据库数据

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从0到1搭建文档库——sphinx + git + read the docs

sphinx git read the docs 目录 一、sphinx 1 sphinx的安装 2 本地构建文件框架 1)创建基本框架(生成index.rst ;conf.py) conf.py默认内容 index.rst默认内容 2)生成页面(Windows系统下&#xf…

uniapp vue2 时钟 循环定时器

效果展示: 时钟 写在前面:vue2有this指向,没有箭头函数 实验操作:封装一个时钟组件 uniapp vue2 封装一个时钟组件 核心代码: this指向的错误代码,在下: start() { this.myTimer setInterval(…

11.内建函数对象_算数、关系、逻辑仿函数

文章目录 算数仿函数代码工程运行结果 关系仿函数代码工程运行结果 逻辑仿函数代码工程运行结果 算数仿函数 需要添加#include<functional>头文件使用 代码工程 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<functional>using namespace…

顶象全系列产品升级,对抗AI带来的新威胁

4月2日&#xff0c;在顶象CSDN直播间&#xff0c;最新一期“业务安全大讲堂”上&#xff0c;顶象数据科学家翼龙与资深解决方案专家鳯羽&#xff0c;围绕当前备受关注的AI威胁、人脸风险进行深入分享&#xff0c;并详细介绍针对AI威胁的最新反欺诈技术与安全产品。 AI威胁带来的…

开发项目接单报价快速计算,报价量化程序

定制化开发&#xff0c;如何计算项目预算&#xff0c;是程序开发者头疼的一个问题。 项目费用谈得过低&#xff0c;就天天加班累死赚不到钱&#xff1b;谈得过高&#xff0c;会导致顾客流失&#xff0c;信誉受损。 项目费用量化可见是多么重要。 下面是一段量化的程序&#…

【教程】VOC数据集制作

语义分割任务中VOC数据集的制作&#xff0c;任务中只有一种标签&#xff1a;gas 文章目录 1、由黑白图像识别为txt标签2、txt转json3、数据集转VOC格式 1、由黑白图像识别为txt标签 由于使用CycleGAN网络进行风格迁移学习&#xff0c;生成了大量伪标签图像&#xff0c;因此需…

阿里云ICP备案工信部短信核验详细流程,1分钟搞定教程!

网站ICP备案或APP备案通过云厂商的备案初审后&#xff0c;需要在工信部完成短信核验操作&#xff0c;本文云服务器吧yunfuwuqiba.com以阿里云备案为例&#xff0c;来详细说明工信部短信核验详细流程&#xff0c;非常简单&#xff1a; 阿里云备案提交到阿里云初审&#xff0c;初…

学习操作系统之OS的作用

OS是用户与计算机硬件之间的接口 OS处于用户和硬件系统之间,用户通过OS来使用计算机硬件系统.即用户可以在OS的帮助下方便、快捷、可靠的操作计算机硬件和运行自己的程序。 下图是我对于操作系统的简单理解 OS是计算机系统资源的管理者 一个计算机系统包含四类硬件资源&…

angular—mooc课学习笔记

1.angular工程目录 2.设置标签元素样式 3.fex布局 4.事件绑定 5. 双向数据传输 6. 键盘实现方法 7.内置指令拉选框 8. ngFor指令

RocketMQ建Topic

# 查看集群状况 ./mqadmin clusterList -n localhost:9876 # 创建topic ./mqadmin updateTopic -b localhost:10911 -t my_topic -n localhost:9876 # 查看所有topic ./mqadmin topicList -n localhost:9876参考 Admin Tool

ESP32S3网络编程学习笔记(1)—— Wi-Fi扫描实验

前言 &#xff08;1&#xff09;如果有嵌入式企业需要招聘湖南区域日常实习生&#xff0c;任何区域的暑假Linux驱动/单片机/RTOS的实习岗位&#xff0c;可C站直接私聊&#xff0c;或者邮件&#xff1a;zhangyixu02gmail.com&#xff0c;此消息至2025年1月1日前均有效 &#xff…

计算机服务器中了helper勒索病毒怎么办,helper勒索病毒解密流程步骤

随着网络技术在企业中的不断应用&#xff0c;越来越多的企业离不开网络&#xff0c;网络为企业提供了极大便利&#xff0c;大大提升了生产运营效率&#xff0c;由此而产生的网络数据安全问题也成为了企业关心的主要话题。近期&#xff0c;云天数据恢复中心接到多家企业的求助&a…

在虚拟机尝试一次用启动盘重装系统

在虚拟机尝试一次用启动盘重装系统 没有自己重装过系统&#xff0c;也不敢对自己的笔记本下手&#xff0c;用虚拟机重装玩玩试试。 先设置成u盘启动 从boot中选择相应的创建的硬盘即可&#xff08;刚刚突然发现图片不能上传了&#xff0c;经过乱七八糟的尝试后&#xff0c;开一…

90天玩转Python—06—基础知识篇:Python中的七大基础数据类

90天玩转Python系列文章目录 90天玩转Python—01—基础知识篇:C站最全Python标准库总结 90天玩转Python--02--基础知识篇:初识Python与PyCharm 90天玩转Python—03—基础知识篇:Python和PyCharm(语言特点、学习方法、工具安装) 90天玩转Python—04—基础知识篇:Pytho…

js的qq换肤效果

文章目录 1. 演示效果2. 分析思路3. 代码实现3.1. 方式一3.2. 方式二3.3. 整体代码 1. 演示效果 2. 分析思路 先编写样式&#xff0c;弄好布局和排版。遍历这个集合&#xff0c;对每个图片元素&#xff08;img&#xff09;添加一个点击事件监听器。可以使用 for 或者 forEach …

计算机毕业设计java 基于Android的拼图游戏app

当今社会&#xff0c;随着电子信息技术的发展&#xff0c;电子游戏也成为人们日常生活的一部分。这种娱乐方式结合了日新月异的技术&#xff0c;在游戏软件中结合了多种复杂技术。拼图游戏流行在各种电子产品上&#xff0c;从计算机&#xff0c;掌上游戏机到如今的手机&#xf…

番茄 短abogus补环境

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018601872 本文章…

849. Dijkstra求最短路 I

tips&#xff1a; 采用0x3f3f3f3f作为一个极大值&#xff1a; 1061109567 //是一个很大的数&#xff0c;可以用来代表∞&#xff1b; 在memset里0x3f表示为0x3f3f3f3f memset(a, 0x3f, sizeof a); //0x是十六进制的意思&#xff1b; memset()是对char操作&#xff0c;即一个…

Vue3组件基础示例

组件是vue中最推崇的&#xff0c;也是最强大的功能之一&#xff0c;就是为了提高重用性&#xff0c;减少重复性的开发。 如何使用原生HTML方法实现组件化 在使用原生HTML开发时&#xff0c;我们也会遇到一些常见的功能、模块&#xff0c;那么如何在原生HTML中使用组件化呢&am…

再聊一聊AUC指标

关于模型评估的指标&#xff0c;之前已经写过不少这方面的文章&#xff0c;最近在实践中又有了一点新的思考&#xff0c;本文对模型评估中的AUC指标再进行一些简单的探讨。 情况一&#xff0c;以下图中的数据为例&#xff0c;1代表用户发生逾期&#xff0c;标记为坏样本&#x…