Redis 详解:安装、数据类型、事务、配置、持久化、订阅/发布、主从复制、哨兵机制、缓存
目录
Redis 安装与数据类型
安装指南
Windows
Linux
性能测试
基本知识
数据类型
String
List(双向列表)
Set(集合)
Hash(哈希)
Zset(有序集合)
高级功能
地理位置(Geospatial)
Hyperloglog
Bitmaps
Redis高级功能与配置指南
1. 事务
1.1 事务简介
1.2 事务命令
1.3 锁机制
1.3.1 悲观锁
1.3.2 乐观锁
2. Redis配置文件(redis.conf)
2.1 网络配置
2.2 通用配置
2.3 快照配置(RDB)
2.4 客户端限制
2.5 内存管理
2.6 AOF配置
3. 持久化
3.1 RDB持久化
3.2 AOF持久化
4. 订阅/发布
4.1 概述
4.2 命令说明
4.3 使用示例
4.4 应用场景
Redis主从复制、哨兵模式及缓存问题解决策略
1. Redis主从复制
1.1 概述
1.2 主从复制的工作原理
1.3 配置主从复制
1.4 主从复制的优缺点
2. 哨兵模式
2.1 概述
2.2 哨兵的工作原理
2.3 配置哨兵
2.4 简单部署
2.5 哨兵的优缺点
3. 缓存穿透、击穿与雪崩问题及解决策略
3.1 缓存穿透
3.2 缓存击穿
3.3 缓存雪崩
Redis 安装与数据类型
Redis(Remote Dictionary Server)是一个开源的、支持网络的Key-Value数据库,使用ANSI C语言编写,支持内存和日志型持久化。它提供多种数据类型,常用于数据库、缓存和消息中间件。
安装指南
Windows
- 安装:从 MicrosoftArchive/redis 下载安装包并安装。
- 测试:
ping
:测试服务是否启动。set name cht
:设置键值对。get name
:获取键对应的值。
Linux
前提:确保已安装Java和gcc-c++
。
- 使用源码:
- 下载源码包:
wget -http://download.redis.io/releases/redis-<version>.tar.gz
- 解压:
tar -xzf redis-<version>.tar.gz
- 进入目录:
cd redis-<version>
- 编译:make
- 安装:
sudo make install
- 验证安装:redis-server -version
- 下载源码包:
- 使用Docker:(下面的相关展示使用的是docker)
- 拉取镜像:
docker pull redis
- 运行容器:
docker run -d --name myredis redis
- 进入容器客户端:
docker exec -it myredis redis-cli
- 查看连接:
ps -ef | grep redis
- 停止服务:
shutdown
- 拉取镜像:
性能测试
使用redis-benchmark
测试性能:
- 示例命令:
docker exec -it myredis redis-benchmark -p 6379 -c 100 -n 1000000
- 参数说明:
-h
:主机名/IP。-p
:端口号,默认6379。-c
:并发连接数,默认50。-n
:请求数,默认100000。-d
:数据大小,默认3字节。-t
:指定测试类型。-P
:管道机制。-q
:安静模式。--csv
:输出CSV格式。-r
:随机键空间。
基本知识
- 数据库:默认16个数据库,切换使用
select dbindex
。 - 线程模型:单线程(Redis 6.0起支持多线程)。
- 常用命令:
DBSIZE
:查看键数。key *
:列出所有键。flushdb/FLUSHALL
:清空数据库。exists key
:检查键是否存在。expire key seconds
:设置过期时间。ttl key
:查看剩余时间。type key
:查看键类型。
数据类型
String
适用于字符串存储:
set key value
:设置值。get key
:获取值。append key value
:追加字符串。strlen key
:字符串长度。incr/decr key
:自增/自减。getrange/setrange
:截取/替换子串。setex key seconds value
:设置带过期时间的值。setnx key value
:键不存在时设置。mset/mget
:批量操作。getset key value
:先获取后设置。
List(双向列表)
lpush/rpush
:左边/右边添加元素。lrange
:获取范围内元素。lpop/rpop
:移除左/右边元素。lrem
:移除指定元素。ltrim
:截取并保留范围内元素。rpoplpush
:从源列表末尾移到目标列表开头。lset
:替换元素。linsert
:在指定元素前/后插入新元素。
Set(集合)
不允许重复元素:
sadd
:添加元素。smembers
:查看所有元素。sismember
:检查元素是否存在。scard
:元素个数。srem
:移除元素。srandmember
:随机获取元素。spop
:随机移除元素。smove
:移动元素到另一个集合。sdiff/sinter/sunion
:集合运算。
Hash(哈希)
适合对象存储:
hset
:设置键值。hget/hmget
:获取值。hmset
:批量设置。hgetall
:获取所有键值。hlen
:键的数量。hexists
:检查键是否存在。hkeys/hvals
:键列表/值列表。hincrby/hdecrby
:增量/减量。hsetex/hsetnx
:带过期时间/不存在时设置。
Zset(有序集合)
按分数排序:
zadd
:添加元素。zrange/zrevrange
:升序/降序获取元素。zrem
:移除元素。zcard
:元素个数。zcount
:统计分数区间内的元素。zrangebyscore/zrevrangebyscore
:按分数范围获取元素。
高级功能
地理位置(Geospatial)
处理地理位置数据:
geoadd
:添加地理位置。geopos
:获取位置坐标。geodist
:计算两点距离。georadius/geomember
:查询区域内的位置。geohash
:生成Geohash字符串。zrange/zrem
:操作有序集合。
Hyperloglog
用于基数统计:
pfadd
:添加元素。pfcount
:统计基数。pfmerge
:合并集合。
Bitmaps
位运算支持布尔标志:
setbit/getbit
:设置/获取位值。bitcount
:统计1的位数。bitop
:进行AND、OR、XOR、NOT操作。
Redis高级功能与配置指南
1. 事务
1.1 事务简介
Redis的事务通过MULTI
命令开始,所有事务命令会缓冲到队列中,直到执行EXEC
才会运行。如果在事务执行过程中出现编译错误,所有命令都不执行;运行时错误则继续执行其他命令。
1.2 事务命令
MULTI
:开始事务。EXEC
:执行事务。DISCARD
:取消事务,放弃缓冲中的命令。
1.3 锁机制
1.3.1 悲观锁
- 总是假设最坏情况会发生,所有操作都加锁。
- 适用于并发冲突较高的场景。
1.3.2 乐观锁
- 假设冲突可能性较小,使用
WATCH
监视键。 - 事务执行前检查键是否被修改:
WATCH
命令监视键。MULTI
开始事务。- 执行事务命令,如果键未被修改,
EXEC
运行,否则事务中止。
- 优点:提高并发性能,简化逻辑。
- 缺点:可能出现数据不一致,重试逻辑复杂。
2. Redis配置文件(redis.conf)
2.1 网络配置
bind 127.0.0.1
:绑定IP地址,限制访问来源。protected-mode yes
:保护模式,防止未设置密码时外部访问。port 6379
:设置Redis服务端口。
2.2 通用配置
daemonize yes
:以守护进程运行。pidfile /var/run/redis_6379.pid
:指定PID文件。requirepass <password>
:设置客户端连接密码。loglevel notice
:设置日志级别(debug, verbose, notice, warning)。logfile ""
:指定日志文件路径。databases 16
:设置默认数据库数量。always-show-logo yes
:显示Redis启动Logo。
2.3 快照配置(RDB)
save 900 1
:在900秒内有至少1个键变化时触发持久化。stop-writes-on-bgsave-error yes
:持久化错误时停止写入。rdbcompression yes
:对RDB文件进行压缩。rdbchecksum yes
:对RDB文件进行校验。dbfilename dump.rdb
:指定RDB文件名。dir ./
:设置RDB文件存储目录。
2.4 客户端限制
maxclients 10000
:设置最大客户端连接数。
2.5 内存管理
maxmemory <bytes>
:设置最大内存限制。maxmemory-policy noeviction
:内存超出策略(默认不移除任何键)。
2.6 AOF配置
appendonly yes
:启用AOF持久化。appendfilename "appendonly.aof"
:指定AOF文件名。appendfsync everysec
:设置AOF同步策略(默认每秒一次)。
3. 持久化
3.1 RDB持久化
- 快照机制:fork子进程生成RDB文件。
- 触发机制:
- 满足
save
规则。 - 执行
flushall
。 - 退出Redis。
- 满足
- 恢复:Redis启动时自动加载
dump.rdb
文件。 - 优点:
- 高效:主进程继续处理请求。
- 恢复快:二进制文件直接加载。
- 适合备份:文件紧凑,便于存储。
- 缺点:可能丢失最近数据。
3.2 AOF持久化
- 日志机制:记录每个写操作,重启时回放。
- 优先级:高于RDB,启动时优先加载。
- 修复工具:
redis-check-aof --fix
修复损坏的AOF文件。 - 重写机制:
- 触发条件:
- 文件增长到一定比例(
auto-aof-rewrite-percentage
)。 - 达到最小大小(
auto-aof-rewrite-min-size
)。
- 文件增长到一定比例(
- 优点:减少文件碎片,优化存储。
- 触发条件:
- 优点:
- 更高可靠性:最多丢失1秒数据。
- 紧急恢复:可手动编辑AOF文件。
- 可读性:明确的操作日志,便于分析。
- 缺点:
- 文件较大:同等数据占用空间更大。
- 效率:比RDB慢,尤其在不同步时。
4. 订阅/发布
4.1 概述
Redis的发布/订阅功能用于实时消息传输,适用于实时数据更新的场景,如实时新闻、系统通知等。
4.2 命令说明
- 订阅:
SUBSCRIBE channel [channel ...]
:订阅一个或多个频道。PSUBSCRIBE pattern [pattern ...]
:订阅符合模式的频道。
- 取消订阅:
UNSUBSCRIBE [channel ...]
:取消订阅指定频道。PUNSUBSCRIBE [pattern ...]
:取消订阅符合模式的频道。
- 发布消息:
PUBLISH channel message
:向指定频道发送消息。
4.3 使用示例
# 订阅频道"cht"
127.0.0.1:6379> SUBSCRIBE cht
1) "subscribe"
2) "cht"
3) (integer) 1# 发布消息
127.0.0.1:6379> PUBLISH cht "hello world"
(integer) 1# 接收到的消息:
1) "message"
2) "cht"
3) "hello world"
4.4 应用场景
- 实时更新:如实时信息展示。
- 消息队列:用于分布式系统的消息传递。
- 动态通知:用户行为触发的实时通知。
Redis主从复制、哨兵模式及缓存问题解决策略
1. Redis主从复制
1.1 概述
Redis的主从复制功能用于实现数据的读写分离、数据备份和故障恢复。通过配置主从节点,可以将写操作集中在主节点,读操作分散到多个从节点,提升系统的整体性能和可用性。
1.2 主从复制的工作原理
-
全量复制:
- 从节点在初次连接主节点时,会触发一次全量复制。
- 主节点执行
BGSAVE
命令生成RDB文件,并将其发送给从节点。 - 从节点加载RDB文件,初始化数据。
- 主节点记录此时的复制偏移量和数据。
-
增量复制:
- 全量复制完成后,主节点继续处理新的写操作,并将这些操作记录在复制缓冲区中。
- 从节点定期请求主节点发送增量数据,主节点根据复制偏移量,发送从节点缺少的数据。
- 从节点接收并执行这些写操作,确保数据与主节点一致。
1.3 配置主从复制
-
设置从节点:
- 在从节点的配置文件
redis.conf
中,添加replicaof <master_ip> <master_port>
,指定主节点的IP和端口。 - 或者在Redis客户端中执行
SLAVEOF <master_ip> <master_port>
命令。
- 在从节点的配置文件
-
验证主从复制:
- 在主节点执行
INFO replication
命令,查看从节点的连接状态。 - 确认从节点已经正确连接,并且数据同步完成。
- 在主节点执行
1.4 主从复制的优缺点
- 优点:
- 数据备份与冗余,避免单点故障。
- 读写分离,提升读操作的吞吐量。
- 负载均衡,分散读操作到多个从节点。
- 缺点:
- 主节点成为性能瓶颈,所有写操作必须经过主节点。
- 数据一致性存在延迟,增量复制过程中可能出现短暂的不一致。
- 手动干预切换,主节点故障时需要人工介入,切换从节点为主节点。
2. 哨兵模式
2.1 概述
哨兵模式是在主从复制的基础上,引入了一组哨兵进程,用于监控主节点和从节点的状态。当主节点出现故障时,哨兵会自动将一个从节点提升为新的主节点,实现故障的自动转移。
2.2 哨兵的工作原理
- 监控:
- 哨兵进程通过定期向主节点和从节点发送
PING
命令,监控它们的运行状态。
- 哨兵进程通过定期向主节点和从节点发送
- 主观下线:
- 如果节点在指定时间内未回复,哨兵会将其标记为“主观下线”。
- 客观下线:
- 当一定数量的哨兵进程(由
quorum
参数配置)都标记主节点为主观下线时,主节点被判定为“客观下线”。
- 当一定数量的哨兵进程(由
- 故障转移:
- 哨兵集群选举出一个领头哨兵。
- 领头哨兵选择一个健康的从节点作为新的主节点。
- 更新所有从节点的复制目标,确保它们指向新的主节点。
- 通知客户端主节点的变更,完成故障转移。
2.3 配置哨兵
以下是一个示例的哨兵配置文件sentinel.conf
:
port 26379 # 哨兵监听的端口
daemonize yes # 以守护进程运行
pidfile "/var/run/redis-sentinel.pid" # PID文件路径
logfile "26379.log" # 日志文件路径
dir "/var/tmp/redis-sentinel/data" # 工作目录# 监控的主节点,指定主节点名称、IP地址、端口和哨兵判定主节点下线的票数
sentinel monitor mymaster 127.0.0.1 6379 2# 主节点的密码,如果主节点设置了密码需要配置
sentinel auth-pass mymaster 123456# 哨兵判定主节点下线的超时时间,单位是毫秒
sentinel down-after-milliseconds mymaster 30000# 故障转移时,允许并行同步的从节点个数,默认是1
sentinel parallel-syncs mymaster 1# 故障转移超时时间,单位是毫秒
sentinel failover-timeout mymaster 180000# 是否允许通过脚本配置重新配置客户端
sentinel deny-scripts-reconfig yes
2.4 简单部署
redis 使用 Docker 部署 Redis 集群(包括哨兵机制)-CSDN博客
2.5 哨兵的优缺点
- 优点:
- 自动故障转移,减少人工干预。
- 监控与通知,及时发现和处理问题。
- 提高系统的高可用性和稳定性。
- 缺点:
- 配置较为复杂,增加了维护成本。
- 增加资源开销,需要额外的服务器运行哨兵进程。
- 单点故障隐患,哨兵本身也可能成为潜在的单点故障。
3. 缓存穿透、击穿与雪崩问题及解决策略
3.1 缓存穿透
- 问题描述:
- 用户频繁查询不存在的数据,导致请求直接打到数据库,增加数据库负担,影响性能。
- 解决方法:
- 缓存空对象:
- 在数据库未找到数据时,向缓存中设置一个空对象,设置较短的过期时间,避免占用过多内存。
- 布隆过滤器:
- 使用布隆过滤器过滤不存在的数据,减少对数据库的无效查询。
- 参数校验:
- 对用户输入的参数进行严格的校验,防止恶意请求或爬虫攻击。
- 缓存空对象:
3.2 缓存击穿
- 问题描述:
- 热点数据过期后,大量并发请求直接访问数据库,导致数据库压力骤增。
- 解决方法:
- 设置热点数据永不过期:
- 对于某些热点数据,可以配置为永不过期,确保这些数据始终在缓存中。
- 互斥锁:
- 使用分布式锁(如Redis的
SETNX
命令),确保只有一个请求能访问数据库,其余请求等待,防止数据库被压垮。
- 使用分布式锁(如Redis的
- 后台刷新:
- 开启后台线程,定期更新热点数据的缓存,避免因缓存失效导致的并发请求。
- 分级缓存:
- 使用多级缓存策略,如一级缓存和二级缓存,确保数据在多级缓存中有效,减少对数据库的直接访问。
- 设置热点数据永不过期:
3.3 缓存雪崩
- 问题描述:
- 大量缓存同时过期,导致短时间内有大量请求直接打到数据库,可能引起数据库宕机。
- 解决方法:
- 随机过期时间:
- 在设置缓存过期时间时,加上一个随机的时间值,避免大量缓存集中过期。
- 互斥锁或队列:
- 使用互斥锁或队列控制对数据库的并发访问,防止大量请求同时访问数据库。
- 二级缓存:
- 建立二级缓存层,当主缓存失效时,从二级缓存中获取数据,减少对数据库的压力。
- 数据预热:
- 在缓存过期前,主动刷新和更新缓存,确保热点数据始终存在于缓存中。
- 监控与预警:
- 实时监控缓存的命中率和请求量,及时发现潜在的问题,提前采取措施。
- 随机过期时间:
相关文章:
Redis 详解:安装、数据类型、事务、配置、持久化、订阅/发布、主从复制、哨兵机制、缓存
目录 Redis 安装与数据类型 安装指南 Windows Linux 性能测试 基本知识 数据类型 String List(双向列表) Set(集合) Hash(哈希) Zset(有序集合) 高级功能 地理位置&am…...
第十篇:系统分析师第三遍——7、8章
目录 一、目标二、计划三、完成情况四、意外之喜(最少2点)1.计划内的明确认知和思想的提升标志2.计划外的具体事情提升内容和标志 五、总结 一、目标 通过参加考试,训练学习能力,而非单纯以拿证为目的。 1.在复习过程中,训练快速阅读能力、掌…...
从 Vue 到 React:React.memo + useCallback 组合技
目录 一、Vue 与 React 的组件更新机制对比二、React.memo 是什么?三、常见坑:为什么我用了 React.memo 还是会重新渲染?四、解决方案:useMemo / useCallback 缓存引用五、Vue 3 中有类似的性能控制需求吗?六、组合优化…...
1656打印路径-Floyd/图论-链表/数据结构
蓝桥账户中心 1.税收: “城市的税收”:所以是中介点的税收,经过该点后加上 2.路径: 用数组存储前驱节点从而串成链表 pre[ i ][ j ]代表的是从 i 到 j 的最短路径上 j 的前驱节点是什么 那么便可以pre[ i ][ j ]k 把k加入pa…...
Linux网络编程 从集线器到交换机的网络通信全流程——基于Packet Tracer的深度实验
这里我们先下载一个软件:Packet Tracer 用来搭建网络拓扑图的,是模拟和查看数据在网络中传输的详细过程的 在软件这里可以添加设备 知识点1【集线器】(Hub) 1、先配置一下主机的IP 这里我们设置IP一定要在同一个网段ÿ…...
深入学习Axios:现代前端HTTP请求利器
文章目录 深入学习Axios:现代前端HTTP请求利器一、Axios简介与安装什么是Axios?安装Axios 二、Axios基础使用发起GET请求发起POST请求并发请求 三、Axios高级特性创建Axios实例配置默认值拦截器取消请求 四、Axios与TypeScript五、最佳实践1. 封装Axios2…...
FANUC机器人GI与GO位置数据传输设置
FANUC机器人GI与GO位置数据传输设置(整数小数分开发) 一、概述 在 Fanuc 机器人应用中,如果 IO 点位足够,可以利用机器人 IO 传输位置数据及偏移位置数据等。 二、操作步骤 1、确认通讯软件安装 首先确认机器人控制柜已经安装…...
微服务 RabbitMQ 组件的介绍、安装与使用详解
微服务 RabbitMQ 组件的介绍、安装与使用 在现代微服务架构中,服务之间的通信通常采用消息队列的方式,来解耦服务之间的依赖、提高系统的可靠性和扩展性。RabbitMQ 作为一种高效、可靠的消息队列系统,已经广泛应用于微服务架构中。本文将介绍…...
Vue3速通笔记
Vue3入门到实战 尚硅谷Vue3入门到实战,最新版vue3TypeScript前端开发教程 1. Vue3简介 2020年9月18日,Vue.js发布版3.0版本,代号:One Piece(n经历了:4800次提交、40个RFC、600次PR、300贡献者官方发版地…...
Spring Boot 项目:如何在 JAR 运行时读取外部配置文件
在 Spring Boot 项目中,我们常常需要在生产环境中灵活地配置应用,尤其是当我们将项目打包为 JAR 文件时,如何在运行时通过外部配置文件(如 application.yml 或 application.properties)替换 JAR 内部的配置就变得尤为重…...
Certimate本地化自动化 SSL/TLS 证书管理解决方案
一、背景与挑战 多域名管理复杂 运维团队往往需要为多个子域、泛域名乃至不同项目的域名分别申请证书,手动操作容易出错且耗时。续期易忘风险 主流免费证书(如 Let’s Encrypt)有效期仅 90 天,需要定期续期,人工监控门…...
vue+flask+lstm高校舆情分析系统 | 可获取最新数据!
文章结尾部分有CSDN官方提供的学长 联系方式名片 文章结尾部分有CSDN官方提供的学长 联系方式名片 关注B站,有好处! 编号:F020 gaoxiao 架构:vueflaskLSTMMySQL 功能: 微博信息爬取、情感分析、基于负面消极内容舆情分…...
Cisco-Torch:思科设备扫描器!全参数详细教程!Kali Linux教程!
简介 cisco-torch 与同类工具的主要区别在于其广泛使用 fork 技术,可以在后台启动多个扫描进程,从而最大限度地提高扫描效率。此外,它还可以根据需要同时使用多种应用层指纹识别方法。我们希望能够快速发现运行 Telnet、SSH、Web、NTP、TFTP…...
Go协程的调用与原理
Goroutine Go不需要像C或者Java那样手动管理线程,Go语言的goroutine机制自动帮你管理线程。 使用goroutine、 Go语言中使用goroutine非常简单,只需要在调用函数的时候在前面加上go关键字,就可以为一个函数创建一个goroutine。 一个gorout…...
论文精读:大规模MIMO波束选择问题的量子计算解决方案
论文精读:大规模MIMO波束选择问题的量子计算解决方案 概要: 随着大规模多输入多输出系统(MIMO)在5G及未来通信技术中的应用,波束选择问题(MBS)成为提升系统性能的关键。传统的波束选择方法面临计…...
将 MySQL 8 主从复制延迟优化到极致
目录 一、网络资源不足引起的复制延迟 1. 执行监控确认延迟原因 2. 估算所需带宽 (1)基本公式 (2)实际测量方法 二、大事务或大查询引起的复制延迟 1. 主库大事务 2. 从库大查询 3. 估算所需 I/O 能力 (1&am…...
路由与OSPF学习
【路由是跨网段通讯的必要条件】 路由指的是在网络中,数据包从源主机传输到目的主机的路径选择过程。 路由通常涉及以下几个关键元素: 1.路由器:是一种网络设备,负责将数据包从一个网络传输到另一个网络。路由器根据路由表来决定…...
Spring Security:企业级安全架构的设计哲学与工程实践
一、核心架构与设计理念 Spring Security作为Spring生态中的安全基石,其架构设计遵循**“分层过滤"与"组件化扩展”**两大原则。整个安全框架本质上是一个由多个过滤器构成的链式处理模型(Filter Chain),每个过滤器负责…...
NLP高频面试题(五十二)——BERT 变体详解
在现代自然语言处理领域,BERT 系列模型不断演进,衍生出多种变体,它们通过改进预训练任务、模型结构和训练策略,在不同应用场景下取得了更优表现。本文首先概览主要 BERT 变体(如 ALBERT、RoBERTa、ELECTRA、SpanBERT、Transformer-XL 等),随后针对以下几个关键问题逐一展…...
C++Primer 编程练习 第二章
最近想重新看一下CPrimer,顺便敲一下他的编程练习题,虽然很简单,但是就当是锻炼一下vim的熟练度和手感 由于按照章节顺序来说是初学者,不会对输入内容做过多的判断,只对问题作出基本实现 第二章 1 #include <ios…...
Vue.js 新手小白指南:从起源到实战
🌟 Vue 的来源 Vue.js 由**尤雨溪(Evan You)**在2014年创建,最初是作为个人项目开发,灵感来源于他在 Google 使用 AngularJS 的经验。Vue 的设计目标是提供一个更轻量级、更易上手的前端框架。 如今,Vue …...
策略模式:动态切换算法的设计智慧
策略模式:动态切换算法的设计智慧 一、模式核心:定义一系列算法并可相互替换 在软件开发中,常常会遇到需要根据不同情况选择不同算法的场景。例如,在电商系统中,根据不同的促销活动(如满减、折扣、赠品&a…...
Vm免安装直接使用虚拟机win7系统
教程 一、下载并解压资料里面的vmx压缩包 二、使用Vm软件打开刚刚解压的vmx文件即可使用虚拟机的win7系统 资料下载 点击下载...
LSTM-GAN生成数据技术
1. 项目概述 本项目利用生成对抗网络(GAN)技术来填补时间序列数据中的缺失值。项目实现了两种不同的GAN模型:基于LSTM的GAN(LSTM-GAN)和基于多层感知机的GAN(MLP-GAN),并对两种模型…...
26、C# 中是否可以继承String类?为什么?
在 C# 中,不能直接继承 String 类(System.String)。这是由于以下几个原因: 1、String 类是 sealed 的 String 类在 .NET 中被标记为 sealed,这意味着它是一个密封类,不能被继承。 sealed 关键字的作用是防…...
gem5教程第五章 了解gem5默认配置脚本
在本章中,我们将探讨如何使用gem5附带的默认配置脚本。 gem5附带了许多配置脚本,使您能够非常快速地使用gem5。 然而,一个常见的陷阱是在不完全理解所模拟内容的情况下使用这些脚本。在使用gem5进行计算机架构研究时,充分了解您正在模拟的系统非常重要。本章将引导您了解默…...
什么是鸿蒙南向开发?什么是北向开发?
文章目录 鸿蒙南向开发 vs 北向开发:底层与生态的双向赋能一、鸿蒙南向开发:连接硬件的底层基石二、鸿蒙北向开发:构建全场景应用生态三、南向与北向:互补与协同四、如何选择开发方向?结语 鸿蒙南向开发 vs 北向开发:…...
蓝桥杯 19. 最大比例
最大比例 原题目链接 题目描述 X 星球的某个大奖赛设了 M 级奖励。每个级别的奖金是一个正整数。 并且,相邻两个级别间的比例是一个固定值,也就是说:所有级别的奖金构成一个等比数列。 例如: 奖金数列为 16, 24, 36, 54&…...
制造业数字化转型标杆解析:从冀凯机电到君乐宝的启示
1. 执行摘要 数字化转型已成为现代制造业提升竞争力、实现高质量发展的核心驱动力。本文旨在通过深入剖析冀凯装备制造股份有限公司(冀凯机电)和君乐宝乳业集团(君乐宝)两家不同行业背景企业的数字化转型实践,提炼可供…...
【OSCP-vulnhub】Raven-2
目录 端口扫描 本地/etc/hosts文件解析 目录扫描: 第一个flag 利用msf下载exp flag2 flag3 Mysql登录 查看mysql的运行权限 MySql提权:UDF 查看数据库写入条件 查看插件目录 查看是否可以远程登录 gcc编译.o文件 创建so文件 创建临时监听…...
配置MambaIRv2: Attentive State Space Restoration的环境
github上代码的地址: csguoh/MambaIR: [ECCV2024, CVPR2025] MambaIR and MambaIRv2! 一开始直接输入命令 conda env create -f environment.yaml 安装了半天爆出来好几个错误,其中一个是没有nvcc 输入以下命令: module avail 发现没有…...
4.23晚间工作总结
主要工作:将ClassicDetail界面拆分成utils,apis,stores,css,vue多个文件,方便后续重用 具体代码截图:...
Maven 项目中引入本地 JAR 包
在日常开发过程中,我们有时会遇到一些未上传到 Maven 中央仓库或公司私有仓库的 JAR 包,比如第三方提供的 SDK 或自己编译的库。这时候,我们就需要将这些 JAR 包手动引入到 Maven 项目中。本文将介绍两种常见方式:将 JAR 安装到本…...
SpringBoot整合SSE,基于okhttp
一、引入依赖 <dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.10.0</version> </dependency> <dependency><groupId>com.squareup.okhttp3</groupId><…...
从云端到边缘:云原生后端架构在边缘计算中的演进与实践
📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:为何云原生后端正在走向边缘? 随着物联网(IoT)、5G 和实时应用的快速发展,越来越多的数据在终端产生并需要即时处理。传统云计算虽强大,但将所有数据上送云端再处理,带来高延迟与带宽压力。…...
pytest心得体会
一、如何单独运行某条用例 在参数化测试中总有些用例失败,由于前后置数据的关系需要单独运行那条用例如何运行呢 方法一:直接查看控制台运行用例 确定是[2-case_data8] pytest.main(["-sv","testcase/违规告警/test_违规告警_非合同车…...
《Cesium 中两点绘制线的实现:实线、虚线、动态线、流动线详解》
摘要 在 Cesium 三维地球可视化开发中,两点之间绘制线是常见的需求。本文详细介绍如何在 Cesium 中实现两点间绘制实线、虚线、动态线和流动线,并提供完整的代码示例,方便开发者快速上手,满足不同场景下的可视化需求。 一、环境与依赖 本文代码基于 Cesium 库进行开发,…...
【EasyPan】MySQL FIELD() 函数实现自定义排序
【EasyPan】项目常见问题解答(自用&持续更新中…)汇总版 MySQL FIELD() 函数解析 一、FIELD() 函数技术解析 /* 基础语法 */ FIELD(column_name, value1, value2, ..., valueN)核心特性 特性说明返回值机制返回字段值在参数列表中的索引位置&…...
搭建TypeScript单元测试环境
我们在学习TypeScript的时候如果能够搭建一个单元测试的环境,那写些demo会很简单,下面我们使用jest来搭建一个单元测试环境 Jest 是一个由 Facebook 开发并开源的 JavaScript 测试框架,被广泛应用于前端和 Node.js 项目的单元测试。以下是关…...
Vue3父子组件数据同步方法
在 Vue 3 中,当子组件需要修改父组件传递的数据副本并同步更新时,可以通过以下步骤实现: 方法 1:使用 v-model 和计算属性(实时同步) 父组件: vue <template><ChildComponent v-mo…...
免费且开源的企业级监控解决方案:Zabbix
一、Zabbix 简介 Zabbix 是一款功能强大的企业级开源监控解决方案。它可以监控各种 IT 基础设施组件,包括网络设备、服务器、虚拟机、云服务、应用程序和数据库等。Zabbix 提供实时的监控、告警、报表和可视化功能,帮助用户及时发现和解决 IT 系统中的问…...
高并发系统的通用设计方法是什么?
背景 高并发系统的通用设计方法是解决系统在面对大量用户访问时的性能瓶颈问题。当系统遇到性能瓶颈时,通常是因为某个单点资源(如数据库、后端云服务器、网络带宽等)达到了极限。 为了提升整个系统的容量,需要找到这个瓶颈资源…...
ubuntu系统下部署使用git教程
在ubuntu系统下部署并使用git教程 1.下载并安装 sudo apt update sudo apt install git2.检验安装是否成功 git --version若输出git版本号即为成功。 3.配置参数 git config --global user.name "你的名字" git config --global user.email "你的邮箱&quo…...
redis client.ttl(key)
对应 Redis 的 TTL 命令: bash 复制 下载 TTL key 使用示例 1. 基本用法 java 复制 下载 try (Jedis jedis jedisPool.getResource()) {long ttl jedis.ttl("user:1001:session");if (ttl > 0) {System.out.println("键将在 " t…...
基于ACL方式手动建立站点间 IPSec 隧道
换句话说 不使用 IKE 自动协商,而是静态配置密钥和 SPI(安全参数索引)来配置隧道规则 环境基础 还是使用eNSP软件进行模拟,等后面再更新实际通信中的环境 没有框架,就没有基本思路 还是使用前面文章GRE VPN的拓扑&…...
电池大脑的基准测试及AI拓展
从为我们的智能手机供电到驱动电动汽车,我们的日常生活都离不开锂离子电池(LIB)。但是,理解其复杂的内部运作并预测其性能需要精密的工具。由此引入了多孔电极理论(PET)模型,我们可以将其视为模…...
数据通信学习笔记之OSPF的基础术语
Router ID RouterID 用于在自治系统中唯一标识一省运行 OSPF 的路由器,它是一个 32 位的无符号整数 配置完成后,如果需要修改 Router ID 的话,需要重启进程才能上生效 <Huawei>reset ospf 1 process // 重启 ospf 进程 1 Route…...
Android Cordova 开发 - Cordova 快速入门(Cordova 环境配置、Cordova 第一个应用程序)
一、Cordova 1、Cordova 概述 Cordova 是使用 HTML,CSS 和 JavaScript 构建混合移动应用程序的平台 2、Cordova 特征 (1)命令行界面(Cordova CLI) 这是可用于启动项目,构建不同平台的进程,…...
AndroidAutomotive模块介绍(四)VehicleHal介绍
前言 前面的文章中,描述了 Android Automotive 的框架中应用、Framework 层服务等知识,本篇文章将会继续按照 Android Automotive 框架介绍 Vehicle Hal 层服务的内容。 上一篇:AndroidAutomotive模块介绍(三)CarSer…...
Pingora vs. Nginx vs. 其他主流代理服务器性能对比
Pingora vs. Nginx vs. 其他主流代理服务器性能对比 核心对比概览 特性Pingora (Cloudflare)NginxEnvoyHAProxyCaddyTraefik开发公司CloudflareNginx, Inc/F5Lyft/CNCFHAProxy TechApache 2.0社区Containous核心语言RustCCCGoGo并发模型异步/多线程事件驱动事件驱动事件驱动协…...