MST

星途 面试题库

面试题:在复杂业务场景下如何优化Redis内存回收策略

假设一个电商应用,既有高频访问且数据量庞大的商品信息缓存,又有实时性要求高的用户购物车缓存,在这种场景下,如何选择和优化Redis的内存回收策略,以确保系统高效运行并避免缓存穿透等问题?
20.8万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

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实例内存。
  • 访问频率分析:定期分析商品信息和用户购物车的访问频率,根据分析结果动态调整内存回收策略。如发现某些商品或购物车访问频率发生较大变化,调整对应的过期时间或选择更合适的回收策略,以提高缓存命中率,保证系统高效运行。