当前位置: 首页 > news >正文

Redis-高级实战案例

文章目录

  • Redis集群崩溃时如何保证秒杀系统高可用
      • 1. 冗余与备份
      • 2. 故障检测与自动切换
      • 3. 降级策略
      • 4. 数据一致性
      • 5. 客户端缓存
      • 6. 异常处理与通知
      • 7. 测试与演练
      • 8. 服务降级与回滚
  • Redis主从切换导致库存同步异常以及超卖问题
      • 主从切换导致的库存同步异常原因:
      • 解决方案:
  • 秒杀链路中Redis与MQ如何保证事务一致性
      • 1. 使用Redis事务
      • 2. 基于MQ的最终一致性
      • 3. 两阶段提交(2PC)
      • 4. 乐观锁
      • 5. 事务补偿机制
      • 6. 事务日志
      • 7. 监控与报警
      • 8. 测试与验证
  • 如何用Redis高效实现12306的复杂售票业务
      • 1. 库存管理
      • 2. 并发控制
      • 3. 事务处理
      • 4. 数据一致性
      • 5. 性能优化
      • 6. 集群与分片
      • 7. 故障恢复
  • 新浪微博突发事件如何做好Redis缓存的高可用
  • 高并发场景缓存穿透&失效&雪崩如何解决
      • 缓存穿透
      • 缓存失效(击穿)
      • 缓存雪崩
      • 综合策略
  • Redis集群架构如何抗住12306与双11的洪峰流量
      • 1. 分布式架构
      • 2. 主从复制与哨兵
      • 3. 负载均衡
      • 4. 优化读写操作
      • 5. 弹性伸缩
      • 6. 数据持久化与备份
      • 7. 监控与预警
      • 8. 测试与演练
      • 9. 代码优化
      • 10. 安全与合规
  • Redis缓存与数据库双写不一致如何解决
      • 1. 先写数据库,再更新缓存(Write Through)
      • 2. 先更新缓存,再写数据库(Write Behind)
      • 3. 基于事件驱动的更新策略
      • 4. 乐观锁
      • 5. 事务与分布式事务
      • 6. 最终一致性
      • 实施策略时的注意事项:
  • 双十一亿级用户日活统计如何用Redis快速计算
      • 1. 使用BitMap
        • 操作步骤:
        • 代码示例:
      • 2. 使用Set或Sorted Set
        • 操作步骤:
        • 代码示例:
      • 3. 使用HyperLogLog
        • 操作步骤:
        • 代码示例:
      • 注意事项:
  • 双十一电商推荐系统如何用Redis实现
  • 类似微信的社交App朋友圈关注模型如何用Redis设计实现
      • 1. 用户关系
      • 2. 动态流(Feeds)
      • 3. 动态详情
      • 4. 点赞和评论
      • 实现细节
        • 发布动态
        • 查看动态
        • 点赞
        • 评论
      • 性能优化
  • 美团单车如何基于Redis快速找到附近的车
      • 1. 地理位置数据存储
      • 2. 查询附近的单车
      • 3. 结果排序与过滤
      • 4. 更新位置信息
      • 5. 高并发优化
      • 6. 故障恢复
      • 7. 监控与报警
  • Redis分布式锁主从架构锁失效问题如何解决
      • 1. 使用RedLock算法
      • 2. 设置合理的锁超时时间
      • 3. 自动续锁机制
      • 4. 主从架构优化
      • 5. 引入其他分布式锁解决方案
      • 6. 监控和报警
      • 7. 故障恢复计划
      • 8. 测试与验证
  • 超大并发的分布式锁架构该如何设计
      • 1. 选择合适的分布式锁实现
      • 2. 分布式锁的性能优化
      • 3. 可伸缩性
      • 4. 异常处理
      • 5. 监控与报警
      • 6. 测试与验证
      • 7. 持续优化
  • Redis底层ZSet跳表是如何设计与实现的
      • 跳表的基本概念
      • 节点结构
      • 插入和查找操作
      • 层级高度和节点数量
      • Redis中的具体实现
      • 总结
  • Redis底层ZSet实现压缩列表和跳表如何选择
      • ZSet的内部表示
      • 具体规则
      • 内部转换
      • 性能和内存考量
      • 总结
  • Redis6.0多线程模型比单线程优化在哪里了
      • 1. AOF重写和RDB快照
      • 2. 命令处理
      • 3. I/O操作
      • 4. 并发控制
      • 5. 性能和可伸缩性

Redis集群崩溃时如何保证秒杀系统高可用

