MST
星途 面试题库

面试题:缓存设计之中等难度:缓存与微服务架构集成的基础策略

在微服务架构中,常见的缓存与微服务集成策略有哪些?请举例说明每种策略适用的场景,并阐述如何在不同微服务之间保持缓存数据的一致性。
45.5万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

常见的缓存与微服务集成策略

  1. 客户端缓存
    • 适用场景:适用于一些读多写少,且对实时性要求不是特别高的数据。例如,电商应用中商品的基本描述信息,这些信息更新频率较低,大量用户读取。
    • 说明:客户端(如浏览器或移动应用)直接缓存数据,减少对微服务的请求次数。当客户端首次请求数据时,微服务返回数据并标记缓存相关信息(如过期时间),客户端按规则进行缓存。再次请求时,若缓存未过期则直接使用缓存数据。
  2. 微服务本地缓存
    • 适用场景:适合于在单个微服务内部频繁使用且变化不频繁的数据。例如,一个订单微服务中一些固定的订单状态描述信息,订单状态一般不会频繁变动,但在订单处理流程中会多次用到。
    • 说明:在微服务内部使用缓存机制(如Guava Cache等),当微服务接收到请求时,先检查本地缓存中是否有数据,若有则直接返回,若没有再从数据库等数据源获取并放入本地缓存。
  3. 分布式缓存(如Redis)
    • 适用场景:适用于跨多个微服务共享的数据,读操作频繁且对数据一致性要求相对不是极高的场景。例如,电商系统中的用户登录信息,多个微服务都可能需要验证用户登录状态。
    • 说明:多个微服务共同访问分布式缓存,缓存作为共享的数据存储。微服务从缓存获取数据,若缓存中没有则从数据库读取并写入缓存。

保持缓存数据一致性的方法

  1. 读写锁机制
    • 说明:在对缓存数据进行读写操作时,使用读写锁。多个微服务读数据时可以同时进行,而当有微服务要写数据时,先获取写锁,此时其他读写操作都被阻塞。只有写操作完成并释放锁后,其他操作才能进行。例如,在商品信息更新场景下,商品微服务在更新商品价格到数据库后,获取写锁更新缓存中的商品价格信息,期间其他微服务无法读取或写入该商品缓存数据。
  2. 缓存失效策略
    • 说明:设定合理的缓存过期时间。当数据发生变化时,不直接更新缓存,而是让缓存过期。之后微服务再次请求数据时,从数据源获取最新数据并重新缓存。例如,订单状态发生变化时,订单微服务不主动更新订单状态的缓存,而是设置该订单状态缓存的过期时间较短,下次其他微服务获取订单状态时,缓存已过期,就从数据库获取最新状态并重新缓存。
  3. 消息队列
    • 说明:当某个微服务对数据进行修改后,向消息队列发送一条消息,告知其他相关微服务数据已变更。其他微服务监听消息队列,收到消息后更新本地缓存或删除相应缓存数据。比如,库存微服务修改了商品库存数量后,向消息队列发送库存变更消息,订单微服务监听到消息后,更新自己本地缓存中的库存相关信息或删除相关缓存,下次使用时重新从数据源获取最新库存数据。