TAOCARTS 知识

故障复盘|阿里云Redis缓存穿透引发跨境接口高频报错问题优化-阿里云开发者社区

2026-06-26 员工日常工作

一、业务背景与痛点

Taocarts跨境系统货品查询、库存查询接口QPS极高,大量不存在的货品ID、非法参数请求直接穿透缓存,频繁查询数据库。高峰期无效查询占比超30%,严重消耗数据库性能,引发接口延迟、报错增多,影响正常用户访问。

二、问题分析

1、空数据无缓存,非法请求每次穿透至DB;

2、无布隆过滤器拦截非法Key;

3、参数校验不严格,大量无效请求进入业务层。

三、解决方案

1、空值缓存短期过期,杜绝频繁穿透;

2、基于Redis实现简易布隆过滤器,拦截非法货品ID;

3、前置参数强校验,拦截无效请求。

四、核心优化代码

/**

缓存穿透防护工具类

Taocarts货品查询防穿透优化

*/

@Component

public class StockCacheProtectService {

@Autowired

private StringRedisTemplate redisTemplate;

// 空值缓存5分钟

private static final long EMPTY_CACHE_TIME = 5 * 60L;

public StockDO getStockWithProtect(String goodsId){

String key = "taocarts:stock:" + goodsId;

String cache = redisTemplate.opsForValue().get(key);

// 空值缓存拦截

if("empty".equals(cache)){

return null;

}

if(StringUtils.isNotEmpty(cache)){

return JSON.parseObject(cache, StockDO.class);

}

// 查询数据库

StockDO stock = stockMapper.selectById(goodsId);

if(stock == null){

// 缓存空值,防穿透

redisTemplate.opsForValue().set(key,"empty",EMPTY_CACHE_TIME,TimeUnit.SECONDS);

return null;

}

redisTemplate.opsForValue().set(key,JSON.toJSONString(stock));

return stock;

}

}

五、优化效果

1、数据库无效查询下降90%;

2、缓存穿透问题彻底解决;

3、接口报错率大幅下降,稳定性显著提升。

六、总结

高并发查询接口必须做缓存穿透防护,空值缓存+布隆过滤器是低成本、高收益的标准优化方案,适合所有电商、跨境查询类系统。