9、缓存预热是提升系统启动后性能的关键手段

Memcached高并发挑战:性能优化与实战策略 Memcached在高并发场景下的性能表现,需要通过细致的监控和针对性的优化来保证。通过本文的分析和策略,开发者可以更好地理解Memcached在高并发环境下的行为,掌握提升其性能的有效手段。本文不仅探讨了Memcached在高并发场景下的性能问题,还提供了一系列的优化技巧和代码示例,帮助开发者构建一个高效、稳定的缓存系统。希望能够帮助开发者在面对高并发挑战时,能够游刃有余,确保应用的流畅运行。 阅读详情

缓存预热(Cache Preheating) 是提升系统启动后性能的关键手段,尤其适用于:

  • 系统重启后缓存为空
  • 每日定时刷新热点数据
  • 大促前预加载商品信息

下面我将为你提供一份 详细、生产级的缓存预热实现方案,适用于 Spring Boot + Redis + Caffeine 的多级缓存架构。


📚 Spring Boot 缓存预热(Cache Preheating)完整实现指南

适用场景:系统启动时、定时任务、大促前预加载热点数据
技术栈:Spring Boot 3 + Redis + Caffeine + Redisson + Scheduled Task


一、什么是缓存预热?

缓存预热 是指在系统启动或特定时间点,主动将热点数据从数据库加载到缓存中,避免首次访问时缓存未命中,导致数据库压力激增。

✅ 典型场景

场景说明
系统重启后避免“缓冷启动”导致雪崩
每日凌晨预加载昨日热门商品/用户
大促前(如双11)提前加载活动商品信息
新功能上线预热核心配置数据

二、预热策略选择

策略说明推荐
启动时预热@PostConstruct 或 CommandLineRunner✅ 推荐
定时预热@Scheduled 定时任务✅ 推荐
事件驱动预热监听消息(Kafka/RabbitMQ)触发可选
手动触发预热提供 API 接口手动调用✅ 建议保留

三、实现方式一:系统启动时预热(推荐)

✅ 使用 CommandLineRunner

// service/CachePreheatService.java
package com.example.service;

import com.example.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 缓存预热服务:系统启动时加载热点数据
 */
@Service
public class CachePreheatService implements CommandLineRunner {

    @Autowired
    private UserService userService;

    @Autowired
    private RedissonClient redissonClient;

    @Override
    public void run(String... args) throws Exception {
        // 获取分布式锁,防止多个实例重复预热
        RLock lock = redissonClient.getLock("cache:preheat:lock");
        try {
            if (lock.tryLock(10, 60, TimeUnit.SECONDS)) {
                System.out.println("开始执行缓存预热...");
                preheatHotUsers();
                System.out.println("缓存预热完成!");
            } else {
                System.out.println("其他实例正在预热,跳过...");
            }
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        } finally {
            if (lock.isHeldByCurrentThread()) {
                lock.unlock();
            }
        }
    }

    /**
     * 预热热点用户(假设 ID < 1000 的用户为热点)
     */
    private void preheatHotUsers() {
        for (long id = 1; id <= 1000; id++) {
            // 触发 @Cacheable,自动写入 Caffeine 和 Redis
            userService.getUser(id);
            if (id % 100 == 0) {
                Thread.sleep(10); // 避免瞬间压力过大
            }
        }
    }
}

✅ 优势:自动执行,无需人工干预
🔒 安全:使用 Redisson 分布式锁,防止集群环境下重复预热


四、实现方式二:定时预热(每日凌晨)

✅ 使用 @Scheduled

// service/DailyCachePreheatService.java
package com.example.service;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

/**
 * 每日定时缓存预热
 */
@Service
public class DailyCachePreheatService {

    @Autowired
    private CachePreheatService cachePreheatService;

    /**
     * 每天凌晨 2:00 执行预热
     */
    @Scheduled(cron = "0 0 2 * * ?")
    public void preheatDaily() {
        System.out.println("开始执行每日缓存预热...");
        cachePreheatService.preheatHotUsers();
        System.out.println("每日缓存预热完成!");
    }
}

⚠️ 注意:需在主类启用定时任务

@SpringBootApplication
@EnableScheduling  // 启用定时任务
public class RedisIntegrationApplication {
    // ...
}

五、实现方式三:手动触发预热(运维接口)

✅ 提供 REST API

// controller/CacheController.java
@RestController
@RequestMapping("/cache")
public class CacheController {