当Redis集群崩溃时,保证秒杀系统高可用性主要依赖于事前的架构设计、故障检测与恢复机制、以及适当的降级策略。以下是一些关键步骤和建议:

1. 冗余与备份

  • 多集群部署:在不同的数据中心或可用区内部署多个Redis集群,通过负载均衡器将流量分发到健康集群。
  • 热备和冷备:每个集群都应有热备(至少一个从节点)和冷备(定期备份数据)。

2. 故障检测与自动切换

  • 使用Redis Sentinel:Sentinel可以监控主从节点状态,自动进行故障转移,将从节点提升为主节点。
  • 健康检查:定期对集群进行健康检查,一旦发现异常立即启动切换机制。

3. 降级策略

  • 数据库降级:在Redis集群不可用时,可以降级到关系型数据库(如MySQL)或NoSQL数据库(如MongoDB)进行库存扣减和订单确认。
  • 限流与排队:启用限流机制,避免降级数据库过载;使用消息队列(如RabbitMQ、Kafka)来暂存请求,待Redis恢复后再处理。

4. 数据一致性

  • 事务处理:在降级到其他数据源时,确保所有操作在一个事务中完成,避免数据不一致。
  • 最终一致性:对于非关键操作,可以接受最终一致性,通过定时任务或事件驱动机制在Redis恢复后更新数据。

5. 客户端缓存

  • 客户端缓存:在客户端实现简单的缓存逻辑,比如使用浏览器缓存或应用程序本地缓存,减少对Redis的依赖。

6. 异常处理与通知

  • 错误处理:设计良好的错误处理机制,确保在Redis集群崩溃时,系统能够优雅地处理错误,避免服务完全不可用。
  • 通知与监控:一旦检测到Redis集群问题,立即通知运维团队,同时通过监控系统观察系统状态和性能指标。

7. 测试与演练

  • 故障注入测试:定期进行故障注入测试,模拟Redis集群崩溃场景,检验系统的健壮性和恢复能力。
  • 恢复演练:制定详细的恢复流程,并定期进行演练,确保运维团队熟悉应急响应步骤。

8. 服务降级与回滚

  • 服务降级:在高负载下,关闭非核心服务或功能,优先保证核心业务流程。
  • 快速回滚:一旦Redis集群恢复,迅速回滚到正常服务模式,同时清理降级期间产生的数据差异。

通过这些策略,可以确保即使在Redis集群出现故障的情况下,秒杀系统仍然能够提供基本服务,保持系统的高可用性和用户体验。然而,实现这些策略需要在设计阶段就充分考虑,并通过持续的监控、测试和优化来维持系统的健壮性。

Redis主从切换导致库存同步异常以及超卖问题

Redis的主从复制机制在高可用架构中非常关键,它不仅可以分担读取压力,还能在主节点故障时快速切换到从节点,从而保持服务的连续性。然而,在主从切换过程中,确实存在一些风险,尤其是对于需要强一致性的场景,如库存管理系统中的秒杀活动,很容易出现库存同步异常和超卖问题。

主从切换导致的库存同步异常原因:

  1. 同步延迟:Redis主从复制是异步的,这意味着主节点上的写操作不会立即反映到从节点上。在主从切换时,如果切换发生在写操作尚未完全同步完成的时刻,那么从节点上的数据将是旧的,这可能导致数据不一致。

  2. 从节点可写:默认情况下,从节点也处理写请求。如果在主从切换期间,客户端向从节点(此时的新的主节点)写入数据,而这个数据还没有在之前的主节点上被同步,那么数据就会出现不一致。

  3. 缺乏业务校验:从节点在处理写请求时,如果没有考虑到主从数据可能存在时间窗口的不一致,直接使用旧数据,可能会导致逻辑错误,如库存超卖。

解决方案:

  1. 只读标记:确保从节点在主从切换前被打上只读标记,避免直接写入,直到数据完全同步。

  2. 延迟切换:在主节点故障后,不要立即进行切换,而是等待一段时间,确保从节点上的数据已经尽可能同步完毕再切换。

  3. 使用半同步复制:半同步复制机制可以确保主节点在接收到从节点的ACK确认之前不会处理下一个写请求,这样可以减少数据不一致的可能性。

  4. 使用更高级别的复制组:如Redis Cluster或Redis Sentinel,它们提供了更复杂的故障检测和自动切换机制,能够更好地处理主从切换过程中的数据同步问题。

  5. 事务处理:在业务层面,可以使用事务来确保库存操作的原子性,即使在切换期间,也能尽量避免超卖。

  6. 库存预留:在秒杀等高并发场景下,可以使用库存预留机制,即先锁定库存,再进行后续操作,确保库存不会超卖。

  7. 监控与报警:建立完善的监控系统,一旦发现主从数据不一致或主节点故障,立即报警并采取措施。

  8. 数据校验与修复:在主从切换后,进行数据校验,如果发现不一致,立即进行数据修复,避免影响业务。

