分享
获课地址:666it.top/13536/
性能优化与缓存策略:从能用变好用
性能优化思维:从项目开始就考虑性能
很多开发者直到项目后期才考虑性能问题,但这其实是一个误区。硅谷课堂项目教会我们,性能优化应该从项目设计阶段就开始考虑。你的目标不仅仅是实现功能,还要确保功能在高并发场景下依然稳定运行。
性能优化金字塔:
顶层:代码级优化(约10-20%收益)
中层:架构设计优化(约30-50%收益)
底层:数据库和基础设施优化(约40-60%收益)
在硅谷课堂的学习过程中,你会发现课程特别设置了"性能优化"环节,这正是为了帮助你建立从"程序员"到"工程师"的思维转变。
Redis缓存应用实战
Redis是硅谷课堂项目中用于性能提升的核心组件之一。
缓存热点数据:
将热点数据(如首页课程列表、用户信息)存入Redis,减轻数据库压力。
java
@Service
public class CourseServiceImpl implements CourseService {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
private static final String COURSE_CACHE_KEY = "course:";
@Override
public CourseDTO getCourseById(Long courseId) {
String cacheKey = COURSE_CACHE_KEY + courseId;
// 先从缓存查询
CourseDTO course = (CourseDTO) redisTemplate.opsForValue().get(cacheKey);
if (course != null) {
return course;
}
// 缓存未命中,查询数据库
course = courseRepository.findCourseDTOById(courseId);
if (course != null) {
// 写入缓存,设置过期时间
redisTemplate.opsForValue().set(cacheKey, course, Duration.ofHours(1));
}
return course;
}
}
缓存策略考虑因素:
数据更新频率:高频更新的数据缓存时间短
数据重要性:关键数据需要更可靠的缓存策略
数据大小:大对象缓存需要考虑内存占用
多级缓存架构
对于高并发系统,单级Redis缓存可能还不够,硅谷课堂项目引入了多级缓存概念:
本地缓存(Caffeine):适用于极少变更的数据,如配置信息
分布式缓存(Redis):适用于需要跨服务共享的数据
数据库缓存:数据库自身的缓存机制
java
@Configuration
@EnableCaching
public class CacheConfig {
@Bean
public CacheManager cacheManager() {
CaffeineCacheManager cacheManager = new CaffeineCacheManager();
cacheManager.setCaffeine(Caffeine.newBuilder()
.expireAfterWrite(Duration.ofMinutes(10))
.maximumSize(1000));
return cacheManager;
}
}
数据库查询优化
数据库通常是系统性能的瓶颈,硅谷课堂项目特别重视SQL优化。
索引优化:
为高频查询字段建立合适的索引:
sql
-- 为课程表建立复合索引
CREATE INDEX idx_course_status_category ON courses(status, category_id);
CREATE INDEX idx_course_create_time ON courses(create_time DESC);
SQL优化技巧:
避免SELECT *,只查询需要的字段
使用JOIN代替子查询
合理利用覆盖索引
注意LIKE查询的性能影响
分页优化:
硅谷课堂的课程列表页需要高效的分页查询:
sql
-- 传统分页(数据量大时性能差)
SELECT * FROM courses ORDER BY create_time DESC LIMIT 10000, 20;
-- 优化分页(使用游标)
SELECT * FROM courses WHERE id > 10000 ORDER BY id LIMIT 20;
异步化处理与消息队列
使用消息队列或Spring的@Async,将发送短信、记录日志等非核心操作异步化,提升主流程响应速度。
异步处理示例:
java
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private AsyncTaskExecutor taskExecutor;
@Override
public void createOrder(CreateOrderRequest request) {
// 同步处理:创建订单核心逻辑
Order order = buildOrder(request);
orderRepository.save(order);
// 异步处理:发送通知
taskExecutor.execute(() -> sendOrderNotification(order));
}
@Async
public void sendOrderNotification(Order order) {
// 发送邮件、短信通知
notificationService.sendOrderCreatedEmail(order);
}
}
高性能编程技巧
在编写业务代码时,注意以下性能要点:
集合使用优化:
根据数据量大小选择合适的集合类型
为ArrayList设置初始容量,避免频繁扩容
使用Arrays.asList()而不是新建List
字符串操作优化:
使用StringBuilder进行字符串拼接
避免在循环中创建字符串
对象创建优化:
重用无状态对象
使用对象池管理昂贵资源
性能监控与诊断
优化的前提是准确的监控数据,硅谷课堂项目使用Spring Boot Actuator进行简单的服务监控。
监控关键指标:
应用指标:QPS、响应时间、错误率
系统指标:CPU、内存、磁盘IO
业务指标:订单创建数、课程访问量
yaml
# Actuator配置
management:
endpoints:
web:
exposure:
include: health,metrics,info
endpoint:
health:
show-details: always
通过持续的监控和优化,硅谷课堂项目能够保证在高并发场景下的稳定运行。在下一篇文章中,我们将探讨项目部署与上线,完成从开发到生产的最后一公里。
有疑问加站长微信联系(非本文作者))
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信143 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传