    @Autowired
    private CachePreheatService cachePreheatService;

    @PostMapping("/preheat")
    public String manualPreheat() {
        try {
            cachePreheatService.run(); // 调用预热逻辑
            return "缓存预热已触发";
        } catch (Exception e) {
            return "预热失败: " + e.getMessage();
        }
    }
}

可通过 curl 或运维平台调用:

curl -X POST http://localhost:8080/cache/preheat

六、高级预热策略(生产推荐)

✅ 1. 基于访问日志的热点数据识别

-- 示例:从访问日志表中找出昨日访问 Top 100 用户
SELECT user_id, COUNT(*) as hits
FROM user_access_log
WHERE DATE(access_time) = CURDATE() - INTERVAL 1 DAY
GROUP BY user_id
ORDER BY hits DESC
LIMIT 100;

在预热服务中调用此 SQL 加载热点数据。


✅ 2. 分批加载 + 限流

避免一次性加载太多数据压垮 DB 或 Redis:

private void preheatHotUsers() {
    int batchSize = 50;
    for (int i = 1; i <= 1000; i += batchSize) {
        List<Long> batch = IntStream.rangeClosed(i, Math.min(i + batchSize - 1, 1000))
                .boxed().toList();

        batch.forEach(userService::getUser);

        try {
            Thread.sleep(100); // 每批间隔 100ms
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }
}

✅ 3. 预热进度监控

@Autowired
private MeterRegistry meterRegistry;

private void preheatHotUsers() {
    Counter preheatCounter = meterRegistry.counter("cache.preheat.items");

    for (long id = 1; id <= 1000; id++) {
        userService.getUser(id);
        preheatCounter.increment();
    }
}

可在 Prometheus 中查看预热进度。


七、预热数据来源建议

数据类型预热策略
用户信息预热 VIP 用户、昨日活跃用户
商品信息预热首页推荐、热销商品
配置项预热所有系统配置(@PostConstruct)
权限菜单登录时预热,或定时刷新
排行榜每日凌晨预热昨日 Top 100

八、注意事项与最佳实践

项目建议
🔐 分布式锁使用 Redisson 锁防止重复预热
🐢 分批加载避免瞬间压力过大
📊 监控记录预热耗时、数量
🧯 降级预热失败不影响系统启动
🕐 时间选择选择低峰期(如凌晨 2 点)
📦 数据量控制预热数据不宜超过总数据 20%

九、完整预热流程图

系统启动/定时触发
        ↓
获取分布式锁(Redisson)
        ↓
检查是否已预热(可选 Redis 标记)
        ↓
从 DB/日志 获取热点数据 ID 列表
        ↓
分批调用业务方法触发缓存(@Cacheable)
        ↓
更新预热标记 + 监控指标
        ↓
释放锁

十、总结

方式适用场景推荐指数
启动预热系统重启后⭐⭐⭐⭐⭐
定时预热每日刷新热点⭐⭐⭐⭐☆
手动预热运维操作⭐⭐⭐⭐☆
事件预热消息驱动⭐⭐⭐☆☆

👉 推荐组合:
✅ 启动预热 + 每日定时预热 + 手动接口
✅ 分布式锁 + 分批加载 + 监控

云虚拟机CPU缓存优化与CacheX技术实践 CPU缓存作为计算机体系结构中的关键组件,直接影响计算任务的执行效率。在虚拟化环境中,由于物理资源被多租户共享,传统的缓存优化技术面临vCache容量误判、页面着色失效等独特挑战。CacheX技术通过创新的驱逐集(Eviction Sets)探测方法,实现了对虚拟机缓存状态的精确感知。这项用户态技术不仅平均开销低于2% CPU占用,还能动态跟踪LLC竞争变化。在电商缓存集群等实际场景中,CacheX帮助Redis缓存命中率从88%提升至94%,95分位延迟降低44%。该技术特别适用于需要低延迟保障的云计算服 阅读详情

相关推荐

深入解析PowerPC e300核心:内存管理、缓存与中断机制实战

在嵌入式系统开发中,内存管理单元、缓存和中断处理是处理器核心的三大基石,深刻影响着系统的性能、实时性与可靠性。内存管理单元负责虚拟地址到物理地址的高效转换与访问保护,其机制如段寄存器与块地址转换寄存器,为系统提供了灵活且确定性的内存映射方案。缓存机制通过其组织结构和一致性协议,在弥补CPU与主存速度差距的同时,确保了多主设备系统中的数据一致性,其高级控制功能如缓存路锁定,更是实时系统实现确定性延迟的关键。中断模型遵循精确异常处理原则,确保了系统对外部事件的快速、可靠响应,为构建健壮的实时系统奠定了基础。本文

lanmh的专栏 380

AI工程缓存策略终极指南:10个提升系统性能的关键技术

在AI工程领域,高效的缓存策略是提升系统性能、降低资源消耗的核心手段。本指南将深入探讨10个关键缓存技术,帮助开发者构建更快、更可靠的AI应用。从基础的内存缓存到复杂的分布式缓存架构,这些经过实战验证的策略将为你的AI系统带来显著的性能提升。 ## 1. LRU缓存:智能管理内存资源 LRU(最近最少使用)缓存是AI系统中最常用的内存缓存策略之一。它通过优先保留最近使用的数据,自动淘汰长时间未

gitblog_01031的博客 709

TF卡性能大比拼:AS SSD Benchmark实测4K随机读写速度差异

本文通过AS SSD Benchmark实测对比了五款TF卡的4K随机读写性能,揭示了不同应用场景下的性能差异。测试结果显示,工业级TF卡在写入稳定性上表现优异,而监控专用卡则在读取性能上更胜一筹。文章还提供了选购指南和性能优化技巧,帮助用户根据实际需求选择最适合的TF卡。

weixin_27032989的博客 477

dependabot-core 贡献指南详解:从 PR 工作流、Git 提交规范到新增生态系统的完整路径

dependabot-core 是 GitHub Dependabot 服务背后的核心逻辑库,负责为各语言项目生成依赖更新 PR。本文基于仓库的 [CONTRIBUTING.md](https://link.gitcode.com/i/fa58a542e105e73787ccf35cb443f538),完整讲解向该项目提交代码的标准工作流、项目结构、Git 提交与合并策略、新增生态系统的进阶贡献路

gitblog_00384的博客 464

AI Agent沙箱冷启动从2分钟到1秒的优化实战

在容器化与微服务架构中,容器冷启动延迟是影响服务响应速度的关键瓶颈,尤其在AI Agent、Serverless等对实时性要求高的场景下尤为突出。其核心原理涉及镜像拉取、容器初始化、依赖安装等多个串行阶段,优化冷启动对于提升资源利用率和用户体验具有重要技术价值。通过镜像瘦身、依赖预置、预热缓存及启动流程并行化等工程实践,能有效将启动时间从分钟级压缩至秒级。本文聚焦OpenSandbox沙箱环境,针对AI Agent项目,详细阐述了如何通过打造极简定制镜像、实现容器与依赖并行加载、以及加速依赖安装等具体策略,

anjichan4261的博客 398

Prompt Caching实战:Ollama本地化缓存架构与工程化落地

Prompt Caching是一种面向大模型推理的确定性计算复用技术,其核心原理是将语言模型调用中可复用的上下文计算(如KV缓存、指令语义)与动态生成部分解耦,并通过指纹化键值、分层TTL和结构化响应缓存实现毫秒级复用。该技术显著降低GPU显存调度开销与token消耗,在成本敏感型AI应用(如客服中台、教育助手)中可提升缓存命中率至89%、延迟下降81%、API成本减少82%。本文聚焦Ollama本地化部署场景,提供无需Redis、零外部依赖的文件级缓存实现,覆盖指纹生成、过期治理、监控埋点及模型升级平滑迁

weixin_30455023的博客 448

缓存穿透、缓存击穿、缓存雪崩

一、缓存穿透 1.什么是缓存穿透 缓存穿透的概念很简单,例如用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询。发现也没有,于是本次查询失败。当用户很多的时候,缓存都没有命中(秒杀),于是都去请求了持久层数据库。这会给持久层数据库造成很大的压力,这时候就相当于出现了缓存穿透。(缓存查不到数据——>给持久层数据库造成极大压力) 2.缓存穿透的解决方案 第一种解决方案: 布隆过滤器,它是一种数据结构,以hash形式存储所有可能查询的参数,在控制层先进行校验,不符

Malax的博客 394

从零到一:构建嵌入式Nginx的模块化架构与跨平台部署实战

本文详细介绍了在ARM32架构的RV1126嵌入式设备上,通过交叉编译技术构建模块化Nginx服务器的完整实战流程。涵盖环境配置、依赖库编译、Nginx核心与http_ssl_module等模块集成、性能优化及部署调试,为嵌入式开发提供高效可靠的Web服务器解决方案。

rock5的博客 202

大厂性能优化 10大顶奢方案

大厂性能优化 10大顶奢方案

abcafdsgr123456789的博客 1451

CFturbo 2024保姆级教程:从流量扬程到三维叶轮,手把手搞定离心泵水力设计

本文提供CFturbo 2024离心泵水力设计的全流程实战指南,从流量扬程参数输入到三维叶轮模型导出,详细解析设计步骤与优化技巧。涵盖叶轮尺寸确定、子午面型线设计、叶片角度调整等关键环节,帮助工程师高效完成CAE辅助的离心泵水力设计,提升设计质量与效率。

weixin_42569329的博客 921

NetApp 7-mode初始化详解(原AGGR重建)及注意事项

没想到有生之年还能再写个7-mode的文章,上次接触可能已将近十年,本次恰巧碰到这个机会,边学习边整理,整整一天时间,碰到了不少坑,作为记录。

RaySun的技术Blog 2751

性能优化 10大顶奢方案

性能优化 10大顶奢方案

安静的软件工程师 1864

视频理解与处理——OpenClaw视频能力深度解析(2026视频版)

本文介绍了OpenClaw视频理解与处理的核心技术,重点分析了视频预处理流程。通过VideoProcessor类实现视频加载、帧采样、尺寸调整和归一化等基础处理功能,支持本地和在线视频源处理,为后续视频分析任务提供标准化输入。预处理模块采用均匀采样和标准化方法优化视频数据,确保动作识别、场景分析等高级应用的准确性,展现了OpenClaw强大的视频处理能力。

一键难忘的博客 464

MPC8555E L2缓存与SRAM配置:性能监控与错误处理实战指南

在嵌入式系统开发中,缓存与SRAM是提升处理器性能与可靠性的核心组件。其工作原理基于高速存储阵列的地址映射与访问策略,通过减少内存访问延迟来优化系统实时性。这项技术的价值在于,它允许开发者根据应用场景(如网络通信、工业控制)灵活分配片上存储资源,实现性能与确定性的平衡。例如,可配置的L2缓存/SRAM模块支持全缓存、全SRAM或混合模式,为关键任务代码和数据提供恒定访问延迟。本文以MPC8555E处理器为例,深入解析其L2子系统的架构、性能监控寄存器配置以及主动错误注入机制,帮助开发者掌握缓存锁定、阈值分析

331

汇川Easy系列PLC系统PID指令编程应用(增量型)

增量式PIDS7-1200/1500增量式PID(输出归一化、支持PWM输出)_西门子1200pid算法公式-优快云博客文章浏览阅读1k次。本文介绍了S7-1200/1500 PLC中增量式PID算法的应用,包括输出归一化和PWM输出。通过详细解析,阐述了PID输出如何限制在0.0-1.0之间,并且如何将PID输出与PWM占空比关联,适用于温度等控制场景。

RXXW_Dor的博客 1420

Docker 实战:使用 Docker Desktop 在 MacOS 上安装 Docker

在这采用 Docker Desktop 在 Mac 上来安装 Docker。Docker Desktop 是 Docker 的管理桌面 IDE,提供了一个直观的GUI(图形用户界面),允许您直接在本机上管理容器、应用程序以及镜像。适用于 Mac、Linux 以及 Windows 环境,允许您构建、共享和运行容器化应用程序和微服务。Docker Desktop 可以大大降低在复杂配置上的时间,因此您可以专注于编写代码。它负责端口映射、文件系统问题和其他默认设置,并定期更新 Bug 修复和安全更新。

SmartSi 8004

性能测试案例:响应时间优化从2秒到500毫秒的实战解析

摘要:本文通过电商订单查询接口优化案例,系统展示了性能测试驱动优化的全流程。初始平均响应时间2.3秒,经全链路分析发现数据库查询(58%)和远程调用(40%)是主要瓶颈。通过创建联合索引、引入Redis缓存、批量查询等优化措施,最终将响应时间降至480ms(提升79%),QPS从45提升至210。案例证明性能优化需遵循"测试定位-ROI优先-持续监控"原则,建议测试人员采用全链路追踪工具,将性能需求前置到开发早期。关键优化公式:效果=精准测试×(索引+缓存+架构调整)。

2501_94480392的博客 174

【嘉立创EDA】PCB 多层板如何交换内层,4层板交换板层

本文使用嘉立创EDA,描述如何在PCB设计时,如何交换各个板层,特别是4层板需要交换内层时,应该如何操作,以供有需要的读者参考。

l64481000的博客 2012

Python函数计算性能革命(2025冷启动优化全攻略)

auto-generated

PixelWander的博客 627

黑猫带你学eMMC协议第4篇:eMMC概述

1 前言 声明: 本文依据eMMC JEDEC5.1协议及个人工作经验整理而成,如有错误请留言。 文章为个人辛苦整理,付费内容,禁止私自转载。 本文大约3000字,从emmc的内部结构框架、供电、总线、寄存器等各方面进行框架性的介绍,本章节内容不需要深入研究,读完本篇文章,只要能对emmc有个框架下的了解,就可以了。 2 内部结构框架 由图可以看出,emmc内部由两块组成:控制器 + 存储介质。emmc内部存储介质绝大部分为nand flash。 众所周知,我们需要存储数据到nand flash中,并

黑猫奥利奥的博客 3340

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

嵌入式Linux启动性能优化实战:基于ARM Cortex-A53平台将启动时间缩短30%的5个技巧

本文详细介绍了在ARM Cortex-A53平台上优化嵌入式Linux启动性能的5个实战技巧,包括启动时间测量、Bootloader优化、内核裁剪、文件系统选型及应用层加速。通过系统级调优,成功将启动时间缩短30%,显著提升智能家居、工业控制等嵌入式系统的响应速度与用户体验。

chiman6219的博客 410

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

记录些Spring+题集(2)

记录些Spring+题集(2)

安静的软件工程师 806

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C++低延迟编程实战:从硬件原理到高频交易系统优化

在计算机系统性能优化领域,低延迟编程是追求极致响应速度的核心技术。其原理基于对计算机体系结构的深刻理解,特别是CPU缓存机制、内存访问模式和多线程并发控制。通过优化数据局部性、减少间接访问和消除不必要的系统开销,低延迟技术能够将应用程序的响应时间从毫秒级压缩到微秒甚至纳秒级。这种技术在高频交易、实时游戏服务器和物联网网关等场景中具有极高价值,直接关系到系统的盈利能力和用户体验。本文聚焦于C++语言在低延迟应用中的实践,深入探讨了单写单读无锁队列(SPSC Ring Buffer)和对象池(Object Po

weixin_33968104的博客 370

静思书屋:基于Java Web技术栈构建高性能图书信息平台实践

摘要:静思书屋(book.tinynews.org)是基于JavaWeb技术构建的高性能图书信息平台,采用MVC架构实现分层解耦,集成JSP+Vue.js前端技术。通过MySQL优化索引、多级缓存策略(Caffeine+Redis)等技术手段,实现千万级数据毫秒级查询响应。平台具备智能检索、个性化推荐等核心功能,并采用BCrypt加密、接口限速等安全措施。未来计划引入Elasticsearch全文检索和AI推荐技术,持续优化用户体验。该平台为同类Web应用开发提供了可借鉴的技术实践方案。

yq198204301156的博客 922

代码动态生成技术原理与应用实践

代码动态生成是一种通过程序在运行时自动生成可执行代码的技术,它扩展了传统编程的边界。其核心原理基于元编程和即时编译,通过反射机制获取类型信息并动态构建代码结构。这项技术能显著提升系统灵活性,在规则引擎、高性能计算等领域有广泛应用价值。典型的实现方式包括字符串拼接、表达式树构建和字节码生成,现代框架如Spring AOP和ORM工具都深度依赖此技术。在工程实践中,动态查询构建器和矩阵运算优化是常见应用场景,同时需要注意代码缓存和安全防护。随着JIT编译技术的发展,动态代码生成正在与机器学习等前沿领域结合,展现

weixin_34015336的博客 446

【大型C++项目启动优化】:千万行代码背后的加载加速策略

针对大型C++项目启动慢的痛点,本文深入解析千万行代码级别的启动时间优化策略,涵盖延迟加载、符号优化与静态初始化精简等核心方法,显著提升程序响应速度。适用于高性能服务与复杂客户端场景,【C++ 启动时间 优化】实战经验值得收藏。

AlgoChat的博客 516
上一篇: spring.sql.init 用于自动执行 SQL 脚本来创建数据库结构(Schema)和插入初始数据(Data)
下一篇: 3、一个 Spring Boot 或 Spring Cloud 项目的缓存架构该怎么设计才合理
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值