通过上述方法,可以显著降低主从切换过程中库存同步异常和超卖的风险,提高系统的稳定性和可靠性。

秒杀链路中Redis与MQ如何保证事务一致性

在秒杀场景中,系统的高并发特性和瞬时大流量对事务一致性的要求非常高。Redis和消息队列(MQ)是秒杀系统中常用的技术组件,它们各自有着独特的性能优势,但也带来了事务一致性方面的挑战。以下是Redis与MQ如何在秒杀链路中保证事务一致性的几种方法:

1. 使用Redis事务

Redis事务可以将一组操作视为一个整体,确保这些操作要么全部成功,要么全部失败。在秒杀场景中,可以使用Redis事务来锁定库存,然后提交一个事务,其中包含库存减一和生成订单的命令。然而,由于Redis事务不具备ACID特性中的隔离性,不能防止其他客户端在这段事务期间对相同资源的并发修改,因此在高并发环境下,还需要结合其他技术。

2. 基于MQ的最终一致性

在秒杀链路中,可以通过MQ来实现Redis与数据库之间的最终一致性。流程如下:

  1. 用户发起秒杀请求。
  2. 系统首先尝试在Redis中减少库存。
  3. 如果Redis中的库存足够,系统将库存减少的指令应用到Redis,并将一条消息推送到MQ,指示数据库也要减少库存。
  4. MQ的消费者监听到这条消息后,会在数据库中执行库存减少操作。
  5. 如果数据库操作成功,事务被视为成功;如果失败,可以有重试机制或者回滚机制。

3. 两阶段提交(2PC)

两阶段提交是一种经典的分布式事务协议,适用于需要跨服务保证一致性的场景。在秒杀链路中,可以将Redis和MQ视作两个参与者:

  1. 准备阶段:Redis减库存,MQ预备发送消息,两者都向协调者报告是否准备好。
  2. 提交阶段:如果所有参与者都准备好,协调者会发出提交指令;否则,发出回滚指令。

4. 乐观锁

在秒杀场景中,可以使用乐观锁来防止并发冲突。当Redis减库存时,可以使用版本号或时间戳作为乐观锁的依据,确保数据在修改过程中没有被其他事务更改。

5. 事务补偿机制

在数据库端,如果由于某种原因导致数据库的库存减少操作失败,可以设计一个补偿机制来恢复Redis和数据库的一致性。这通常涉及到事务补偿逻辑,即在数据库中重新执行库存减少操作,或者在Redis中增加库存,以抵消未完成的事务。

6. 事务日志

在MQ中,可以记录事务日志,包括事务的状态、操作的详细信息等,以便在事务失败时进行诊断和恢复。事务日志也可以用于审计和追踪事务的生命周期。

7. 监控与报警

设置监控和报警机制,一旦检测到事务一致性问题,立即通知运维人员,以便及时处理。

8. 测试与验证

在上线前,进行充分的测试,包括压力测试和故障注入测试,验证系统在各种异常情况下的表现,确保事务一致性得到保障。

通过上述方法的组合使用,可以在秒杀链路中有效地保证事务一致性,从而提高系统的稳定性和用户体验。然而,实现这些策略需要仔细的设计和测试,以确保在高并发环境下系统的健壮性和性能。

如何用Redis高效实现12306的复杂售票业务

使用Redis高效地实现类似12306这样的复杂售票业务,主要涉及几个关键点:库存管理、并发控制、事务处理以及数据一致性。下面是一些具体的策略和技术细节:

1. 库存管理

  • Bitmaps or Sorted Sets: 可以使用Redis的Bitmaps数据结构来存储每趟列车的座位状态,每一位代表一个座位,0表示未售出,1表示已售出。这样可以非常节省内存空间,同时利用位运算进行高效的读写操作。
  • Sorted Sets for Availability: 另一种方式是使用Sorted Sets,每个元素代表一个座位,分数可以是座位编号,这样可以快速查找并删除可用座位。

