type
status
date
slug
summary
tags
category
icon
password
URL
商品详情页问题
详情页承载了大部分流量和订单入口,并且还有各种个性化需求,比如商品纬度(标题,图片,属性)
主商品纬度(商品简介,规格参数)分类维度,商家维度,店铺维度,还有一些实时要求较高的
实时价格,实时促销,广告词,配送,预售等是通过异步加载
SPU:Standard Product Unit (标准化产品单元),SPU是商品信息聚合的最小单位,是一组
可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。
SKU:Stock keeping unit(库存量单位) SKU即库存进出计量的单位(买家购买、商家进货、 供应商备货、工厂生产都是依据SKU进行的),在服装、鞋类商品中使用最多最普遍。 例如纺 织品中一个SKU通常表示:规格、颜色、款式。SKU是物理上不可分割的最小存货单元。
优化
页面静态化
FreeMarker 是一款模板引擎:即基于模板和数据源生成输出文本(html网页,配置文件,电 子邮件,源代码)的通用工具。它是一个 java 类库,最初被设计用来在MVC模式的Web开发
框架中生成HTML页面,它没有被绑定到Servlet或HTML或任意Web相关的东西上。也可以用
于非Web应用环境中。
模板编写使用FreeMarker Template Language(FTL)。使用方式类似JSP的EL表达式。模板中
专注于如何展示数据,模板之外可以专注于要展示什么数据。
问题:价格改变、秒杀 倒计时、下单 ??js没有生效(js、css、图片url),新增商品不同服务器需要更新静态化模版
后台优化
redis缓存
加入redis之后我们发现提高了可以把之前请求 数据库查询的商品都缓存到redis中,通过对 redis的访问来减少对数据里的依赖,减少了依赖本质就是减少了磁盘IO。
上面代码的问题
缓存中如果没有数据,大量请求过来,在线程没有把数据存入到redis中,大部分线程都会去查询sql,这是我们不想的,因此需要加锁,目前都是针对分布式情况
加入分布式锁
缓存应用场景
- 访问量大,qps 高,更新频率不同
- 数据一致性要求不是特别高
缓存不足的问题
缓存击穿问题(热点数据单个key)
对于一些设置了过期时间的key,如果这些key可能会在某些时间点被超高并发地访问,是一种 非常“热点”的数据。这个时候,需要考虑一个问题:缓存被“击穿”的问题,这个和缓存雪 崩的区别在于这里针对某一key缓存,前者则是很多key。
解决方案
- 加锁,未命中通过加锁避免大量请求访问数据库
- 不允许过期,后台有任务异步更新数据
缓存穿透问题(一般是恶意攻击访问不存在的数据)
解决方案:
- 布隆过滤器 将所有可能存在的数据哈希到一个足够大的 bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查 询压力。
- 缓存空数据并设置短暂的过期时间
缓存雪崩
存雪崩是指在我们设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全 部转发到DB,DB瞬时压力过重雪崩。
解决方案
- 设置超时时间+随机时间防止同一个时间批量缓存失效
- 事前 使用主从,哨兵,redis cluster 来避免redis 全盘崩溃
- 事中 使用降级 限流等策略
- 事后 redis持久化机制,尽快恢复数据
缓存和数据库双写一致性问题
一致性问题是分布式常见问题,还可以再分为最终一致性和强一致性。数据库和缓存双写,就必然会存在不一致的问题。
就是如果对数据有强一致性要求,不能放缓存。
我们所做的一切,只能保证最终一致性。另外,我们所做的方案其实从根本上来说,只能说降
低不一致发生的概率,无法完全避免。因此,有强一致性要求的数据,不能放缓存。
一般使用:更新db,然后删除缓存
也有使用双删策略
缓存优化
网站响应的速度,一般是网络IO和磁盘IO这两块影响很大,引入缓存本质是减少了磁盘IO,下面引入
本地缓存来优化网络I
引入本地缓存
本地缓存的不足
可以缓存,如果有些商品访问越来越少,这个时候不需要缓存了,那请问我现在的本地缓存如何 清理掉了?怎么知道哪些数据是删除的哪些数据是不需要删除的了?这是不是得一个算法来统计下这个访问 量,然后根据排序来选择删除部分数据.
引入gava缓存
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>22<version>
</dependency>
致谢:
有关Notion安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
- 作者:卷神
- 链接:https://blog.952712.xyz/article/aa3ce288-75f7-4201-ab79-cc63dd19ee82
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。








