您的位置:首页 > 科技 > 能源 > 【Redis进阶】缓存设计模式

【Redis进阶】缓存设计模式

2024/10/6 10:42:20 来源:https://blog.csdn.net/2401_83045332/article/details/141037113  浏览:    关键词:【Redis进阶】缓存设计模式

目录

Cache Aside(旁路缓存)模式

概念

读操作流程如上图所示

写操作流程如上图所示

代码示例

总结

Read-Through 模式

概念

操作流程:

优点:

Write-Through 模式

概念

操作流程:

优点:

Write-Behind(Write-Back)模式

概念

操作流程:

优点:

缺点:

总结


缓存设计模式是指将缓存作为系统架构的一部分,通过特定的设计模式来优化数据访问的效率和性能。

Cache Aside(旁路缓存)模式

概念

Cache Aside模式是最常见的缓存设计模式,又称为Lazy Loading(延迟加载)模式。应用程序直接控制缓存和数据库的交互,数据的加载和更新由应用程序显式的管理。

读操作流程如上图所示

  1. 应用程序先从缓存中读取数据。
  2. 如果缓存中存在(命中),则返回数据。
  3. 如果缓存中不存在(未命中),则从数据库中读取数据,将数据写入缓存中,并返回数据。

写操作流程如上图所示

  1. 应用程序先更新数据库中的数据。
  2. 然后删除缓存中的旧数据(或者直接更新缓存)。

代码示例

// 伪代码示例
public String getData(String key) {String value = redis.get(key);if (value == null) {value = db.get(key);redis.set(key, value);}return value;
}public void updateData(String key, String value) {db.update(key, value);redis.del(key); // 或者 redis.set(key, value);
}

总结

在Cache Aside中,应用层需要和缓存和数据库两个数据源打交道,这增加了应用层的复杂度,而Read/Write Through Pattern就是来解决这个问题的,在这两种模式下,应用层只需要将缓存作为主要数据源,不需要感知数据库,更新和读取的任务都交给缓存来处理。

Read-Through 模式

概念

Read-Through模式将缓存的加载逻辑封装在缓存层,由缓存系统负责从数据库中记载数据。这种模式对于开发者透明,应用程序只需要与缓存交互。

操作流程

  1. 应用程序从缓存中读取数据。
  2. 如果缓存命中,则返回数据。
  3. 如果缓存未命中,则由缓存系统自动从数据库中加载数据,并写入缓存,然后返回数据。

在上图中,红色框线内的流程都由缓存自己操作,不再由应用层处理。

// 伪代码示例
public String getData(String key) {// 缓存系统内部封装了数据加载逻辑return cache.get(key);
}

优点

  • 简化了应用程序的代码逻辑,开发者只需关心缓存的使用。

Write-Through 模式

概念

在Write Though模式下,是由缓存配置一个写模块,应用层更新数据时,由缓存去更新数据库。同时,当缓存命中时,写缓存和写数据库这两个操作在一个事务中完成,保证同时成功:

操作流程

  1. 应用程序更新数据时,首先写入缓存。
  2. 缓存系统会同步将数据写入数据库,确保数据一致性。
// 伪代码示例
public void updateData(String key, String value) {cache.set(key, value);db.update(key, value); // 缓存系统自动同步数据库
}

优点

  • 数据一致性强,避免了缓存与数据库不一致的问题。

Write-Behind(Write-Back)模式

概念

Write-Behind 模式 也称为 Write-Back 模式。与 Write-Through 模式不同,Write-Behind 模式将数据写入缓存后,不立即同步写入数据库,而是在后台异步批量更新数据库,这个异步写操作是Write-Behind的最大特点。

操作流程

  1. 应用程序更新数据时,首先写入缓存。
  2. 缓存系统会在后台异步批量将数据写入数据库。
// 伪代码示例
public void updateData(String key, String value) {cache.set(key, value);// 数据库更新在后台异步进行asyncUpdateDb(key, value);
}

优点

  • 应用层操作只写缓存,速度非常快。
  • 缓存在异步地写数据库时,会将多个I/O操作合并为一个,减少I/O次数。

缺点

  • 可能导致数据丢失,如果缓存崩溃或数据库写入失败。
  • 复杂度高

总结

缓存设计模式在分布式系统中起着至关重要的作用,它们帮助开发者在不同的业务场景下有效管理缓存,提高系统的性能和响应速度。根据具体的需求和场景,开发者可以选择适合的缓存设计模式,以确保系统的高效和稳定。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com