interview
database
Redis基础:常见的缓存更新策略有哪几种?

Cache Aside Pattern旁路缓存模式

Cache Aside Pattern旁路缓存模式

QA

Step 1

Q:: 常见的缓存更新策略有哪几种?

A:: 常见的缓存更新策略主要有以下几种: 1. Cache Aside Pattern(旁路缓存模式):服务端同时维护数据库和缓存,先更新数据库,再删除缓存。 2. Write Through Pattern(写穿模式):写操作同时写入数据库和缓存。 3. Write Behind Pattern(写回模式):写操作先写入缓存,然后异步地写入数据库。 每种模式各有优缺点,具体选择哪种策略需要根据具体的业务场景来定。

Step 2

Q:: Cache Aside Pattern 的优缺点是什么?

A:: 优点: 1. 适合读请求多的场景,能有效提高读取性能。 2. 数据库是最终权威,数据一致性较好。 缺点: 1. 首次请求数据一定不在缓存中,需要从数据库读取,可能导致初始延迟较高。 2. 写操作频繁时,缓存中的数据会被频繁删除,影响缓存命中率。

Step 3

Q:: 为什么在 Cache Aside Pattern 中删除 cache 而不是更新 cache?

A:: 1. 对服务端资源造成浪费:直接删除 cache 更加简单高效,避免了频繁的更新操作。 2. 产生数据不一致问题:在并发场景下,更新 cache 可能会导致数据不一致性问题。

Step 4

Q:: 在写数据的过程中,可以先删除 cache 后更新 db 么?

A:: 不可以。因为这样可能会导致数据库和缓存数据不一致。例如,请求1先删除 cache 中的数据A,请求2读取数据A时,由于数据库中的数据尚未更新,导致读取到旧值。

Step 5

Q:: 在写数据的过程中,先更新 db 后删除 cache 就没有问题了么?

A:: 理论上还是可能会出现数据不一致性的问题,不过概率非常小。例如,请求1读取数据A,请求2更新数据库中的数据A,然后请求1将旧数据A写入缓存,导致缓存中的数据不一致。

Step 6

Q:: Cache Aside Pattern 的缺陷是什么?如何解决?

A:: 缺陷1:首次请求数据一定不在缓存中,解决办法是将热点数据提前放入缓存中。 缺陷2:写操作频繁时,缓存中的数据会被频繁删除,影响缓存命中率。解决办法是: 1. 数据库和缓存数据强一致场景:更新数据库的同时更新缓存,并加锁保证线程安全。 2. 允许短暂数据不一致场景:更新数据库的同时更新缓存,并给缓存加一个较短的过期时间。

用途

面试这个内容是因为缓存更新策略是提升系统性能和数据一致性的重要手段。在实际生产环境中,缓存能显著提高数据访问速度,减轻数据库负载,特别是在高并发场景下。选择合适的缓存更新策略可以在性能和一致性之间找到平衡,避免缓存雪崩、击穿和穿透等问题。\n

相关问题

🦆
什么是缓存雪崩?如何应对?

缓存雪崩是指在某一时刻,大量缓存数据失效,导致大量请求涌向数据库,可能导致数据库崩溃。应对方法包括: 1. 缓存数据的过期时间设置随机化,避免同一时间大量缓存失效。 2. 使用多级缓存,分散压力。 3. 在缓存失效时,使用限流策略保护数据库。

🦆
什么是缓存击穿?如何应对?

缓存击穿是指某个热点数据在失效的瞬间,有大量请求同时请求该数据,导致请求直接打到数据库。应对方法包括: 1. 使用互斥锁或分布式锁,在缓存重建时,防止多个请求同时访问数据库。 2. 设置热点数据永不过期。

🦆
什么是缓存穿透?如何应对?

缓存穿透是指请求的数据在缓存和数据库中都不存在,每次请求都会打到数据库。应对方法包括: 1. 对不存在的数据设置一个短暂的缓存(缓存空值),防止持续请求打到数据库。 2. 使用布隆过滤器等方法,快速判断请求的数据是否存在。

ReadWrite Through Pattern读写穿透

QA

Step 1

Q:: 什么是 Read/Write Through Pattern?

A:: Read/Write Through Pattern 是一种缓存读写策略,其中服务端将缓存视为主要数据存储,从中读取数据并将数据写入其中。缓存服务负责将数据读取和写入数据库,从而减轻了应用程序的职责。

Step 2

Q:: Write Through 模式的主要步骤是什么?

A:: Write Through 模式的步骤包括:1. 先查 cache,如果 cache 中不存在,则直接更新数据库。2. 如果 cache 中存在,则先更新 cache,然后 cache 服务自己更新数据库(同步更新 cache 和数据库)。

Step 3

Q:: Read Through 模式的主要步骤是什么?

A:: Read Through 模式的步骤包括:1. 从 cache 中读取数据,如果读取到则直接返回。2. 如果读取不到,则先从数据库加载数据,写入到 cache 后再返回响应。

Step 4

Q:: Read Through Pattern 和 Cache-Aside Pattern 有什么区别?

A:: Read Through Pattern 只是对 Cache-Aside Pattern 进行了封装。在 Cache-Aside Pattern 下,读请求时如果 cache 中不存在数据,是由客户端负责把数据写入 cache;而在 Read Through Pattern 中,是由 cache 服务自己负责写入缓存,对客户端是透明的。

Step 5

Q:: Read/Write Through Pattern 的优缺点是什么?

