Review --- Redis
Redis
redis是什么?
Redis是一个开源的,使用C语言编写的,支持网络交互的,key-value数据结构存储系统,支持多种语言的一种非关系型数据库,它可以用作数据库(存储一些简单的数据,例如新闻点赞量),**缓存(秒杀的商品数量信息)**和消息中间件(两个项目间交换数据)
mysql在硬盘上存储数据:客户端不断刷新会攻击mysql,redis缓存则可以抵挡,同一请求不断刷新时就从redis读取数据返回给客户端,不跟mysql进行交互
Redis特点
- Redis 将数据存储在内存中,也支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
- 性能极高 , Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s 。
- Redis 供 list,set,zset,hash 等数据结构的存储来进行存储数据。
- 原子 – Redis 的所有操作都是原子性的,同时 Redis 还支持对几个操作全并后的原子性执行。
- Redis 分布式集群化扩展性极,高即 master-slave(主-从)模式。
为什么使用Redis?
随着 web3.0(支持大量用户使用添加,全民参与,例如头条、抖音 用户量很大,大量用户来连接数据库 【链接太多,IO瓶颈】 为了缓解关系型数据库的压力,可以将数据暂时存储在redis中,甚至有些数据直接存储在redis中,从而实现对关系型数据库的保护) 的时代到来,传统的关系型数据库在大量的访问压力出现了一些性能问题,如连接数量问题,IO瓶颈问题等,此时需要使用redis对部分数据进行缓存,或者将某些数据直接存储在 redis 中,以减少对关系型数据库的访问压力.
当然 redis 数据库也是不能完全替代关系型数据库的,他们是相互依赖的.
Redis安装(通过docker)
Redis中的五种数据存储结构(值)
redis中键都是string类型的,没有其它数据结构
五种数据结构:
-
String:redis最基本类型,单值存储(存一个具体值,也可以存储一个java中的对象,对象是被序列化为json格式的字符串)一个值最大存储512MB
计数器:
set news_views 0
incr news_views (+1)
decr news_views (-1)
get news_views (获得值)
-
Hash: 是一个string类型的属性和值的映射表,hash特别适合存储对象
新闻点赞
新闻收藏
hset key 属性 值
hget key 属性
hdel key 属性
hlen key
hgetall key 返回key下所有属性值
-
List(列表):Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。 有添加顺序
lpush list名 值
rpush list名 值
rpop list名
lpop list名
lrange list名 start stop(索引从0开始)
-
Set(集合):Redis 的 Set 是无序集合。
sadd set名 值
srem set名
smembers set名 (查看指定set名下所有的元素)
scard set名(查看指定set下元素个数)
-
zset(有序集合):有排序
zadd key 分数 值
zrem key 值
zscore key 值(返回值的分数)
zcard key(查看key下元素个数)
java程序连接redis
-
使用官方提供的Jedis类实现连接
通过Jedis对象调用各种方法
-
使用springboot对jedis的封装实现
- 管理连接redis对象,提供数据库连接池功能
- 针对每种数据结构分别封装不同的实现类
- 事务(跳过)
- 提供了对键值序列化,反序列化操作
-
具体搭建
Redis缓存(穿透、击穿、雪崩)
1.**缓存穿透:**请求访问不存在的数据,redis查不到就请求直接落在了mysql数据库上了,mysql查不到数据,就没给缓存同步数据,大量访问不存在数据的请求直接落在数据库上,数据库可能崩溃宕机。
解决方法:1)每次mysql根据id查出空值也同步到缓存,这样该请求再次过来就会落在redis而不对数据库进行操作
2)缓存预热时候,启动布隆过滤器,客户端请求过来后先到布隆过滤器,如果该数据存在就将该请求传到缓存,不存在就直接返回
布隆过滤器依赖于位图(bitmap)
2.**缓存击穿:**一个热点key过期了,恰巧这时候有大量请求过来请求这个数据,由于key过期了,大量请求直接落在了mysql数据库上,有可能导致mysql宕机罢工
解决方法:1)逻辑过期,将热点key创建时候设置为永不过期,设置一个过期时间字段,确保数据就算过期了也可以查询到.一个请求过来查询数据发现过期了,则开启一个线程并获加锁到数据库重新查询数据 重置缓存.在这个重置缓存过程中 第一个请求会接受过期数据.如果这个时候另一个请求过来也查询这个数据,那么它会获取锁失败,然后直接返回现在的缓存数据
2)给查询方法加互斥锁,发现数据过期时,启动重置缓存方法并获取锁,这个时候其他线程查询这个数据时候,获取锁失败,休眠一会,继续查询缓存中是否存在该数据,直至缓存重置线程完
3.缓存雪崩: 同一时间大量热点key过期了/Redis服务宕机,所有热点key的请求落在了数据库,数据库可能宕机
解决方法: 1)针对第一种情况在原有设置过期时间上再随机加一个过期时间;
2)针对第二种情况 :
- 利用redis集群提高服务的可用性,比如哨兵模式、集群模式.
- 在设计这个业务系统时候添加降级限流策略,如nginx或者微服务项目的话使用spring cloud gateway网关中设置限流的规则.
- 给业务添加多级缓存,一级使用Guava或Caffeine,二级使用redis缓存
降级限流可作为系统的保底策略,适用于缓存穿透、缓存击穿、缓存雪崩
双写一致性
概念:当修改了数据库数据后,要更改缓存数据,确保数据库和缓存数据一致
读操作: 缓存命中,直接返回;缓存未命中查询数据库数据,写入缓存,设置超时时间
写操作: 延时双删(先删除缓存还是先修改数据库都会出现问题),所以采用删除两次缓存,延时是因为数据库是主从模式,数据从主节点同步到从节点需要时间.
一般放入缓存中的数据都是读多写少,写多读少的话直接操作数据库
1.一致性要求高的
1)互斥锁
2)共享锁readLock(读读不互斥,写互斥)和排他锁(读写、读读都互斥)writeLock也叫独占锁,加锁之后阻塞其它线程读写操作,避免其它线程读脏数据
2.允许延迟一致(短暂的不一致)
1)使用MQ异步通知保证数据的最终一致性,需要保证MQ的可靠性.更新数据之后,通知缓存删除
2)利用canal(监听MySQL的binlog),基于mysql的主从进行实现.不需要修改业务代码,伪装为mysql的一个从节点,canal通过读取binlog数据更新缓存
Redis持久化存储
RDB和AOF
一、RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照.简单来说就是把内存中的所有数据都记录到磁盘中.当Redis实例故障重启后,从磁盘读取快照,恢复数据
save #由Redis主进程来执行RDB,会阻塞所有命令
bgsave #开启子进程执行RDB,来避免主进程收到影响
Redis内部有触发RDB的机制,可以在redis.conf文件中找到,格式如下:
#900秒内,囡至少一个key被修改,则执行basave
save 900 1
save 300 1
save 60 10000
RDB的执行原理是什么?
bgsave开始时会fork主进程得到子进程,子进程共享主进程的内存数据.完成fork后读取内存数据并入RDB文件
如果子进程在持久化数据时候,主进程也在对数据进行操作,可能会出现脏数据的问题,实际上fork主进程得到子进程中,fork采用的是copy-on-write技术:
当主进程执行读操作时,访问共享内存;
当主进程执行写操作时,则会拷贝一份数据,执行操作后再进行数据替换
(fork时候会把共享数据标记为read-only)
二、AOF全称为Append Only File(追加文件). Redis处理的每一个写命令都会记录在AOF文件中,可以看作是命令日志文件.
AOF默认是关闭的,需要修改redis.conf配置文件来开启AOF:
#是否开启AOF功能,默认是no
appendonly yes
#AOF文件的名称
appendfilename “appendonly.aof”
AOF因为是记录命令,AOF文件会比RDB文件大得多.而且AOF会记录对同一个key的多次写操作,但是只有最后一次写操作才有意义.通过执行bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同效果
Redis的数据过期策略
Redis的key过期后,会立即删除吗?
惰性删除:key过期后不管,访问key的时候,判断key是否过期,过期则删除 反之则返回key对应的value
定期删除:定期检查一定量的key是否过期(SLOW模式+FAST模式)
-
SLOW模式是定时任务,执行频率默认为10hz,每次不超过25ms,以通过修改配置文件redis.conf的hz选项来调整这个次数
-
FAST模式执行频率不固定,但两次间隔不低于2ms,每次耗时不超过1ms
优点:可以通过限制删除操作执行的时长和频率来减少删除操作对CPU的影响.另外定期删除,也能有效释放过期键占用的内存.
缺点:难以确定删除操作执行的时长和频率.
Redis的过期删除策略:惰性删除+定期删除两种数据过期策略配合使用
Redis的数据淘汰策略
假如缓存过多,内存是有限的,内存被占满了怎么办?
数据的淘汰策略: 当Redis中的内存不够用时, 此时在向Redis中添加新的key,那么Redis就会按照某一种规则将内存中的数据删除掉,这种数据的删除规则被称之为内存的淘汰策略
Redis中支持8种不同策略来选择要删除的key:
- noeviction: 不淘汰任何key,但是内存满时不允许写入新数据,默认就是这种策略.
- volatile-ttl: 对设置了TTL的key,比较key的剩余TTL值,TTL越小越先被淘汰
- allkeys-random: 对全体key,随机进行淘汰
- volatile-random: 对设置了TTL的key, 随机进行淘汰.
- allkeys-lru: 对全体key, 基于LRU算法进行淘汰
- volatile-lru: 对设置了TTL的key,基于LRU算法进行淘汰
- allkeys-lfu: 对全体key,基于LFU算法进行淘汰
- volatile-lfu: 对设置了TTL的key,基于LFU算法进行淘汰
LRU(Least Recently Used) 最近最少使用. 用当前时间减去最后一次访问时间,这个值越大则淘汰优先级越高.
LFU(Least Frequently Used) 最少频率使用. 会统计每个key的访问频率,值越小淘汰优先级越高.
Redis分布式锁,是如何实现的?
需要结合项目中的业务进行回答,通常情况下,分布式锁使用的场景:
集群情况下的定时任务、抢单、幂等性场景
抢券场景:
单体情况
只适用于单体项目这样写
集群部署
synchronized锁是服务本地的锁,属于jvm,每个微服务都有一个自己的jvm
服务集群情况下就不能使用本地锁解决,只能用外部锁(分布式锁)解决并发
Redis分布式锁
Redis实现分布式锁主要利用Redis的setnx命令. sentx是SET if not exits (如果不存在,则SET)的简写.
- 获取锁:
获取锁的过程需要满足以下条件:
- 锁的键不存在时才能成功设置锁。
- 设置锁时需要指定一个唯一的值(通常是客户端的唯一标识),以避免误删其他客户端的锁。
- 设置锁的同时需要指定一个超时时间,防止死锁(例如某个客户端在持有锁后崩溃(服务器宕机),无法释放锁)。
# 添加锁,lock_key
: 锁的键名,用于标识锁。unique_value
: 锁的值,通常是一个唯一的标识符(如客户端 ID 或 UUID),用于区分不同的客户端。 NX是互斥 表示只有当键不存在时才设置键, EX是设置超时时间
SET lock_key unique_value NX EX 10 (过期时间单位为秒)
- 释放锁:
释放锁时需要注意以下几点:
- 只有持有锁的客户端才能释放锁。
- 为了避免误删其他客户端的锁,释放锁时需要检查锁的值是否与当前客户端的唯一标识匹配。
- 使用 Lua 脚本可以保证操作的原子性。
# 释放锁,删除即可
DEL lock_key
redisson实现的分布式锁-执行流程
线程二有等待阈值,一般达不到
redisson实现的分布式锁-可重入
同一个线程才可以重入,不是同一个线程互斥
redisson实现的分布式锁-主从一致性
Redis整体思想是AP思想,优先考虑高可用性.
有些业务必须要强一致性则采用CP思想的zookeeper
Redis集群方案
- 主从复制
- 哨兵模式
- 分片集群
主从复制
单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离
一般都是一主多从,主节点负责写数据,从节点负责读数据
主从数据同步原理
- 主从全量同步:
- 主从增量同步:
哨兵的作用
Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。哨兵的结构和作用如下:
服务状态监控
Sentinel基于心跳机制监测服务状态,每隔一秒向集群的每个实例发送ping命令:
- 主观下线:如果某sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线
- 客观下线:若超过指定数量(quorum)的sentinel都认为该实例主观下线,则该实例客观下线。quorum值最好超过Sentinel实例数量的一半。
Redis集群(哨兵模式)脑裂
分片集群结构
主从和哨兵可以解决高可用、高并发读的问题。但是依然有两个问题没有解决:
- 海量数据存储问题
- 高并发写的问题
使用分片集群可以解决上述问题,分片集群特征:
- 集群中有多个master,每个master保存不同数据
- 每个master都可以有多个slave节点
- master之间通过ping监测彼此健康状态
- 客户端请求可以访问集群任意节点,最终都会被转发到正确节点
分片集群结构-数据读写
Redis分片集群引入了哈希槽的概念,Redis集群有16384个哈希槽,将16384个插槽分配到不同的实例。每个key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分 hash 槽。
根据key的有效部分计算哈希值,对16384取余(有效部分,如果key前面有大括号,大括号的内容就是有效部分,如果没有,则以key本身作为有效部分)余数作为插槽,寻找插槽所在的实例。
Redis是单线程的,为什么还那么快?
- Redis是纯内存操作,执行速度非常快
- 采用单线程,避免不必要的上下文切换可竞争条件,多线程还要考虑线程安全问题
- 使用I/O多路复用模型,非阻塞IO
可以解释下I/O多路复用模型?
Redis是纯内存操作,执行速度非常快,它的性能瓶颈是网络延迟而不是执行速度,I/O多路复用模型主要就是实现了高效的网络请求
可以看到,非阻塞IO模型中,用户进程在第一个阶段是非阻塞,第二个阶段是阻塞状态。虽然是非阻塞,但性能并没有得到提高。而且忙等机制会导致CPU空转,CPU使用率暴增。
相关文章:
Review --- Redis
Redis redis是什么? Redis是一个开源的,使用C语言编写的,支持网络交互的,key-value数据结构存储系统,支持多种语言的一种非关系型数据库,它可以用作数据库(存储一些简单的数据,例如新闻点赞量),**缓存(秒…...
Sql刷题日志(day8)
一、笔试 1、right:提取字符串右侧指定数量的字符 right(string,length) /*string:要操作的字符串。length:要从右侧提取的字符数 */ 2、curdate():返回当前日期,格式通常为 YYYY-MM-DD 二、面试 1、自变量是不良体验反馈,因…...
【Science Advances】普林斯顿大学利用非相干光打造可重构纳米光子神经网络
(导读 ) 人工智能对计算性能需求剧增,电子微处理器发展受功耗限制。光学计算有望解决这些问题,光学神经网络(ONNs)成为研究热点,但现有 ONNs 因设计缺陷,在图像分类任务中精度远低于现代电子神经网络&#…...
2025-05-07 Unity 网络基础8——UDP同步异步通信
文章目录 1 UDP 概述1.1 通信流程1.2 TCP 与 UDP1.3 UDP 分包1.4 UDP 黏包 2 同步通信2.1 服务端2.2 客户端2.3 测试 3 异步通信3.1 Bgin / End 方法3.2 Async 方法 1 UDP 概述 1.1 通信流程 客户端和服务端的流程如下: 创建套接字 Socket。用 Bind() 方法将套…...
K8S - 金丝雀发布实战 - Argo Rollouts 流量控制解析
一、金丝雀发布概述 1.1 什么是金丝雀发布? 金丝雀发布(Canary Release)是一种渐进式部署策略,通过逐步将生产流量从旧版本迁移至新版本,结合实时指标验证,在最小化风险的前提下完成版本迭代。其核心逻辑…...
手持小风扇方案解说---【其利天下技术】
春去夏来,酷暑时节,小风扇成为外出必备的解暑工具,近年来,随着无刷电机的成本急剧下降,小风扇也逐步从有刷变无刷化了。 数量最大的如一箱无刷马达,其次三相低压无刷电机也大量被一些中高端风扇大量采用。…...
Qt开发:枚举的介绍和使用
文章目录 一、概述二、Qt 中定义和使用枚举2.1 普通枚举的定义方式2.2 使用枚举 三、配合 Qt 元对象系统使用枚举3.1 使用 Q_ENUM(Qt 5.5 及以上)3.2 示例:枚举值转字符串3.4 示例:字符串转枚举值 四、枚举与字符串相互转换五、枚…...
HarmonyOS运动开发:如何集成百度地图SDK、运动跟随与运动公里数记录
前言 在开发运动类应用时,集成地图功能以及实时记录运动轨迹和公里数是核心需求之一。本文将详细介绍如何在 HarmonyOS 应用中集成百度地图 SDK,实现运动跟随以及运动公里数的记录。 一、集成百度地图 SDK 1.引入依赖 首先,需要在项目的文…...
“胖都来”商标申请可以通过注册不!
近日“胖都来”被网友认为是蹭“胖东来”品牌流量在互联网上引起争议,看到许多自媒体说浙江这家公司已拿到“胖都来”的注册商标,普推知产商标老杨经检索后发现是没有的,只是申请受理。 对于商城类主要类别是在35类广告销售,核心是…...
【Django】中间件
Django 中间件是 Django 框架里一个轻量级、可插拔的组件,它能在全局范围内对 Django 的请求和响应进行处理。中间件处于 Django 的请求处理流程之中,在请求抵达视图函数之前以及视图函数返回响应之后执行特定操作。以下是关于 Django 中间件的详细介绍&…...
电子电器架构 --- 48V架构的一丢丢事情
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...
什么是Blender?怎么获取下载Blender格式文件模型
glbxz.com glbxz.com 官方可以下载Blender格式文件模型 BlenderBlender 是一个免费的开源程序,用于建模和动画,最初由一家名为 Neo Geo 的动画工作室作为内部应用程序开发,后来作为自己的程序发布。这是一个称职的程序,近年来由于…...
Ubuntu安装pgsql
一、通过 APT 安装(推荐) 更新软件包列表 sudo apt update 安装 PostgreSQL 核心包及工具 sudo apt install postgresql postgresql-client postgresql-contrib • postgresql:数据库服务端 • postgresql-client:命令行…...
Qwen2-VL详解
一、引言 在人工智能领域,多模态大模型的发展备受关注。Qwen2-VL 作为一款先进的多模态模型,致力于克服现有方法在处理图像和视频数据时存在的不足,显著提升多模态信息的理解与交互能力。本文将全面且深入地阐述 Qwen2-VL 的创新理念、精妙的模型架构、严谨的训练流程、卓越…...
定长滑动窗口---初阶篇
目录 滑动窗口核心思想 定长滑动窗口套路 定长滑动窗口习题剖析 1456. 定长子串中元音的最大数目 643. 子数组最大平均数 I 1343. 大小为 K 且平均值大于等于阈值的子数组数目 2090. 半径为 k 的子数组平均值 2379. 得到 K 个黑块的最少涂色次数 2841. 几乎唯一子数组…...
以pytest_addoption 为例,讲解pytest框架中钩子函数的应用
钩子函数(Hook Function)的概念 钩子函数(Hook Function)是软件框架中预定义的回调接口,允许开发者在程序执行的特定阶段插入自定义逻辑,以扩展或修改框架的默认行为。在 pytest 中,钩子函数覆…...
数据智能重塑工业控制:神经网络在 MPC 中的四大落地范式与避坑指南
一、引言:工业控制的范式革命 在工业 4.0 的浪潮中,传统基于物理模型的控制方法(如 PID、线性二次型调节器 LQR)正面临前所未有的挑战。以石化行业为例,某炼油厂的催化裂化装置(FCCU)因反应机理…...
AB测试面试题
AB测试面试题 常考AB测试问答题(1)AB测试的优缺点是什么?(2)AB测试的一般流程/介绍一下日常工作中你是如何做A/B实验的?(3)第一类错误 vs 第二类错误 vs 你怎么理解AB测试中的第一、二类错误?(4)统计显著=实际显著?(5)AB测试效果统计上不显著?(6)实验组优于对…...
phpstudy升级新版apache
1.首先下载要升级到的apache版本,这里apache版本为Apache 2.4.63-250207 Win64下载地址:Apache VS17 binaries and modules download 2.将phpstudy中原始apache复制备份Apache2.4.39_origin 3.将1中下载apache解压, 将Apache24复制一份到ph…...
民宿管理系统6
普通管理员管理: 新增普通管理员: 前端效果: 前端代码: <body> <div class"layui-fluid"><div class"layui-row"><div class"layui-form"><div class"layui-f…...
【iOS】源码阅读(三)——内存对齐原理
文章目录 前言获取内存大小的三种常用方式sizeofclass_getInstanceSizemalloc_size 总结 前言 之前学习alloc相关源码,涉及到内存对齐的相关内容,今天笔者详细学习了一下相关内容并写了此篇博客。 获取内存大小的三种常用方式 获取内存大小的方式有很多…...
在 Ubuntu 中配置 Samba 实现「特定用户可写,其他用户只读」的共享目录
需求目标 所有认证用户可访问 Samba 共享目录 /path/to/home;**仅特定用户(如 developer)**拥有写权限;其他用户仅允许读取;禁止匿名访问。 配置步骤 1. 设置文件系统权限 将目录 /home3/guest 的所有权设为 develo…...
配置指定地址的conda虚拟Python环境
创建指定路径的 Conda 环境 在创建环境时,使用 --prefix 参数指定自定义路径: conda create --prefix/your/custom/path/my_env python3.8 说明: /your/custom/path/my_env:替换为你希望存放环境的路径(如 D:\projec…...
从彼得·蒂尔四象限看 Crypto「情绪变迁」:从密码朋克转向「标准化追求者」
作者:Techub 精选编译 撰文:Matti,Zee Prime Capital 编译:Yangz,Techub News 我又带着一篇受彼得蒂尔(Peter Thiel)启发的思想杂烩回来了。作为自封的「蒂尔学派」信徒,我常透过他…...
VS Code 常用插件
React Auto Import - ES6, TS, JSX, TSX Auto Rename Tag ES7 React/Redux/React-Native snippets Markdown Markdown All in One Markdown Preview Enhanced Other Prettier - Code formatter 格式化代码 Live Server 本地服务器实时预览与自动刷新...
深入探讨 UDP 协议与多线程 HTTP 服务器
深入探讨 UDP 协议与多线程 HTTP 服务器 一、UDP 协议:高效但“不羁”的传输使者 UDP 协议以其独特的特性在网络传输中占据一席之地,适用于对实时性要求高、能容忍少量数据丢失的场景。 1. UDP 的特点解析 无连接:无需提前建立连接&…...
Node.js入门指南:开启JavaScript全栈开发之旅
Hi,我是布兰妮甜 !Node.js让JavaScript突破了浏览器的限制,成为全栈开发的利器。作为基于V8引擎的高性能运行时,它彻底改变了JavaScript只能做前端开发的局面。本文将带你快速掌握Node.js的核心用法:环境搭建与模块系统…...
【STM32F1标准库】理论——通信协议:串口
目录 一、简介 二、连接方式 三、串口参数与时序 1.参数 2.时序 四、STM32实现串口通信的方法 1.使用软件模拟 2.使用硬件外设 杂谈 1.通信的目的 2.常见可以使用串口通信的模块 3.串口常用电平标准 4.串口从波形反推数据 5.奇偶校验 一、简介 命名:USART&#…...
轻松管理房间预约——启辰智慧预约小程序端使用教程
欢迎您使用《启辰智慧预约》场所预约小程序,您可以通过本小程序预约会议室/活动室等,并在预约审批通过后,获取临时开锁密码,开锁密码会在预约时间前30分钟生效。以下是本程序的使用流程。 一、创建单位(新用户注册&am…...
如何在自己的服务器上部署静态网页并通过IP地址进行访问
文件放置 cd /var目录 新建www目录 进入www目录 新建html目录用于放置文件以及相关资源 修改配置文件 sudo nano /etc/nginx/sites-available/default修改index部分的html文件名 修改端口映射避免80冲突 重启Nginx sudo systemctl restart nginx打开浏览器访问即可 h…...
802.11s Mesh 组网框架流程
协议标准 使用 802.11s (标准 Mesh 协议) 基础流程框架 连接流程本质:Beacon → Peer Link → HWMP 路径发现 → 数据传输。mesh与easymesh的区别 阶段详解 阶段1:Beacon广播 作用:周期性宣告Mesh网络存在,同步参数(如Mesh …...
gitcode 上传文件报错文件太大has exceeded the limited size (10 MiB) in commit
登陆gitcoe,在项目设置->提交设置 ,勾选提交文件限制,修改限制的大小。 修改完后,重新提交代码。...
C++代码随想录刷题知识分享-----判断两个字符串是否为字母异位词(Anagram)【LeetCode 242】
✨ 题目描述 给定两个字符串 s 和 t,请判断 t 是否是 s 的字母异位词。 📌 示例 1: 输入:s "anagram", t "nagaram" 输出:true📌 示例 2: 输入:s "…...
Canal mysql to mysql 增加 online 库同步配置指南
Canal 增加新库 online 的配置指南 1. 停止 Canal Adapter 服务 ./bin/stop.sh2. 数据库备份与导入 备份源数据库 mysqldump -h 127.0.0.1 -P 3307 --single-transaction -uroot -p -B online > online.sql导入到目标数据库 mysql -h 127.0.0.1 -P 3308 -uroot -p <…...
Spring MVC中Controller是如何把数据传递给View的?
在 Spring MVC 中,Controller 负责请求的处理,准备需要展示的数据,并将这些数据传递给 View,由 View 负责最终的页面渲染。数据从 Controller 传递到 View 主要通过模型 (Model) 实现。 Spring MVC 提供了以下几种方式让 Control…...
FAST-LIO笔记
1.FAST-LIO FAST-LIO 是一个计算效率高、鲁棒性强的激光-惯性里程计系统。该系统通过紧耦合的迭代扩展卡尔曼滤波器(IEKF)将激光雷达特征点与IMU数据进行融合,使其在快速运动、噪声较大或环境复杂、存在退化的情况下仍能实现稳定的导航。 1…...
挑战用豆包教我学Java01天
今天是豆包教我学Java的第一天,废话不多说直接开始。 1.每日题目: 基础语法与数据类型 题目:编写一个 Java 程序,从控制台读取两个整数,然后计算它们的和、差、积、商,并输出结果。题目:编写…...
基于RT-Thread的STM32G4开发第二讲第二篇——ADC
文章目录 前言一、RT-Thread工程创建二、ADC工程创建三、ADC功能实现1.ADC.c2.ADC.h3.mian.c 四、效果展示和工程分享总结 前言 本文使用的是RT-Thread最新的驱动5.1.0,兼容下面的所有驱动。使用的开发板是蓝桥杯嵌入式国信长安的开发板,MCU是STM32G431…...
居民健康监测小程序|基于微信小程序的居民健康监测小程序设计与实现(源码+数据库+文档)
居民健康监测小程序 目录 基于微信小程序的居民健康监测小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1、用户信息管理 2、健康科普管理 5.3公告类型管理 3、论坛信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 …...
电商双11美妆数据分析
图中展示的是在Jupyter Notebook环境下的Python代码及运行结果。代码利用 seaborn 和 matplotlib 库,以 datal 数据集为基础,绘制上下两个子图。上方子图呈现各店铺中各大类的销售量,下方子图展示各店铺中各大类的销售额,通过条形…...
Spark-Core(双Value类型)
一、RDD转换算子(双Value类型) 1、intersection 函数签名: def intersection(other: RDD[T]): RDD[T] 函数说明:对源 RDD 和参数 RDD 求交集后返回一个新的 RDD 举栗: val dataRDD1 sparkContext.makeRDD(List(…...
【数据库原理及安全实验】实验六 角色访问控制
指导书原文 安全性管理二 【实验目的】 1) 通过语句设置登录用户的权限,实现对不同用户的操作权限的限定。 【实验原理】 1) 定义数据库角色,授予该角色特定权限,建立不同的用户将其置入不同的角色之下,即等于分配了该用户不…...
windows安装micromamba
windows安装 winget install Mamba.Micromamba Set-ExecutionPolicy RemoteSigned micromamba activate 第一次运行会报错,把报错中间那一句init代码跑一下 创建环境什么的和conda一样 把conda换成micromamba就行 绑定快捷键,winget安装&#x…...
vue-quill-editor的失焦事件
vue-quill-editor的用法再此就不再赘述了,只记录我在使用过程中踩的坑。 版本:Vue2 vue-quill-editor3.0.6 封装组件: <vue-quill-editorclass"editor":class"dynamicClasses"ref"myTextEditor"v-model&quo…...
【工具变量】最新华证ESG评级得分数据-含xlsx及dta格式(2009-2024.12)
参考《经济研究》中方先明(2023)的做法,将华证ESG评级进行赋值,指标包含C、CC、CCC、B、BB、BBB、A、AA、AAA共9个等级,将上市公司ESG等级从低到高分别赋值为1至9。将华证ESG评级得分数据更新至2024年12月31日…...
【纯小白博客搭建】Hugo+Github博客部署及主题(stack)美化等界面优化记录
这里写目录标题 HugoGithub博客部署及主题(stack)美化等界面优化写在前面hugo博客搭建教程第一种方案第二种方案 添加浏览量和统计字数添加评论功能添加访客地图 HugoGithub博客部署及主题(stack)美化等界面优化 效果图如下 如果…...
题解:CF2107E Ain and Apple Tree
首先考虑无解的情况。 当这棵树为一条链时,答案取到最大值。证明很简单,假设存在一个节点 u u u 至少有 2 2 2 个孩子节点,任取两个 v 1 , v 2 v_1,v_2 v1,v2,则 dep ( LCA ( v 1 , v 2 ) ) dep ( u ) \text{dep}(\o…...
STM32的看门狗
独立看门狗(IWDG) IWDG简介 独立看门狗(Independent Watchdog,通常缩写为IWDG)主要作用是主要用于检测外界电磁干扰,或硬件异常导致的程序跑飞问题。 WDG本质上是一个12位的递减计数器(滴答定…...
小王包子铺的融资过程以及IPO上市过程
用包子铺来打个通俗易懂的比喻,一步步讲清楚从创业到融资上市的全过程。 🥟 故事背景:老王的包子铺 老王做的包子特别好吃,于是他决定不再只是摆摊,而是创办一家叫 “老王包子铺” 的连锁店。我们就以老王创业为线索&…...
WPF 触发器 Trigger
触发器 Trigger 触发器(Trigger)是 WPF 中的一种机制: 当某个条件满足时,自动改变控件的某些属性,比如颜色、大小、透明度等。 换句话说,就是"如果……那么就……" 的一种规则。 常见触发器类…...