2. 并发控制

  • Redlock算法: 为了处理并发购票,可以使用分布式锁,如Redlock算法,它提供了更高的可用性和容错性,避免了单点故障。
  • Lua脚本: 利用Redis的Lua脚本功能,在服务器端执行原子操作,减少网络往返次数,提高效率。
  • 乐观锁: 使用版本号或时间戳作为乐观锁,确保在多线程环境下的数据一致性。

3. 事务处理

  • Watch-Lua-Exec模式: 在Redis中使用WATCH命令监视库存键,然后执行Lua脚本来进行事务操作。如果监视的键在执行前被修改,则整个脚本会被取消,从而保证了数据的一致性。

4. 数据一致性

  • 消息队列: 结合消息队列如RabbitMQ或Kafka,用于异步更新数据库或其他持久化存储,确保数据最终一致性。
  • 双写机制: 在Redis中更新库存的同时,通过消息队列发送更新事件到后端数据库,确保两者的最终一致性。

5. 性能优化

  • 预加载库存: 在高峰期前,可以预先将库存数据加载到Redis中,减少对后端数据库的依赖。
  • 缓存更新策略: 使用LRU(Least Recently Used)算法自动淘汰不常用的缓存数据,保持缓存的有效性。
  • 限流与熔断: 实施限流策略,如令牌桶或漏桶算法,以及熔断机制,防止突发流量导致系统崩溃。

6. 集群与分片

  • Redis Cluster: 使用Redis Cluster进行数据分片和故障转移,提高系统的可扩展性和可用性。
  • 哨兵与主从复制: 实施哨兵监控和主从复制,确保在单个节点故障时,系统仍然可以继续运行。

7. 故障恢复

  • 定期快照与备份: 定期对Redis数据进行快照和备份,以便在发生故障时可以快速恢复。
  • 热备方案: 设计热备方案,确保在主节点不可用时,可以从备用节点无缝切换。

通过上述策略,可以构建一个高效且稳定的售票系统,即使在高并发情况下也能保持良好的响应时间和数据一致性。然而,实际部署时需要根据具体业务场景和资源条件调整和优化这些策略。

新浪微博突发事件如何做好Redis缓存的高可用

新浪微博作为一个高流量的社交平台,在面对突发事件时,其系统需要能够迅速响应大量的用户请求,同时保持服务的稳定性和数据的一致性。在这种情况下,Redis作为高性能的缓存解决方案,起着至关重要的作用。为了确保在突发事件下Redis缓存的高可用性,以下是一些关键的策略:

  1. 主从复制

    • 使用Redis的主从复制架构,确保数据的冗余和读写分离。从节点可以承担读取请求,减轻主节点的负担,而主节点负责写入操作。
    • 实现自动故障转移,例如使用Redis Sentinel,它可以监控主节点的健康状况并在主节点失败时自动将从节点升级为主节点。
  2. 集群架构

    • 部署Redis Cluster,它提供了一种内置的分片机制,可以将数据分布在多个节点上,提高系统的吞吐量和可用性。
    • Redis Cluster还支持故障转移和数据迁移,增强了系统的弹性和数据的持久性。
  3. 缓存穿透、击穿与雪崩的防护

    • 缓存穿透:对于不存在的数据查询,使用布隆过滤器预先判断,避免无效查询直接到达数据库。
    • 缓存击穿:对热点数据设置过期时间时,使用延时策略,避免大量数据在同一时间过期,引发数据库压力。
    • 缓存雪崩:分散缓存数据的过期时间,避免大量数据同时过期导致的数据库压力,可以使用随机过期时间策略。
  4. 限流与熔断

    • 对于API接口,使用限流策略来控制单位时间内处理的请求数量,防止系统过载。
    • 实施熔断机制,当检测到Redis服务出现异常时,暂时停止向Redis发送请求,避免雪崩效应。
  5. 数据持久化

    • 定期进行数据快照(RDB)或使用Append Only File (AOF)日志&

相关文章:

Redis-高级实战案例

文章目录 Redis集群崩溃时如何保证秒杀系统高可用1. 冗余与备份2. 故障检测与自动切换3. 降级策略4. 数据一致性5. 客户端缓存6. 异常处理与通知7. 测试与演练8. 服务降级与回滚Redis主从切换导致库存同步异常以及超卖问题主从切换导致的库存同步异常原因:解决方案:秒杀链路中…...

d3d12.dll 文件缺失如何解决?五种修复丢失问题的方法

