智能云端素材库后端-图片模块优化

图片查询优化

Redis分布式缓存

缓存图片的分页查询。 注意设置随机过期时间防止雪崩。

Caffeine本地缓存

多级缓存

本地-redis-数据库三级。

扩展

手动刷新缓存

可以开发接口手动刷新缓存。

缓存常见问题解决方案

缓存击穿

缓存中热点数据过期时,大量请求进入数据库。

解决方案:设置超长过期时间,或使用互斥锁(Redisson)控制缓存刷新。

缓存穿透

频繁请求不存在的数据,导致大量请求直接触发数据库查询。

解决方案:对无效查询进行缓存,或使用布隆过滤器。

缓存雪崩

大量缓存同时过期,导致请求进入数据库。

解决方案:设置不同过期时间,并使用多级缓存。

自动识别热点图片缓存

可以使用京东的hotkey框架实现热点图片缓存。

查询优化

代码优化

可以单独抽象 CacheManager 来管理缓存相关操作。

上传图片优化

图片压缩

可以使用数据万象将图片压缩为webp格式。

文件秒传

方法是根据文件指纹判断是否已经上传,若已经上传则不重复上传。

不适用于本项目。

扩展-分块上传与断点续传

使用对象存储的SDK即可实现。

图片加载优化

缩略图

与压缩图片方法基本一致。可以使用数据万象服务。

注意若原图很小,缩略图反而会很大,可以对20kb以上大小的图片进行缩略。

CDN加速

CDN(内容分发网络),将数据备份到各地区节点进行缓存。就近处理请求。

COS面向存储,CDN主要处理请求。

浏览器缓存

图片存储优化

数据沉降

将长时间未访问过的数据自动迁移到低频访问存储。

可以用COS服务自动管理。

清理策略

清理策略包括:

  • 立即清理
  • 手动清理
  • 定期清理
  • 惰性清理

Redis内存管理机制包括定期清理和惰性清理。定期清理会定期随机检查部分数据,若过期则清理;惰性清理则是在访问数据时检查是否过期。

注意立即清理可以异步进行,从而提高性能。