面试题答案
一键面试缓存策略
- 缓存数据结构:可使用 Redis 等内存数据库作为缓存。对于商品信息,以商品 ID 作为 key,商品详细信息作为 value 进行存储。这样在获取商品信息时,能通过快速的 key - value 查找来获取缓存数据。
- 缓存粒度:根据业务场景,可按商品维度缓存。即每个商品对应一条缓存记录,这样能精准控制单个商品的缓存,避免因其他商品变化导致不必要的缓存更新。
- 缓存有效期:设置合理的缓存过期时间。例如热门商品可设置较长的过期时间,如数小时;而一些更新频率较高的商品则设置较短的过期时间,如几分钟。同时,可采用缓存预热的方式,在系统启动时将热门商品提前加载到缓存中。
缓存更新机制
- 写后更新:当商品信息在数据库更新后,立即更新缓存中的对应数据。在电商系统中,商品库存、价格等信息更新时,先执行数据库的更新操作,成功后再更新缓存。这样能保证缓存和数据库数据的一致性。
- 删除缓存:在某些场景下,例如商品上下架操作,将缓存中的对应商品信息删除。当下次请求该商品时,缓存未命中,从数据库获取最新数据并重新缓存。这种方式简单直接,但可能导致短时间内缓存与数据库数据不一致。
缓存穿透处理
- 布隆过滤器:在系统初始化时,将数据库中所有商品 ID 构建成一个布隆过滤器。当有查询请求时,先通过布隆过滤器判断该商品 ID 是否存在。如果布隆过滤器判断不存在,则直接返回,不再查询数据库。布隆过滤器有一定的误判率,但可以通过调整参数(如哈希函数个数、位数组大小)来控制误判率。
- 空值缓存:当查询数据库发现商品不存在时,将该查询结果(空值)也缓存起来,并设置一个较短的过期时间。这样下次相同的查询就直接从缓存中获取空值,避免重复查询数据库。