聊聊电商商品详情页面吧
对于商品详情页我想只要看过淘宝的都不会陌生,业务场景就不介绍了;
第一版
客户端上送商品ID,根据商品ID去数据库查询需要展示的数据返回前端;
这么做也没错,也能实现对应功能;但压测结果灰常不理想
缺点很明显,数据库压力过大等问题;
public PmsProductParam getProductInfo1(Long id) {
PmsProductParam productInfo = portalProductDao.getProductInfo(id);
if (null == productInfo) {
return null;
}
FlashPromotionParam promotion = flashPromotionProductDao.getFlashPromotion(id);
if (!ObjectUtils.isEmpty(promotion)) {
//TODO 业务逻辑
}
return productInfo;
}
第二版
第一版的缺点是数据库大压力过大,那怎么减少数据压力呢?嗯…redis,加缓存层搞定该问题;
大概流程就是
请求进来先去redis判断商品数据是否存在,如果redis能获取对应数据直接返回;如果redis获取不到该数据,去数据库查询将获取的数据存redis返回;
看上去这个方案灰常完美?代码走起…
public PmsProductParam getProductInfo2(Long id) {
PmsProductParam productInfo = null;
//从缓存Redis里找
productInfo = redisOpsUtil.get(RedisKeyPrefixConst.PRODUCT_DETAIL_CACHE + id, PmsProductParam.class);
if (null != productInfo) {
return productInfo;
}
productInfo = portalProductDao.getProductInfo(id);
System.out.println("我被执行了");
if (null == productInfo) {
log.warn("没有查询到商