面试题答案
一键面试1. Redis内存回收策略选择
- volatile - lru:适用于商品信息缓存,因为商品信息缓存设置了过期时间(volatile 表示仅对设置了过期时间的键生效),使用LRU(最近最少使用)算法能优先淘汰最近最少被访问的商品缓存,合理利用内存空间,保留高频访问的商品缓存数据。
- volatile - ttl:对于用户购物车缓存,若购物车数据有一定过期时间设置,且希望优先淘汰即将过期的数据,该策略比较合适。实时性要求高意味着当内存紧张时,先释放那些马上要过期的购物车缓存,保证内存空间能及时供给新的购物车数据。
2. 优化措施避免缓存穿透
- 布隆过滤器:
- 在查询商品信息和购物车信息前,先经过布隆过滤器。布隆过滤器可以快速判断某个商品ID或用户购物车标识是否存在。若不存在,直接返回,无需查询Redis,避免无效查询穿透到后端数据库。
- 例如,在商品数据初始化时,将所有商品ID加入布隆过滤器。每次查询商品信息前,先判断商品ID在布隆过滤器中是否存在,若不存在则表明该商品可能不存在,无需查询Redis和数据库。
- 空值缓存:
- 当查询结果为空(如查询不存在的商品或购物车)时,在Redis中缓存一个空值,并设置较短的过期时间。下次相同查询到来时,直接从Redis返回空值,避免穿透到数据库。
- 例如,查询不存在的商品ID,在Redis中缓存这个商品ID对应的空值,过期时间设为1分钟。这1分钟内再次查询该商品ID,直接从Redis获取空值。
3. 监控与动态调整
- 内存监控:使用Redis的INFO命令或相关监控工具(如Prometheus + Grafana)实时监控Redis内存使用情况,包括已使用内存、内存碎片率等指标。当内存使用接近阈值时,及时调整内存回收策略或增加Redis实例内存。
- 访问频率分析:定期分析商品信息和用户购物车的访问频率,根据分析结果动态调整内存回收策略。如发现某些商品或购物车访问频率发生较大变化,调整对应的过期时间或选择更合适的回收策略,以提高缓存命中率,保证系统高效运行。