A:: 优点包括减少了应用程序的职责、简化了代码逻辑以及提供了一致的数据访问接口。缺点包括首次请求数据一定不在 cache 中,且需要依赖 cache 服务提供的功能。

用途

面试这个内容是为了考察候选人对缓存策略的理解,特别是在分布式系统和高并发环境下的应用。在实际生产环境中,当系统需要高性能和高可用性时,缓存是一个非常重要的技术,Read`/`Write Through Pattern 可以用于需要确保数据一致性的场景,比如金融交易系统、电商订单系统等。\n

相关问题

🦆
什么是 Cache-Aside Pattern?

Cache-Aside Pattern 是一种常见的缓存策略,当应用程序需要从缓存中读取数据时,如果缓存中没有数据,则从数据库加载数据,并将数据写入缓存中。

🦆
什么是 Write-Behind Caching?

Write-Behind Caching 是一种缓存写策略,其中应用程序先将数据写入缓存,然后由缓存服务异步地将数据写入数据库。

🦆
什么是缓存击穿?如何解决缓存击穿问题?

缓存击穿是指某个热点数据在缓存失效的瞬间,有大量请求同时访问这个数据,导致数据库压力骤增。解决方法包括使用互斥锁(Mutex)或者在缓存失效前主动刷新缓存。

🦆
什么是缓存雪崩?如何防止缓存雪崩?

缓存雪崩是指在同一时间有大量缓存失效,导致大量请求直接访问数据库,可能引起数据库崩溃。防止方法包括给缓存设置不同的过期时间,增加缓存的高可用性和容灾能力。

🦆
如何保证缓存与数据库的一致性?

保证缓存与数据库一致性的方法包括使用事务(Transaction)确保数据的一致更新、采用分布式锁、以及使用合适的缓存失效策略(如 Write-Through 或 Write-Behind)。

Write Behind Pattern异步缓存写入

QA

Step 1

Q:: 什么是 Write Behind Pattern?

A:: Write Behind Pattern 是一种异步缓存写入策略,在这种模式下,数据首先写入缓存,然后批量异步地写入数据库。这种模式可以显著提高数据库的写性能,但也带来了一些数据一致性的问题。

Step 2

Q:: Write Behind Pattern 和 Read/Write Through Pattern 有什么不同?

A:: Write Behind Pattern 只更新缓存,随后异步批量更新数据库;而 Read/Write Through Pattern 是同步更新缓存和数据库。Write Behind Pattern 强调的是写入性能,而 Read/Write Through Pattern 更强调数据一致性。

Step 3

Q:: 为什么删除缓存而不是更新缓存?

A:: 删除缓存更加直接,可以避免服务端资源浪费和数据不一致问题。更新缓存可能会导致并发场景下的数据不一致,因为多个请求可能会同时操作缓存和数据库。

Step 4

Q:: 在写数据过程中,为什么不能先删除缓存再更新数据库?

A:: 先删除缓存再更新数据库可能导致数据不一致问题。假设一个请求删除了缓存中的数据,而另一个请求此时读取了数据库中的旧数据,这会导致缓存和数据库中的数据不一致。

Step 5

Q:: 先更新数据库再删除缓存就没有数据不一致的问题了吗?

A:: 虽然这种方法减少了数据不一致的概率,但仍可能存在问题。因为数据库的写入速度通常比缓存快,所以在高并发情况下,可能会出现读到旧数据并写入缓存的情况。

Step 6

Q:: Cache Aside Pattern 有什么缺陷?

A:: Cache Aside Pattern 的主要缺陷包括:首次请求数据一定不在缓存中,导致缓存命中率低;频繁的写操作会频繁删除缓存数据,影响缓存命中率。解决办法包括预加载热点数据和在更新数据库时同时更新缓存。

Step 7

Q:: Read/Write Through Pattern 和 Cache Aside Pattern 有什么不同?

A:: Read/Write Through Pattern 是缓存服务负责将数据写入缓存和数据库,而 Cache Aside Pattern 则由客户端负责在读取数据时将其写入缓存。

用途

面试这些内容是为了考察候选人对缓存和数据库一致性策略的理解,尤其是在高并发和高性能要求的场景下。实际生产环境中,这些模式主要用于提升系统性能和降低数据库负载,例如在浏览量、点赞量等频繁变化的数据场景中。\n

相关问题

🦆
什么是 Cache Aside Pattern?

Cache Aside Pattern 是一种缓存策略,在读取数据时先查缓存,如果缓存中没有数据,则从数据库读取数据并写入缓存。

🦆
什么是读穿透Read Through?

读穿透是一种缓存读取策略,在读取数据时,优先从缓存中读取,如果缓存中没有数据,则缓存服务从数据库读取数据并写入缓存。

🦆
什么是写穿透Write Through?

写穿透是一种缓存写入策略,在写入数据时,优先更新缓存,然后由缓存服务同步更新数据库。

🦆
缓存雪崩是什么?如何应对?

缓存雪崩是指缓存大面积失效,导致大量请求直接打到数据库,可能造成数据库过载。应对措施包括设置缓存数据的过期时间随机化、热点数据永不过期、使用多级缓存等。

🦆
什么是缓存击穿?如何解决?

缓存击穿是指在高并发场景下,某个热点数据在缓存失效后,大量请求同时打到数据库。解决办法包括使用互斥锁或设置热点数据永不过期。

🦆
什么是缓存污染?

缓存污染是指缓存中存储了不常用的数据,导致有用数据被挤出缓存。解决方法包括使用合适的缓存策略,如 LRU(最近最少使用)策略。