d3d12.dll 文件缺失如何解决?它为什么会不见呢?今天,我们将探讨 d3d12.dll 文件的重要性、原因以及丢失时的解决策略。本文将全面介绍 d3d12.dll 文件,并提供五种修复丢失问题的方法。 d3d12.dll文件是什么的详细介绍 d3d12.dll …...

Linux下如何设置系统定时任务

在Linux系统中,用户可以使用cron工具来设置定时任务。cron是一个守护进程,用于在指定的时间间隔执行指定的命令或脚本。下面是在Linux系统中设置系统定时任务的步骤。 使用crontab命令编辑定时任务列表: crontab -e该命令会打开一个文本编辑…...

【React】JSX 实现列表渲染

文章目录 一、基础语法1. 使用 map() 方法2. key 属性的使用 二、常见错误和注意事项1. 忘记使用 key 属性2. key 属性的选择 三、列表渲染的高级用法1. 渲染嵌套列表2. 条件渲染列表项3. 动态生成组件 四、最佳实践 在 React 开发中,列表渲染是一个非常常见的需求。…...

写一个简单的兼容GET/POST请求的登录接口

本文目录 安装JDK17安装或者更新Intelij Idea 2024SpringBoot生成项目压缩包下载maven,idea添加maven写POST接口浏览器访问GET接口PostMan安装及访问POST接口 安装JDK17 参考:https://blog.csdn.net/tiehou/article/details/129575138 安装或者更新Int…...

【好玩的经典游戏】Docker环境下部署赛车小游戏

【好玩的经典游戏】Docker环境下部署赛车小游戏 一、小游戏介绍1.1 小游戏简介1.2 项目预览二、本次实践介绍2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 安装Docker环境3.2 检查Docker服务状态3.3 检查Docker版本3.4 检查docker compose 版本四、构建容器镜像4.1 下…...

物理机 gogs+jenkins+sonarqube 实现CI/CD

一、部署gogs_0.11.91_linux_amd64.tar.gz gogs官网下载&#xff1a;https://dl.gogs.io/ yum -y install mariadb-serversystemctl start mariadbsystemctl enable mariadbuseradd gittar zxvf gogs_0.11.91_linux_amd64.tar.gzcd gogsmysql -u root -p < scripts/mysql.…...

前端表格解析方法

工具类文件 // fileUtils.tsimport { ref } from vue; import * as xlsx from xlsx;interface RowData {[key: string]: any; }export const tableData ref<RowData[]>([]);export async function handleFileSelect(url: string): Promise<void> {try {const res…...

Leetcode 3227. Vowels Game in a String

Leetcode 3227. Vowels Game in a String 1. 解题思路2. 代码实现 题目链接&#xff1a;3227. Vowels Game in a String 1. 解题思路 这一题稍微分析一下之后就会发现&#xff0c;这个游戏有且只有一种情况Bob才能够赢&#xff0c;即原始字符串当中不存在元音字母的情况&…...

树莓派4B从装系统raspbian到vscode远程编程(python)

1、写在前面 前面用的一直是Ubuntu系统&#xff0c;但是遇到一个奇葩的问题&#xff1a; 北通手柄在终端可以正常使用&#xff0c;接收到数据 但在python程序中使用pygame库初始化时总是报错&#xff1a;Invalid device number&#xff0c;检测不到手柄 经过n次重装系统&am…...

vue上传Excel文件并直接点击文件列表进行预览

本文主要内容&#xff1a;用elementui的Upload 组件上传Excel文件&#xff0c;上传后的列表采用xlsx插件实现点击预览表格内容效果。 在项目中可能会有这样的需求&#xff0c;有很多种方法实现。但是不想要跳转外部地址&#xff0c;所以用了xlsx插件来解析表格&#xff0c;并展…...

OpenCV 像素操作—证件照换底色详细原理 C++纯手写实现

文章目录 总体步骤1.RGB转HSV2.找出要换的底色3.取反&#xff0c;黑白颠倒4.将原图像的非背景部分复制到新背景上 完整代码1.C纯手写版2.官方API版本 总体步骤 1.RGB转HSV 为什么一定要转为HSV 颜色空间&#xff1f; 将图像从BGR颜色空间转换为HSV颜色空间是因为HSV颜色空间更…...

tinygrad框架简介;MLX框架简介

目录 tinygrad框架简介 MLX框架简介 LLaMA​编辑 Stable Diffusion​编辑 tinygrad框架简介 极简主义与易扩展性 tinygrad 的设计理念是极简主义。与 XLA 类比,如果 XLA 是复杂指令集计算 (CISC),那么 tinygrad 就是精简指令集计算 (RISC)。这种简约的设计使得它成为添加…...

