关于软件设计中缓存的那些事儿

开发
缓存就是硬件或者软件直接存取数据,而不是从原始源(数据库,计算等)存取数据,它会加快数据的读取。

​缓存可以说是最简单也最复杂的一个概念,用好它你可以让你的应用飞起,不会用它,即使再高的配置,你的应用也难以发挥最佳效果。

什么是缓存

缓存就是硬件或者软件直接存取数据,而不是从原始源(数据库,计算等)存取数据,它会加快数据的读取。

内存缓存是我们经常使用的缓存技术,通过将常用的数据保存到内存中,我们就可以避免从数据库中读取数据,这会大大提升应用的加载速度,提升用户体验。

什么时候使用缓存

  • 当我们需要请求外部资源的时候,比如第三方 api,我们希望缓存请求的结果
  • 当请求的数据发生变化的时候,我们可以缓存返回结果
  • 当应用需要频繁地请求同一个资源的时候
  • 当应用需要运行一些复杂的计算机的时候
  • 当应用查询耗时的时候

缓存的好处

  • 提升应用的性能
  • 减少数据库的开销
  • 增加并发

缓存的类型

  • 应用缓存
  • 数据库缓存
  • DNS 缓存
  • 客户端缓存
  • CDN 缓存
  • API 网关缓存

分布式缓存

分布式缓存由一个服务端实现管理和控制,有多个客户端节点存储数据,可以进一步提高数据的读取速率。那么我们要读取某个数据的时候,应该选择哪个节点呢?如果挨个节点找,那效率就太低了。因此需要根据一致性哈希算法确定数据的存储和读取节点。以数据 D,节点总个数 N 为基础,通过一致性哈希算法计算出数据 D 对应的哈希值(相当于门牌号),根据这个哈希值就可以找到对应的节点了。一致哈希算法的好处在于节点个数发生变化(减少或增加)时无需重新计算哈希值,保证数据储存或读取时可以正确、快速地找到对应的节点。

关于软件设计中缓存的那些事儿

分布式缓存能够高性能地读取数据、能够动态地扩展缓存节点、能够自动发现和切换故障节点、能够自动均衡数据分区,而且能够为使用者提供图形化的管理界面,部署和维护都十分方便。

缓存策略

(1) Cache-Aside

先读取缓存,如果缓存失效,那么读取数据库获取数据,然后将数据设置到缓存里面。

关于软件设计中缓存的那些事儿

(2) Read Through

应用只从缓存取数据,如果没有取到,那么缓存会从数据库获取数据,然后设置缓存,最后应用从缓存继续读取数据。

关于软件设计中缓存的那些事儿

(3) Write Through

应用保存数据的时候,都是先保存到缓存里面,缓存会将数据再保存到数据库,应用不直接和数据库打交道,只是保存数据到缓存。

关于软件设计中缓存的那些事儿

(44) Write Back or Write Behind

应用程序将数据写入缓存,然后会发送确认返回给应用,然后缓存写入数据库。

关于软件设计中缓存的那些事儿

(5) Write Around

应用数据直接写入数据库,从而读取数据从缓存中获取。

关于软件设计中缓存的那些事儿

总结

曾经有个伟人说过,所有我们目前解决不了的计算机问题,都可以通过添加一个中间层来解决,而缓存就是一个中间层,有了这个中间层,我们的应用性能得到了极大提升,但缓存不是万能的,它也有它的弊端,只有合理的使用它,我们才能发挥它的最大价值。

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2017-04-12 12:31:14

缓存Web浏览器

2021-03-18 09:01:53

软件开发软件选型

2022-08-04 10:18:32

栈迁移​寄存器内存

2022-06-02 08:42:15

Redis数据库

2012-03-12 13:55:22

交互设计

2017-03-31 09:24:53

AR现实游戏

2020-09-22 14:29:24

智能

2012-11-28 10:54:37

禁止追踪DNT

2013-06-13 11:29:14

分布式分布式缓存

2014-04-30 12:18:07

软件设计

2022-05-25 08:27:30

tmux软件

2011-09-16 10:05:48

Android应用Nightclub S夜店

2012-07-19 15:30:00

Linux

2012-04-27 10:06:15

2014-03-12 09:23:06

DevOps团队合作

2020-05-07 10:05:52

Python数据安全

2020-05-06 16:47:08

线程安全Python数据安全

2018-03-01 15:34:20

数据科学面试招聘

2022-06-04 11:12:12

RPCREST协议

2011-01-21 14:33:30

软件测试
点赞
收藏

51CTO技术栈公众号