专栏首页须臾之余深入分布式缓存从原理到实战之无处不在的缓存 顶

深入分布式缓存从原理到实战之无处不在的缓存 顶

缓存分类

一.按照所处位置来分:

  • 客户端缓存
  • 服务端缓存
  • 网络中缓存

二.按照规模和部署方式来分:

  • 单体缓存
  • 缓存集群
  • 分布式缓存

可见,在软件系统中缓存几乎无处不在!

为什么去使用缓存

一:提高用户体验

二:提升系统性能(响应时间、延迟时间、吞吐量、并发用户数和资源利用率等..)这几个方面。

通过缓存机制来减少数据库连接资源的竞争和对数据库读的压力,那么就可以选择采用静态页面缓存,这样程序上可以不做修改,就能很好的减少对web服务器的压力以及减少对数据库连接资源的竞争。

缓存介绍

一:客户端缓存:对于互联网通常来说的是BS架构应用,可以分为页面缓存和浏览器缓存;对于移动互联网来说,指的是APP自身所使用的缓存。

页面缓存、浏览器缓存、APP上的缓存

二:网络中的缓存:位于客户端和服务端之间,对重复的请求返回缓存中的数据资源。同时接受服务端的请求,更新缓存中的内容。

web代理缓存(Squid):支持建立复杂的缓存层级结构,拥有详细的日志,高性能缓存,支持多种插件。 边缘缓存(nginx):向用户提供静态内容。CDN

三:服务端缓存:整个缓存的重头戏

数据库缓存:Mysql使用了查询缓冲机制,将select语句和查询结果放在缓冲区中,以后对同样的SQL语句,将直接从缓冲区中读取结果,节省查询时间,提高SQL查询的效率。 平台级缓存:EHCache,配置简单,结构清晰,功能强大 应用级缓存:通过代码实现缓存机制,Redis

多级缓存流程

  • 首先用户的请求被负载均衡服务分发到Nginx上,此处常用的负载均衡算法是轮询或者一致性哈希,轮询可以使服务器的请求更加均匀,而一致性哈希可以提升Nginx应用的缓存命中率。
  • 接着,Nginx应用服务器读取本地缓存,实现本地缓存的方式可以是Lua脚本,如果本地缓存命中,则直接返回。Nginx本地缓存在对热点数据的反复读取问题上非常有效。
  • 如果Nginx本地缓存没有命中,就会进一步读取响应的分布式缓存Redis,如果,命中,则返回数据,并写回到Nginx应用服务器本地缓存中。
  • 如果Redis分布式缓存还没有命中的话,则会回溯到tomcat集群,可以使用轮询或者一致性哈希算法,如果缓存命中则直接返回数据,并会同步写到主Redis集群,然后再同步到从Redis集群。
  • 当所有缓存都没有命中,就会去查询数据库并返回,当然数据库也是有缓存的。

整体来看,这是一个使用了多级缓存的系统。Nginx应用服务器的本地缓存解决了热点数据的缓存问题。Redis分布式缓存集群减少了访问回溯率,Tomcat应用集群使用的平台级缓存防止了缓存失效、缓存雪崩之后的冲击,数据库缓存提升数据库查询时的效率。

参考书籍:深入分布式缓存从原理到实战

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Mybatis深入源码分析之基于装饰模式纯手写一级,二级,三级缓存

    须臾之余
  • Spring5.0源码深度解析之SpringBean声明事务底层实现原理

    将InfrastructureAdvisorAutoProxyCreator注入到IOC容器中:

    须臾之余
  • 并发编程原理剖析——多线程及其原理分析 顶

    客户端阻塞:如果客户端只有一个线程,这个线程发起读取文件的额操作必须等待IO流返回,客户端才能做其它事情。

    须臾之余
  • 如何正确使用缓存技术

    缓存技术是用来提升程序运行性能的常见手段,君不见, 阿里巴巴、新浪微博、美团网等互联网龙头企业都是用缓存技术来提升自己家网站的性能。然而,任何事物都有两面性, ...

    用户1608022
  • 缓存穿透、缓存击穿、缓存雪崩看这篇就够了,文末还送福利哦!

    当我们进行架构设计时,缓存是提高高性能的最重要也是最常用的组件之一。数据库的瓶颈在于磁盘I/O,虽然现如今关系数据库的部分应用场景采用了NoSQL作为替代,但依...

    码农神说
  • 前端缓存技术概述

    学过Java,会知道在Integer的自动装箱中 [-128, 127] 这个范围中的转换会有些特殊的表现,稍加研究源码,会知道这是因为Integer中的缓存...

    贪婪的君子
  • Mybatis缓存相关的知识

    小节:一级缓存默认是开启的,只在一次SqlSession中有效,也就是拿到连接到关闭连接这个区间段!

    乐心湖
  • 互联网性能优化利器-缓存

    缓存是介于数据访问者和数据源之间的一种高速存储,当数据需要多次读取时,用于加快读取的速度。

    kk大数据
  • 猿思考系列8——缓存的套路也就这些

    在之前的两个章节中,我们主要讨论了数据库的两个比较重要的知识——事务和索引。猿人工厂君也知道,内容对于新手而言,理解起来还是比较很吃力的,文中提到的原理和内容,...

    山旮旯的胖子
  • MyBatis 的缓存机制

    时间静止不是简史

扫码关注云+社区

领取腾讯云代金券