服务器重启了之后就卡在某个页面了,花屏,如何解决??

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…...

Hospital 14.6.0全开源医院管理预约系统源码

InfyHMS 具有 60 种功能和 9 种不同类型的用户类型&#xff0c; 他们可以登录系统并根据他们的角色访问他们的数据。 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89580674 更多资源下载&#xff1a;关注我。...

C/C++樱花树代码

目录 写在前面 系列文章 C简介 完整代码 代码分析 写在后面 写在前面 C实现精美的樱花树&#xff0c;只需这100行代码&#xff01; 系列文章 序号目录直达链接1爱心代码https://want595.blog.csdn.net/article/details/1363606842李峋同款跳动的爱心https://want595.b…...

sklearn基础学习

1. 简介 1.1 什么是sklearn sklearn&#xff0c;或者更正式地称为scikit-learn&#xff0c;是一个基于Python的开源机器学习库。它建立在NumPy、SciPy和matplotlib之上&#xff0c;提供了简单而有效的工具用于数据挖掘和数据分析。sklearn支持监督学习和无监督学习算法&#…...

SpringBoot 自动配置原理

一、Condition Condition 是在 Spring 4.0 增加的条件判断功能&#xff0c;通过这个可以功能可以实现选择性的创建 Bean 操 作。 思考&#xff1a; SpringBoot 是如何知道要创建哪个 Bean 的&#xff1f;比如 SpringBoot 是如何知道要创建 RedisTemplate 的&#xff1f; …...

Redisson中RQueue的使用场景附一个异步的例子

RQueue 是一个基于 Redis 的分布式作业队列系统&#xff0c;它允许开发者在 Ruby 应用程序中实现异步任务处理和计划任务调度。由于 Redis 提供了高性能的内存数据结构存储&#xff0c;RQueue 可以快速地存储和检索队列中的任务&#xff0c;这使得它非常适合于高并发和低延迟的…...

SpringMVC 控制层框架-下

五、SpringMVC其他扩展 1. 异常处理机制 1.1 异常处理概念 开发过程中是不可避免地会出现各种异常情况&#xff0c;例如网络连接异常、数据格式异常、空指针异常等等。异常的出现可能导致程序的运行出现问题&#xff0c;甚至直接导致程序崩溃。因此&#xff0c;在开发过程中&a…...

(四)js前端开发中设计模式之工厂方法模式

工厂方法模式,通过对产品类的抽象&#xff0c;使其创建业务主要用于负责创建多类产品的实例 const Java function (content) {this.content content;(function () {let oDiv document.createElement(div)oDiv.innerHTML contentoDiv.style.color greendocument.getElement…...

新版GPT-4omini上线!快!真TM快!

大半夜&#xff0c;OpenAI突然推出了GPT-4o mini版本。 当我看到这条消息时&#xff0c;正准备去睡觉。mini版本质上是GPT-4o模型的精简版本&#xff0c;没有什么革命性的创新&#xff0c;因此我并没有太在意。 结果今天早上一觉醒来发现伴随GPT-4o mini上线&#xff0c;官网和…...

【Unity】RPG2D龙城纷争(十七)敌方常规AI(Normal)的实现

更新日期:2024年7月24日。 项目源码:第五章发布(正式开始游戏逻辑的章节) 索引 简介一、AI_Normal类二、AI调遣策略第一阶段:收集1.提供战场数据收集方法2.收集战场数据三、AI调遣策略第二阶段:评估四、AI调遣策略第三阶段:行动简介 AI_Normal定位为框架自带的最基础的…...

Tracy 小笔记:微信小程序 mpx 雷达图的实现

使用文档&#xff1a; https://www.kancloud.cn/xchhhh/wx-chart/399337 https://github.com/xiaolin3303/wx-charts https://gitee.com/mirrors/wx-charts/#wx-charts 参数说明&#xff1a; https://github.com/xiaolin3303/wx-charts/issues/56 下载 dist 里的 wx-charts-…...

Unity UGUI 之 Input Field

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 1.Input Field是什么&#xff1f; 给玩家提供输入的输入框 2.重要参数 中英文对照着看…...

SpringBoot接入mongodb例子,并有增删改查功能

1&#xff0c;首先&#xff0c;在pom.xml中添加依赖&#xff1a; <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency><!--上面这…...

类和对象(三)

