智能云端素材库后端-图片模块优化
图片查询优化
Redis分布式缓存
缓存图片的分页查询。 注意设置随机过期时间防止雪崩。
Caffeine本地缓存
多级缓存
本地-redis-数据库三级。
扩展
手动刷新缓存
可以开发接口手动刷新缓存。
缓存常见问题解决方案
缓存击穿
缓存中热点数据过期时,大量请求进入数据库。
解决方案:设置超长过期时间,或使用互斥锁(Redisson)控制缓存刷新。
缓存穿透
频繁请求不存在的数据,导致大量请求直接触发数据库查询。
解决方案:对无效查询进行缓存,或使用布隆过滤器。
缓存雪崩
大量缓存同时过期,导致请求进入数据库。
解决方案:设置不同过期时间,并使用多级缓存。
自动识别热点图片缓存
可以使用京东的hotkey框架实现热点图片缓存。
查询优化
代码优化
可以单独抽象 CacheManager 来管理缓存相关操作。
上传图片优化
图片压缩
可以使用数据万象将图片压缩为webp格式。
文件秒传
方法是根据文件指纹判断是否已经上传,若已经上传则不重复上传。
不适用于本项目。
扩展-分块上传与断点续传
使用对象存储的SDK即可实现。
图片加载优化
缩略图
与压缩图片方法基本一致。可以使用数据万象服务。
注意若原图很小,缩略图反而会很大,可以对20kb以上大小的图片进行缩略。
CDN加速
CDN(内容分发网络),将数据备份到各地区节点进行缓存。就近处理请求。
COS面向存储,CDN主要处理请求。
浏览器缓存
图片存储优化
数据沉降
将长时间未访问过的数据自动迁移到低频访问存储。
可以用COS服务自动管理。
清理策略
清理策略包括:
- 立即清理
- 手动清理
- 定期清理
- 惰性清理
Redis内存管理机制包括定期清理和惰性清理。定期清理会定期随机检查部分数据,若过期则清理;惰性清理则是在访问数据时检查是否过期。
注意立即清理可以异步进行,从而提高性能。