redis下载、基础数据类型、操作讲解说明,持久化、springboot整合等
1 Redis是什么
官网:https://redis.io
开发者:Antirez
Redis诞生于2009年全称是Remote Dictionary Server 远程词典服务器,是一个基于内存的键值型NoSQL数据库。
Redis是一个开源的、高性能的键值对存储系统,它支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等。Redis通常被用作数据库、缓存和消息中间件。它以内存存储为主,因此读写速度极快,同时也支持数据的持久化,以防止数据丢失。Redis是单线程的,但得益于高效的I/O多路复用技术,它仍然能够处理大量的并发请求。并且支持数据持久化、支持主从集群、分片集群、支持多语言客户端。
而NoSql则是相对于传统关系型数据库而言,有很大差异的一种数据库
NoSQl简介
NoSql:Not Only Sql(不仅仅是SQL),或者是No Sql(非Sql的)数据库。是相对于传统关系型数据库而言,有很大差异的一种特殊的数据库,因此也称之为非关系型数据库。
- 结构化与非结构化:传统关系型数据库是结构化数据,每一张表都有严格的约束信息:字段名、字段数据类型、字段约束等等信息,插入的数据必须遵守这些约束,而NoSql则对数据库格式没有严格约束,往往形式松散,自由。
- 关联和非关联:传统数据库的表与表之间往往存在关联,例如外键,而非关系型数据库不存在关联关系,要维护关系要么靠代码中的业务逻辑,要么靠数据之间的耦合。
- 查询方式:传统关系型数据库会基于Sql语句做查询,语法有统一标准,非关系数据库查询语法差异极大,五花八门各种各样。
- redis:get user:1
- mongodb:db.users.find({_id:1})
- elasticsearch:GET http://localhost:9200/users/1
- 事务:传统关系型数据库能满足事务ACID的原则。而非关系型数据库往往不支持事务,或者不能严格保证ACID的特性,只能实现基本的一致性。
2 Redis的安装
通常情况下redis都是安装在Linux服务器上的,基于redis的特点在Linux上才会发挥其最佳效果,官网也推荐使用Linux。
2.1 安装纯净版
2.1.1 下载依赖库
redis是基于C语言编写的,因此需要gcc环境
yum install -y gcc tcl
2.1.2 上传安装包并解压
官网下载:http://download.redis.io/releases/
建议下载第二位为偶数的如7.0.x 或 7.2.x 等等
这里我下载的是7.0.0
版本
上传至要存放的目录中如\opt
下
进入压缩包所在目录
tar -xzf redis-7.0.0.tar.gz
进入redis目录,进行安装
cd /opt/redis-7.0.0/
make && make install
该目录已经默认配置到环境变量/usr/local/bin
因此可以在任意目录下运行这些命令。其中:
redis-cli
:是redis提供的命令行客户端redis-server
:是redis的服务端启动脚本redis-sentinel
:是redis的哨兵启动脚本redis-benchmark
:性能测试工具redis-check-aof
:修复有问题的AOF文件,redis-check-aof
:修复有问题的dump.rdb文件
2.1.3 修改配置文件
进入到安装redis的目录,我这里是/opt/redis-7.0.0/
这里建议先将原conf配置文件拷贝一份
cp redis.conf /heyqings/myredis/
/heyqings/myredis/
为自定义目录
修改配置文件后需重启生效
注意这里修改的是拷贝的文件
-
修改
daemonize no
->daemonize yes
(309行左右):是否为后台启动 -
修改
protected-mode yes
->protected-mode no
(111行左右):是否开启保护模式 -
修改
bind 127.0.0.1
->直接注释(或改为本机IP)(87行左右):允许访问的地址 -
添加密码->requirepass设置你的密(1033行左右)
2.1.4 启动redis
因redis安装默认安装在/usr/local/bin
所以我们可以在任何地方使用redis命令
启动redis服务并告诉其配置文件路径
redis-server /heyqings/myredis/redis.conf
没有消息就是好消息,若无错误报出则证明启动成功,可通过
ps -ef | grep redis | grep -v grep
查看,结果为
则证明启动成功
设置开机自启
首先需要新建一个服务文件
vim /etc/systemd/system/redis.service
其中内容如下
[Unit]
Description=redis-server
After=network.target[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /heyqings/myredis/redis.conf
PrivateTmp=true[Install]
WantedBy=multi-user.target
然后重载系统服务
systemctl daemon-reload
开机自启
systemctl enable redis
现在我们可以用系统命令操作redis
# 启动
systemctl start redis
# 停止
systemctl stop redis
# 重启
systemctl restart redis
# 查看状态
systemctl status redis
2.1.5 停止redis
利用redis-cli来执行 shutdown
命令,即可停止 Redis 服务
redis-cli -u 123456 shutdown
-u
后为密码也可用-a
2.1.6 连接测试
Linux服务器上可通过
redis-cli -a 123456 -p 6379
进行连接-a
后为密码,-p
后为端口号,默认为6379
2.2 docker安装redis
2.2.1 拉取镜像
docker pull redis:7.0.0
拉取成功可通过docker images
查看
2.2.2 创建配置文件
创建redis.conf
我这里创建在/heyqings/docker/redis/conf
目录下
cd /heyqings/docker/redis/conf
vim redis.conf
里面内容为:
# Redis服务器配置 # 绑定IP地址
#解除本地限制 注释bind 127.0.0.1
#bind 127.0.0.1 # 服务器端口号
port 6379 #配置密码,不要可以删掉
requirepass 123456#这个配置不要会和docker -d 命令 冲突
# 服务器运行模式,Redis以守护进程方式运行,默认为no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败,如果后面redis启动失败,就将这个注释掉
daemonize no#当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定(自定义)
#pidfile /heyqings/docker/redis/run/redis6379.pid #默认为no,redis持久化,可以改为yes
appendonly yes#当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 60
# 服务器系统默认配置参数影响 Redis 的应用
maxclients 10000
tcp-keepalive 300#指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合(分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改)
save 900 1
save 300 10
save 60 10000# 按需求调整 Redis 线程数
tcp-backlog 511# 设置数据库数量,这里设置为16个数据库
databases 16# 启用 AOF, AOF常规配置
appendonly yes
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb# 慢查询阈值
slowlog-log-slower-than 10000
slowlog-max-len 128# 是否记录系统日志,默认为yes
syslog-enabled yes #指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
loglevel notice# 日志输出文件,默认为stdout,也可以指定文件路径
logfile stdout# 日志文件
#logfile /var/log/redis/redis-server.log# 系统内存调优参数
# 按需求设置
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
2.2.3 运行redis
docker run \
-p 6378:6379 \
--name domeredis \
-v /heyqings/docker/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /heyqings/docker/redis/data:/var/lib/redis \
-v /heyqings/docker/redis/logs:/logs \
-d redis:7.0.0 redis-server /etc/redis/redis.conf
命令解释
-p 端口号映射 主机端口:容器端口
-v 数据卷挂载
-d 后台运行
--name 容器名称
查看是否启动
docker ps
若出现则成功
开机自启
docker update --restart=always domeredis
2.2.4 测试连接
docker exec -it domeredis bash
2.3 下载客户端
RedisDesktopManager官网:https://redis.io/insight/
下载并安装后进行连接
点击【Connect to Redis Server】填写信息
这里我填写的是docker容器中的redis,纯净版同理
然后点击【Test Connection】出现
依次点击【OK】即可
3 Redis十大数据类型
操作命令指南:https://redis.io/docs/latest/commands/
3.0 前置-key的相关操作
keys *
:查看当前库的所有keyexists key
:判断某个key是否存在type key
:查看key的类型del key
:删除keyunlink key
:非阻塞删除,仅仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作中ttl key
:查看还有多少秒过期,-1:永不过期,-2:已过期expire key
:秒钟,为key设置过期时间move key dbindex
:将当前的key移动到给定数据库select dbindex
:切换数据库dbsize
:查看数据库key的数量flushdb
:清空当前库flushall
:通杀全部库
命令不区分大小写,key区分
通用操作
SET key value [NX | XX] [GET] [EX seconds | PX milliseconds |EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]
NX:不存在时创建
XX:存在时创建
GET:返回旧值插入新值
EX:过期时间 秒
PX:过期时间 毫秒
EXAT:过期时间 unix时间 秒
PXAT:过期时间 unix时间 毫秒
KEEPTTL:保持过期时间
3.1 String 字符串
最基础数据类型,一般情况下key都为字符串类型
String的常见命令有:
- SET:添加或者修改已经存在的一个String类型的键值对
- GET:根据key获取String类型的value
- MSET:批量添加多个String类型的键值对
- MGET:根据多个key获取多个String类型的value
- INCR:让一个整型的key自增1
- INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2
- INCRBYFLOAT:让一个浮点类型的数字自增并指定步长
- SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行
- SETEX:添加一个String类型的键值对,并且指定有效期
3.2 List 列表
底层为双向链表
- 有序
- 元素可以重复
- 插入和删除快
- 查询速度一般
List的常见命令有:
- LPUSH key element … :向列表左侧插入一个或多个元素
- LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil
- RPUSH key element … :向列表右侧插入一个或多个元素
- RPOP key:移除并返回列表右侧的第一个元素
- LRANGE key star end:返回一段角标范围内的所有元素
- LREM key number element:删除number个element
- BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil
3.3 Set 集合
无序,无重复集合
- 无序
- 元素不可重复
- 查找快
- 支持交集、并集、差集等功能
Set的常见命令有:
- SADD key member … :向set中添加一个或多个元素
- SREM key member … : 移除set中的指定元素
- SCARD key: 返回set中元素的个数
- SISMEMBER key member:判断一个元素是否存在于set中
- SMEMBERS:获取set中的所有元素
- SINTER key1 key2 … :求key1与key2的交集
- SINTERCARD numkeys key [key …] [LIMIT limit]:redis7新命令,返回结果的基数(返回由所有给定集合的交际产生的集合的基数)
3.4 SortedSet 有序集合
有序,无重复集合,关联double类型的分数(score),分数可重复
- 可排序
- 元素不重复
- 查询速度快
SortedSet的常见命令有:
- ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score值
- ZREM key member:删除sorted set中的一个指定元素
- ZSCORE key member : 获取sorted set中的指定元素的score值
- ZRANK key member:获取sorted set 中的指定元素的排名
- ZCARD key:获取sorted set中的元素个数
- ZCOUNT key min max:统计score值在给定范围内的所有元素的个数
- ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment值
- ZRANGE key min max:按照score排序后,获取指定排名范围内的元素
- ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素
- ZDIFF、ZINTER、ZUNION:求差集、交集、并集
注意:所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可,例如:
- 升序获取sorted set 中的指定元素的排名:ZRANK key member
- 降序获取sorted set 中的指定元素的排名:ZREVRANK key memeber
3.5 Hash 哈希表
field(String):value
用java解释就是Map<String,Map<Object,Object>>
Hash的常见命令有:
- HSET key field value:添加或者修改hash类型key的field的值
- HGET key field:获取一个hash类型key的field的值
- HMSET:批量添加多个hash类型key的field的值
- HMGET:批量获取多个hash类型key的field的值
- HGETALL:获取一个hash类型的key中的所有的field和value
- HKEYS:获取一个hash类型的key中的所有的field
- HINCRBY:让一个hash类型key的字段值自增并指定步长
- HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行
3.6 Bitfield 位域
通过bitfield命令可以一次性操作多个多个比特位域(连续的多个比特位),执行操作并返回一个相应数组,了解即可
位域修改,溢出控制
直接修改底层
3.7 Bitmap 位图
由0和1状态表现得二进制bit数组
主要用于状态记录等等
主要命令有:
- setbit key offset val:给指定key的值的第offset赋值val
- getbit key offset:获取指定key的offset位
- bitlen key:返回占用的字节数
- bitcount key start end:返回指定key中【start,end】中1的数量
- bitop operation destkey key:对不同的二进制存储数据进行位运算(and、or、not、xor)
3.8 Geospatial 地理空间
存储地理位置信息,并对信息进行操作
- 添加地理位置坐标
- 获取地理位置的坐标
- 计算两个位置之间的距离
- 根据用户给定的经纬度坐标来获取指定范围内的地理位置集合
常用命令:
- geoadd:多个经纬度、位置名称添加到指定的key中
- geopos:从键里面返回所有给定的位置元素
- geodist:返回两个位置之间的距离
- georadius:以给定经纬度为中心,返回与中心距离不超过给定最大距离的所有位置元素
- georadiusbymember:与georadius类似
- geohash:返回一个或多个位置元素的geohash表示
3.9 Hyperloglog 基数统计
输入元素数量或体积非常大时,计算基数所需要的空间总是固定且很小的。
去重复基数统计
基数:去重复的数据集合(只记录个数不存储数据)
适用场景一般为统计UV(Unique VIsitor)、统计网站关键词搜索…
常用命令:pfadd\pfcount\pfdebug\pfmerge\pfselftest
3.10 Stream 流
类似mq中间件,主要用于消息队列
特殊符号:
- +,- :最大最小可能出现的id
- $:只消费新的消息
- > :用于xreadgroup命令,表示迄今还没有发送给组中使用者的信息,会更新新消费者组的最后id
- *:用于xadd命令,让系统自动生成id
常用命令:xadd\xrevrange\xdel…
更多命令参考:https://redis.io/docs/latest/commands/?group=stream
4 Redis持久化
4.1 RDB
RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。快照文件称为RDB文件,默认是保存在当前运行目录。
RDB持久化在四种情况下会执行:
- 执行save命令:由redis主线程来执行rdb,会阻塞所有命令,只有在数据迁移时可能用到
- 执行bgsave命令:开启独立进程完成RDB,主进程可以持续处理用户请求,不受影响
- Redis停机时:Redis停机时会执行一次save命令,实现RDB持久化。
- 触发RDB条件时:Redis内部有触发RDB的机制,可以在redis.conf文件中找到如:save 900 1
4.2 AOF
AOF全称为Append Only File(追加文件)。Redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件。
AOF默认是关闭的,需要修改redis.conf配置文件来开启AOF:
# 是否开启AOF功能,默认是no
appendonly yes
# AOF文件的名称
appendfilename "appendonly.aof"
AOF的命令记录的频率也可以通过redis.conf文件来配:
# 表示每执行一次写命令,立即记录到AOF文件
appendfsync always
# 写命令执行完先放入AOF缓冲区,然后表示每隔1秒将缓冲区数据写到AOF文件,是默认方案
appendfsync everysec
# 写命令执行完先放入AOF缓冲区,由操作系统决定何时将缓冲区内容写回磁盘
appendfsync no
appendfsync三种命令的对比:
配置项 | 刷盘时机 | 优点 | 缺点 |
---|---|---|---|
always | 同步刷盘 | 可靠性高,数据几乎不丢失 | 性能影响大 |
everysec | 每秒刷盘 | 性能适中 | 最多丢失1秒数据 |
no | 操作系统控制 | 性能最好 | 可靠性差,可能丢失大量数据 |
AOF重写机制
因为是记录命令,AOF文件会比RDB文件大的多。而且AOF会记录对同一个key的多次写操作,但只有最后一次写操作才有意义。通过执行bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同效果。
Redis也会在触发阈值时自动去重写AOF文件。阈值也可以在redis.conf中配置:
# AOF文件比上次文件 增长超过多少百分比则触发重写
auto-aof-rewrite-percentage 100
# AOF文件体积最小多大以上才触发重写
auto-aof-rewrite-min-size 64mb
4.3 RDB与AOF对比
RDB和AOF各有自己的优缺点,如果对数据安全性要求较高,在实际开发中往往会结合两者来使用。
RDB | AOF | |
---|---|---|
持久化方式 | 定时对整个内存做快照 | 记录每一次写操作 |
数据完整性 | 不完整,两次备份之间丢失 | 相对完整,取决与刷盘策略 |
文件大小 | 有压缩,文件体积小 | 记录命令,文件体积大 |
宕机恢复速度 | 很快 | 慢 |
数据恢复优先级 | 低,因为数据完整性不如AOF | 高,因为数据完整性高 |
系统资源占用 | 高,大量CPU和内存消耗 | 低,主要是磁盘IO资源但AOF重写时会占用大量CPU和内存资源 |
使用场景 | 可以容忍数分钟的数据丢失,追求更快的启动速度 | 对数据安全性要求较高 |
5 Redis事务
Redis事务提供了一种将多个命令请求打包然后一次性、顺序性执行的机制。事务功能是通过MULTI、EXEC、DISCARD和WATCH这几个命令实现的。事务中的所有命令都会按照顺序执行,并且在事务执行期间,Redis服务器不会被其他客户端的请求打断。然而,与传统的关系型数据库事务不同,Redis事务并不能保证严格意义上的原子性,即使在事务中某个命令执行失败,也不会停止执行其他命令,也___不会回滚已经执行的命令___。
5.1 基础命令
-
开始事务:使用
MULTI
命令开始一个事务,执行后Redis返回OK
表示进入了事务模式。 -
命令入队:在
MULTI
之后和EXEC
之前的所有命令,都会被放入事务队列中,但不会立即执行。 -
执行事务:使用
EXEC
命令提交事务,此时Redis会以FIFO(先进先出)的方式执行队列中的所有命令。 -
取消事务:使用
DISCARD
命令可以取消事务,放弃执行已经在事务队列中的命令。 -
监控键值:通过
WATCH
命令可以监控一个或多个键值,如果在事务执行前这些键值发生变化,则会自动回滚事务。
5.2 Redis事务的特性
- 原子性:事务作为一个整体被执行,要么全部执行,要么全部不执行。
- 顺序性:事务内部的命令会按照它们在队列中的顺序执行。
- 排他性:在事务执行期间,Redis服务器不会被其他客户端的请求打断。
- 非隔离性:Redis事务不支持像传统数据库那样的隔离级别,事务中的命令有可能被其他命令插队执行。
- 不支持回滚:如果事务中存在错误,Redis不会回滚已经执行的命令。
6 Redis管道
Redis管道(Pipeline)是Redis客户端发送多个命令请求的一种机制。通过将一系列的单独命令请求打包成一组,可以一次性地从服务器返回结果,从而提高执行效率和性能。在客户端层面,管道操作就像是在一个事务中一样,所有命令都先积累起来,然后在某个时间点一起发送给服务器。服务器端会缓存这些命令,并在内部处理后一次性响应结果给客户端。这种方式减少了网络通信的开销,因为客户端只需要与服务器进行一次交互就可以获取多个命令的结果。
7 Redis发布与订阅
Redis发布与订阅模式(Pub/Sub)是一种消息通信模式,允许消息的发送者(publisher)发送消息到一个频道(channel),而消息的接收者(subscriber)可以订阅这个频道来接收消息。这种模式在实时通信、事件驱动的应用中非常有用。
个人不推荐使用,了解即可
发布订阅的操作命令
SUBSCRIBE
:订阅一个或多个频道。UNSUBSCRIB
:取消订阅某个频道。PSUBSCRIBE
:模式订阅,可以订阅多个匹配模式的频道。PUBLISH
:向一个或多个频道发送消息。
8 Redis复制
Redis主从复制是指将Redis服务器的数据从一个节点(主节点)复制到其他节点(从节点)的过程。主节点负责处理写操作,而复制操作则是单向的,只能由主节点到从节点。一个主节点可以有多个从节点,但一个从节点只能有一个主节点。主从复制的主要作用包括数据冗余、读写分离和故障恢复。
8.1 主从复制
配从不配主:从机配置去找主机,主机不动
从机配置:
masterauth <master-password>
replicaof master-ip master-port
常用命令:
info replication
:可以查看复制节点的主从关系和配置信息replicaof master-ip master-port
:配置在conf中slaveof master-ip master-port
:切换主库slaveof no one
:停止连接
操作步骤:
- 开启
daemonize yes
- 注释掉
bing 127.0.0.1
- 设置
protected-mode no
- 指定端口
- 指定当前工作目录
pid
文件名字log
文件名字requirepass
dump.rdb
名字aof
文件,appendfilename
- 从机访问主机的通行密码
masterauth
注意:
从机只读,主机可读可写(一般只做写)
从机开机迟让可复制主机所有信息
主机挂掉,从机原地待命,不会争夺主机
主机重新启动,主从关系依然在
配置文件中的永久有效,手动命令的单次有效
Redis Springboot整合
pom文件导入
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
properties配置
spring.redis.host=192.168.200.128
spring.redis.port=6379
spring.redis.password=123456
spring.redis.database=0
aster-ip master-port`:配置在conf中
slaveof master-ip master-port
:切换主库slaveof no one
:停止连接
操作步骤:
- 开启
daemonize yes
- 注释掉
bing 127.0.0.1
- 设置
protected-mode no
- 指定端口
- 指定当前工作目录
pid
文件名字log
文件名字requirepass
dump.rdb
名字aof
文件,appendfilename
- 从机访问主机的通行密码
masterauth
注意:
从机只读,主机可读可写(一般只做写)
从机开机迟让可复制主机所有信息
主机挂掉,从机原地待命,不会争夺主机
主机重新启动,主从关系依然在
配置文件中的永久有效,手动命令的单次有效
Redis Springboot整合
pom文件导入
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
properties配置
spring.redis.host=192.168.200.128
spring.redis.port=6379
spring.redis.password=123456
spring.redis.database=0
相关文章:
redis下载、基础数据类型、操作讲解说明,持久化、springboot整合等
1 Redis是什么 官网:https://redis.io 开发者:Antirez Redis诞生于2009年全称是Remote Dictionary Server 远程词典服务器,是一个基于内存的键值型NoSQL数据库。 Redis是一个开源的、高性能的键值对存储系统,它支持多种数据结构&…...
原生js上传图片
无样式上传图片 创建一个 FormData 对象:这个对象可以用于存储数据。 将文件添加到 FormData 对象:通过 append() 方法,将用户选择的文件添加到 formData 对象中。 使用 fetch 发送请求:使用 fetch API 或者其他方法将 FormDat…...
【SpringBoot+Vue】x-admin管理系统跟做
技术栈 前端技术说明Vue前端框架Vuex全局状态管理框架ElementUI前端UI框架Axios前端HTTP框架vue-element-admin项目脚手架 后端技术说明SpringBoot容器MVC框架MyBatisORM框架MyBatis-plusMyBatis增强工具Redis非关系型数据库 数据库准备 SET NAMES utf8mb4; SET FOREIGN_KE…...
计算机网络 —— HTTP 协议(详解)
前一篇文章:网页版五子棋—— WebSocket 协议_网页可以实现websocket吗-CSDN博客 目录 前言 一、HTTP 协议简介 二、HTTP 协议格式 1.抓包工具的使用 2.抓包工具的原理 3.抓包结果 4.HTTP协议格式总结 三、HTTP 请求 1. URL (1)UR…...
MacOS 配置github密钥
MacOS 配置github密钥 1. 生成GitHub的SSH密钥对 ssh-keygen -t ed25519 -C "xxxxxxx.com" -f ~/.ssh/id_ed25519_github 其中 xxxxxxxxxxx.com 是注册github、gitee和gitlab的绑定账号的邮箱 -t ed25519:生成密钥的算法为ed25519(ed25519比rsa速度快&…...
我的第一个创作纪念日 —— 梦开始的地方
前言 时光荏苒,转眼间,我已经在CSDN这片技术沃土上耕耘了365天 今天,我迎来了自己在CSDN的第1个创作纪念日,这个特殊的日子不仅是对我过去努力的肯定,更是对未来持续创作的激励 机缘 回想起初次接触CSDN,那…...
float globalMapVIsualizationLeafSize; 的中文意思是什么
1.在visual studio 中新建文件 没有包含#include <string>头文件,也可以使用 str2.append(", C");吗? 在 Visual Studio 或任何其他 C 开发环境中,即使新建的文件中没有显式包含 #include <string> 头文件,…...
合规性要求对漏洞管理策略的影响
讨论漏洞管理中持续面临的挑战,包括确定漏洞的优先级和解决修补延迟问题。 介绍合规性要求以及自动化如何简化漏洞管理流程。 您认为为什么尽管技术不断进步,但优先考虑漏洞和修补延迟等挑战仍然存在? 企业基础设施日益复杂,攻…...
【Delphi】modbus-TCP 协议库
在日常开发中,也会遇到使用modbus的部件,比如温度控制器、读卡器等等,那么使用Delphi开发,也就必须遵守modbus-TCP协议,如果自己使用TCP控件写也没有问题,不过如果有开源的三方库,别人已经调试过…...
乐橙云小程序插件接入HbuilderX
乐橙插件使用: 1.配置app.json文件,uniapp中在mainfest.json中配置 https://uniapp.dcloud.net.cn/collocation/manifest.html#mp-weixin ** 2、集成插件页面.json文件 ** uniapp在 pages.json 对应页面的 style -> usingComponents 引入组件&…...
Python世界:复制粘贴?没那么简单!浅谈深拷贝与浅拷贝
Python世界:复制粘贴?没那么简单!浅谈深拷贝与浅拷贝 问题引入切片拷贝是深还是浅?深拷贝和浅拷贝到底有啥区别?本文小结 问题引入 Python实现中,最近遇到个小问题,对其中的拷贝理解更深了些&a…...
vue3实现el-table的拖拽
我这里使用的是 sortablejs 插件; 安装命令: npm install sortablejs --save 注意点: 你的表格数据中要有id作为key去使用; <div class"draggable"><el-table row-key"id" :data"form.tableData" style"width: 100%" max-…...
Apache SSI 远程命令执行漏洞
目录 1、漏洞描述 2、访问页面 3、dirsearch工具爆破出上传目录 编辑 4、登录后台 5、上传shell.shtml一句话木马文件 6、拿到flag 1、漏洞描述 在测试任意文件上传漏洞的时候,目标服务端可能不允许上传php后缀的文件。如果目标服务器开启了SSI与CGI支持&a…...
高效集成:将聚水潭数据导入MySQL的实战案例
聚水潭数据集成到MySQL:店铺信息查询案例分享 在数据驱动的业务环境中,如何高效、准确地实现跨平台的数据集成是每个企业面临的重要挑战。本文将聚焦于一个具体的系统对接集成案例——将聚水潭的店铺信息查询结果集成到MySQL数据库中,以供BI…...
Elasticsearch面试内容整理-面试注意事项
在准备 Elasticsearch 面试时,除了掌握技术知识外,还需要注意如何有效展示你的技能和经验。以下是一些 Elasticsearch 面试的注意事项和建议: 掌握基础概念 在面试中,面试官通常会首先评估你对 Elasticsearch 基础概念的理解,包括集群架构、分片、副本、节点类型等。这些是…...
学习threejs,使用specularMap设置高光贴图
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.MeshPhongMaterial高…...
Cannot resolve symbol ‘ActivityThread‘ | Android 语法
背景 ActivityThread 是 Android 系统内部使用的一个类,它位于 android.app 包中,但在 Android SDK 的公共 API 中并没有公开。 由于 ActivityThread 是隐藏的内部类,因此在编写单元测试或功能开发时,无法直接引用它。可以使用反射来访问内部 API,或者使用依赖注入的方式…...
Cypress内存溢出奔溃问题汇总
内存溢出报错信息 <--- Last few GCs ---> [196:0xe58001bc000] 683925 ms: Scavenge 1870.7 (1969.9) -> 1865.6 (1969.9) MB, 6.07 / 0.00 ms (average mu 0.359, current mu 0.444) task; [196:0xe58001bc000] 683999 ms: Scavenge 1872.4 (1969.9) -> 1867.1…...
debian 11 虚拟机环境搭建过坑记录
目录 安装过程系统配置修改 sudoers 文件网络配置换源安装桌面mount nfs 挂载安装复制功能tab 无法补全其他安装 软件配置eclipse 配置git 配置老虚拟机硬盘挂载 参考 原来去 debian 官网下载了一个最新的 debian 12,安装后出现包依赖问题,搞了半天&…...
【k8s深入学习之 event 记录】初步了解 k8s event 记录机制
event 事件记录初始化 一般在控制器都会有如下的初始化函数,初始化 event 记录器等参数 1. 创建 EventBroadcaster record.NewBroadcaster(): 创建事件广播器,用于记录和分发事件。StartLogging(klog.Infof): 将事件以日志的形式输出。StartRecording…...
InterHub:为自动驾驶提供密集互动事件的自然驾驶轨迹数据集
InterHub 是一个为自动驾驶领域设计的自然驾驶轨迹数据集,它通过深入挖掘自然驾驶记录中的密集互动事件而构建。 InterHub 的特点在于其形式化的方法,这使得数据集能够精确描述和提取多智能体之间的互动事件,揭示了现有自动驾驶解决方案的局限…...
鸿蒙Next星河版基础用例
目录: 1、鸿蒙箭头函数的写法2、鸿蒙数据类型的定义3、枚举的定义以及使用4、position绝对定位及层级zIndex5、字符串的拼接转换以及数据的处理(1)字符串转数字(2)数字转字符串(3)布尔值转换情况(4)数组的增删改查 6、三元表达式7、鸿蒙for循环的几种写法7.1、基本用…...
ScribblePrompt 医学图像分割工具,三种标注方式助力图像处理
ScribblePrompt 的主要目标是简化医学图像的分割过程,这在肿瘤检测、器官轮廓描绘等应用中至关重要。相比依赖大量人工标注数据,该工具允许用户通过少量输入(例如简单的涂鸦或点位)来引导模型优化分割结果。这种方式减少了医学专家…...
PKO-LSSVM-Adaboost班翠鸟优化最小二乘支持向量机结合AdaBoost分类模型
PKO-LSSVM-Adaboost班翠鸟优化最小二乘支持向量机结合AdaBoost分类模型 目录 PKO-LSSVM-Adaboost班翠鸟优化最小二乘支持向量机结合AdaBoost分类模型效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.PKO-LSSVM-Adaboost班翠鸟优化最小二乘支持向量机结合AdaBoost分类模…...
5G学习笔记之随机接入
目录 1. 概述 2. MSG1 2.1 选择SSB 2.2 选择Preamble Index 2.3 选择发送Preamble的时频资源 2.4 确定RA-RNTI 2.5 确定发送功率 3. MSG2 4. MSG3 5. MSG4 6. 其它 6.1 切换中的随机接入 6.2 SI请求的随机接入 6.3 通过PDCCH order重新建立同步 1. 概述 随机接入…...
爬虫专栏第二篇:Requests 库实战:从基础 GET 到 POST 登录全攻略
简介:本文聚焦 Requests 库的强大功能与应用实战。首先介绍其安装步骤及版本选择要点,随后深入讲解 GET 请求,以百度页面为例,展示如何发起基本 GET 请求、巧妙添加 headers 与参数以精准搜索,以及正确设置 encoding 避…...
Android Studio更改项目使用的JDK
一、吐槽 过去,在安卓项目中配置JDK和Gradle的过程非常直观,只需要进入Android Studio的File菜单中的Project Structure即可进行设置,十分方便。 原本可以在这修改JDK: 但大家都知道,Android Studio的狗屎性能,再加…...
鸿蒙技术分享:Navigation页面管理-鸿蒙@fw/router框架源码解析(二)
本文是系列文章,其他文章见: 鸿蒙fw/router框架源码解析(一)-Router页面管理 鸿蒙fw/router框架源码解析(三)-Navigation页面容器封装 鸿蒙fw/router框架源码解析(四)-路由Hvigor插件…...
数据结构:树
树的基本定义: 树是一种数据结构,它是由n(n>1)个有限节点组成一个具有层次关系的集合。把它叫做 “树” 是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: …...
矩阵sum,prod函数
s u m sum sum表示求和, p r o d prod prod表示求乘积 s u m sum sum函数 对于矩阵,可以对某一行或某一列求和,也可以对矩阵整体求和 s u m ( a , 1 ) sum(a,1) sum(a,1)计算每一列的和 s u m ( a , 2 ) sum(a,2) sum(a,2)计算每一行的和 计算矩阵整体…...
Cursor安装与使用,5分钟完成需求
Cursor简单介绍 Cursor是一款基于AI的代码编辑器,旨在帮助开发者更高效地编写和管理代码。它提供了智能代码补全、AI对话和跨文件编辑等创新功能。 一、安装下载 1、下载cursor:https://www.cursor.com/ 2、注册账号,直接拿自己的邮箱登录…...
嵌入式系统应用-LVGL的应用-平衡球游戏 part1
平衡球游戏 part1 1 平衡球游戏的界面设计2 界面设计2.1 背景设计2.2 球的设计2.3 移动球的坐标2.4 用鼠标移动这个球2.5 增加边框规则2.6 效果图 3 为小球增加增加动画效果3.1 增加移动效果代码3.2 具体效果图片 平衡球游戏 part2 第二部分文章在这里 1 平衡球游戏的界面设计…...
Vue基本语法
Options API 选项式/配置式api 需要在script中的export default一个对象对象中可以包含data、method、components等keydata是数据,数据必须是一个方法(如果是对象,会导致多组件的时候,数据互相影响,因为对象赋值后&…...
UIE与ERNIE-Layout:智能视频问答任务初探
内容来自百度飞桨ai社区UIE与ERNIE-Layout:智能视频问答任务初探: 如有侵权,请联系删除 1 环境准备 In [2] # 安装依赖库 !pip install paddlenlp --upgrade !pip install paddleocr --upgrade !pip install paddlespeech --upgrade In …...
Mac启动服务慢问题解决,InetAddress.getLocalHost().getHostAddress()慢问题。
项目启动5分钟,很明显有问题。像网上其他的提高jvm参数就不说了,应该不是这个问题,也就快一点。 首先找到自己的电脑名称(用命令行也行,只要能找到自己电脑名称就行,这里直接在共享里看)。 复制…...
Django 视图层
from django.shortcuts import render, HttpResponse, redirectfrom django.http import JsonResponse1. render: 渲染模板 def index(request):print(reverse(index))return render(request, "index.html")return render(request, index.html, context{name: lisi})…...
HickWall 详解
优质博文:IT-BLOG-CN 一、监控分类 【1】Tracing调用链: 【2】Logging日志: 【3】Metrics指标:在应用发布之后,会长时间存在的度量维度。某个接口的请求量、响应时间。 Metrics数据模型 二、Metirc 接入 【1】pom…...
开源的跨平台SQL 编辑器Beekeeper Studio
一款开源的跨平台 SQL 编辑器,提供 SQL 语法高亮、自动补全、数据表内容筛选与过滤、连接 Web 数据库、存储历史查询记录等功能。该编辑器支持 SQLite、MySQL、MariaDB、Postgres 等主流数据库,并兼容 Windows、macOS、Linux 等桌面操作系统。 项目地址…...
Linux应用层学习——Day4(进程处理)
system #include<stdio.h> #include<stdlib.h>int main(int argc, char const *argv[]) {//使用标准库函数创建子进程//int system (const char *__command);//const char *__command:使用linux命令直接创建一个子进程//return:成功返回0 失败返回失败编号int sys…...
起别名typedef
#include<stdio.h> //typedef int myType1; //typedef char myType2; typedef struct { int a; int b; }po; int main() { /*myType1 a5; myType2 bo; printf("%d\n",a); printf("%c\n",b);*/ po p;//不需要加struct关键…...
【Linux内核】ashmem pin/unpin
前言 在 Linux 内核的 ASHMEM(Android Shared Memory)实现中,pin 和 unpin 操作主要用于管理共享内存的生命周期和可用性。这些操作有助于确保在内存使用期间,特定的共享内存区域不会被回收或释放。 Pin 操作 定义 Pin 操作用…...
【docker】docker网络六种网络模式
Docker 网络模式总结 网络模式描述使用场景bridge默认的网络模式,容器之间通过虚拟网桥通信,容器与宿主机隔离。单机部署、本地开发、小型项目host容器与宿主机共享网络堆栈,容器直接使用宿主机的 IP 地址。高性能网络应用、日志处理、大量与…...
永磁同步电机谐波抑制算法(11)——基于矢量比例积分调节器(vector PI controller,VPI controller)的谐波抑制策略
1.前言 相比于传统的谐振调节器,矢量比例积分调节器(vector PI controller,VPI controller)多一个可调零点,能够实现电机模型的零极点对消。因此VPI调节器也被广泛应用于交流控制/谐波抑制中。 2.参考文献 [1] A. G…...
排序算法中稳定性的意义和作用
多关键字排序:当需要对数据进行多个关键字排序时,稳定性变得非常重要。例如,先按次要关键字排序,再按主要关键字排序。如果排序算法是稳定的,那么在按主要关键字排序后,次要关键字的顺序将被保留。保持关联…...
网站怎么防御https攻击
HTTPS攻击,它不仅威胁到网站的数据安全,还可能影响用户隐私和业务稳定运行。 HTTPS攻击主要分为以下几种类型: 1.SSL劫持:攻击者通过中间人攻击手段,篡改HTTPS流量,从而实现对数据的窃取或伪造。 2.中间人攻…...
gitignore 不起作用
.gitignore不起作用 文件已提交至远程仓库,已经被Git跟踪。清除缓存.gitignore位置可能不是与 .git隐藏文件夹同级目录。将文件移至同级目录缓存未清除 清除缓存 清楚git缓存步骤 进入项目路径 清除本地当前的Git缓存 git rm -r --cached . 应用.gitignore等本地…...
Hive学习基本概念
基本概念 hive是什么? Facebook 开源,用于解决海量结构化日志的数据统计。 基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能 本质是将HQL转化为MapReduce程序。 Hive处理的数据存储在H…...
在 Ubuntu 使用 fonts-noto-cjk 设置 Matplotlib 支持中文的完整教程
在 Ubuntu 使用 fonts-noto-cjk 设置 Matplotlib 支持中文的完整教程 1. 为什么需要配置中文字体?2. 安装 fonts-noto-cjk安装命令:检查字体安装是否成功 3. 配置 Matplotlib 支持中文3.1 手动加载字体3.2 设置全局字体(可选)修改…...
《C++ Primer Plus》学习笔记|第10章 对象和类 (24-12-2更新)
文章目录 10.3 类的构造函数和析构函数10.3.2 使用构造函数显式地调用构造函数隐式地调用构造函数使用对象指针 10.3.3默认构造函数10.3.4 析构函数析构函数示例 10.4 this指针三个const的作用 10.5 对象数组10.6 类作用域10.9 复习题1.什么是类?2.类如何实现抽象、…...
SpringMVC接收数据
一、访问路径设置: RequestMapping注解的作用就是将请求的URL地址和处理请求的方式(handler方法)关联起来,建立映射关系;SpringMVC接收到指定的请求,就会来找到在映射关系中对应的方法来处理这个请求 1.精准路径匹配: 在RequestMapping注解指定URL地址…...