目录 一. 构造函数初始化列表 二. 类型转换 三. static成员 四. 友元 五. 内部类 六. 匿名对象 七. 对象拷贝时的编译器优化 一. 构造函数初始化列表 1. 之前我们实现构造函数时&#xff0c;初始化成员变量主要使用函数体内赋值&#xff0c;构造函数初始化还有一种方式&…...

Android SurfaceFlinger——GraphicBuffer初始化(二十九)

在 SurfaceFlinger 中,GraphicBuffer 是一个关键的数据结构,用于封装和管理图形数据的内存缓冲区。它不仅在 SurfaceFlinger 内部使用,也被其他组件如 GPU 驱动、摄像头服务、视频解码器等广泛利用,以实现高效的数据交换和图形渲染。 一、概述 GraphicBuffer 对象封装了一…...

pytest:4种方法实现 - 重复执行用例 - 展示迭代次数

简介&#xff1a;在软件测试中&#xff0c;我们经常需要重复执行测试用例&#xff0c;以确保代码的稳定性和可靠性。在本文中&#xff0c;我们将介绍四种方法来实现重复执行测试用例&#xff0c;并显示当前迭代次数和剩余执行次数。这些方法将帮助你更好地追踪测试执行过程&…...

一文入门SpringSecurity 5

目录 提示 Apache Shiro和Spring Security 认证和授权 RBAC Demo 环境 Controller 引入Spring Security 初探Security原理 认证授权图示​编辑 图中涉及的类和接口 流程总结 提示 Spring Security源码的接口名和方法名都很长&#xff0c;看源码的时候要见名知意&am…...

IPython的HTML魔法:%%html_header命令全解析

IPython的HTML魔法&#xff1a;%%html_header命令全解析 在IPython和Jupyter Notebook中&#xff0c;%%html_header是一个魔术命令&#xff0c;它允许用户在Notebook的单元格中添加HTML头部&#xff08;head&#xff09;内容。这个功能特别有用&#xff0c;当你需要定制Notebo…...

将SQL中的占位符替换成参数

将SQL中的占位符替换成参数 描述 描述 此方法是将SQL中的${}或#{}替换为直接拼接到SQL中或直接替换为?的形式。具体详情看下面代码。 import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern;/*** author HuYu* date 2023-09-21* since 1.0**…...

锁相环 vivado FPGA

原理 同步状态/跟踪状态&#xff1a;相位差在2kπ附近&#xff0c;频率差为0到达上述状态的过程称为捕获过程锁相环的捕获带&#xff1a;delta w的最大值&#xff0c;大于这个值的话就不能捕获鉴相器&#xff08;PD-phase discriminator&#xff09;&#xff1a;相乘加LPF&…...

英语科技写作 希拉里·格拉斯曼-蒂(英文版)pdf下载

下载链接&#xff1a; 链接1&#xff1a;https://pan.baidu.com 链接2&#xff1a;/s/1fxRUGnlJrKEzQVF6k1GmBA 提取码&#xff1a;b69t 由于是英文版&#xff0c;可能有些看着不太方便&#xff0c;可以在网页版使用以下软件中英文对照着看&#xff0c;看着更舒服&#xff0c;…...

《Dynamic Statistical Learning in Massive Datastreams》论文阅读笔记

论文地址: https://www3.stat.sinica.edu.tw/ss_newpaper/SS-2023-0195_na.pdf 论文题目翻译&#xff1a;《在大规模数据流中的动态统计学习》 核心观点&#xff1a; 动态跟踪和筛选框架&#xff08;DTS&#xff09;&#xff1a;论文提出了一个在线学习和模型更新的新框架&…...

【数据分享】2008-2022年我国省市县三级的逐日NO2数据(excel\shp格式)

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们给大家分享了2000-2022年的省市县三级的逐日PM2.5数据、2013-2022年的省市县三级的逐日CO数据和2013-2022年的省市县三级的逐日SO2数据&#xff08;均可查看之前的文章获悉详情&#xff09;&#xff01; 本次…...

JavaEE (1)

web开发概述 所谓web开发,指的是从网页中向后端程序发送请求,与后端程序进行 交互. 流程图如下 Web服务器是指驻留于因特网上某种类型计算机的程序. 可以向浏览器等Web客户端提供文档&#xff0c;也可以放置网站文件&#xff0c;让全世界浏览&#xff1b; 它是一个容器&…...

事务、函数和索引

什么是事务&#xff1f; 事务&#xff08;Transaction&#xff09;&#xff0c;就是将一组SQL语句放在同一批次内去执行&#xff0c;如果一个SQL语句出错&#xff0c;则该批次内 的所有SQL都将被取消执行。 特点 一个事务中如果有一个数据库操作失败&#xff0c;那么整个事务…...

Android APP 基于RecyclerView框架工程(知识体系积累)

说明&#xff1a;这个简单的基于RecyclerView的框架作用在于自己可以将平时积累的一些有效demo整合起来&#xff08;比如音视频编解码的、opengles的以及其他也去方向的、随着项目增多&#xff0c;工程量的增加&#xff0c;后期想高效的分析和查找并不容易&#xff09;&#xf…...

【iOS】GCD

参考文章&#xff1a;GCD函数和队列原理探索 之前写项目的时候&#xff0c;进行耗时的网络请求使用GCD处理过异步请求&#xff0c;但对一些概念都很模糊&#xff0c;这次就来系统学习一下GCD相关 相关概念 什么是GCD&#xff1f; Grand Center Dispatch简称GCD&#xff0c;是…...

C语言 | Leetcode C语言题解之第282题给表达式添加运算符

题目&#xff1a; 题解&#xff1a; #define MAX_COUNT 10000 // 解的个数足够大 #define NUM_COUNT 100 // 操作数的个数足够大 long long num[NUM_COUNT] {0};long long calc(char *a) { // 计算表达式a的值// 将数字和符号&#xff0c;入栈memset(num, 0, sizeof(num));in…...

如何使用 API list 极狐GitLab 容器镜像仓库中的 tag?

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab &#xff1a;https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署…...

粒子群算法PSO优化BP神经网络(PSO-BP)回归预测——Python和MATLAB实现

下面是一个使用Python实现的粒子群算法&#xff08;PSO&#xff09;优化反向传播神经网络&#xff08;BP&#xff09;的示例代码。 以下是具体的代码实现&#xff1a; python import numpy as np from sklearn.datasets import make_regression from sklearn.model_selection…...

React-router路由配置及跳转

1、V6对比V5的修改内容 1、API: useNavigate 代替了useHistory 。 2、废弃了Route组件的exact属性。 3、组件 <Routes>代替了<Switch> 4、组件NavLink中移除了 activeStyle activeClassName 属性。 2、安装依赖react-router-dom npm install react-router-dom…...

vue3【实战】可编辑的脱敏信息

<script lang"ts" setup> import { ref, onMounted } from "vue"; let real_name ref("朝阳");let name ref("");onMounted(() > {name.value des_name(real_name.value); });function focusing() {name.value real_name…...

S71200 - 笔记

1 S71200 0 ProfiNet - 2 PLC编程 01.如何零基础快速上手S7-1200_哔哩哔哩_bilibili 西门子S7-1200PLC编程设计学习视频&#xff0c;从入门开始讲解_哔哩哔哩_bilibili...

linux系统查历史cpu使用数据(使用sar 查询cpu和网络占用最近1个月历史数据)。

一 sar 指令介绍 在 Linux 系统中&#xff0c;sar 是 System Activity Reporter 的缩写&#xff0c;是一个用于收集、报告和保存系统活动信息的工具。它是 sysstat 软件包的一部分&#xff0c;提供了丰富的系统性能数据&#xff0c;包括 CPU、内存、网络、磁盘等使用情况&am…...

Edge浏览器加载ActiveX控件

背景介绍 新版Edge浏览器也是采用Chromium内核&#xff0c;虽然没有谷歌浏览器市场占有率高&#xff0c;但是依托微软操作系统的优势&#xff0c;Edge浏览器还是发展很强劲&#xff0c;占据着市场第二的位置。随着微软停止服务IE浏览器&#xff0c;曾经风光无限的IE浏览器页退出…...

BUG与测试用例设计

一.软件测试的生命周期 需求分析→测试计划→测试设计,测试开发→测试执行→测试评估→上线→运行维护 二.BUG 1.bug的概念 (1)当且仅当规格说明(需求文档)是存在的并且正确,程序与规格说明之间的不匹配才是错误. (2)当需求规格说明书没有提到的功能,判断标准以最终用户为准…...

怎么在使用select2时,覆盖layui的下拉框样式

目录 1.覆盖下拉框样式代码 2.自定义样式 3.样式使用 1.覆盖下拉框样式代码 .layui-form-select .layui-select-title {border: none !important; /* 去除边框 */background-color: transparent !important; /* 去除背景色 */display: none;/* 其他你想要覆盖的样式 */} 2.自…...