【分布式缓存】分布式缓存-缓存技术

article/2025/9/21 22:34:46

目录

  1. 从数据的使用说起
  2. 本地缓存
  3. 远程缓存
  4. 缓存策略
  5. 缓存常见问题
  6. 总结回顾与作业实践

1. 从数据的使用说起

我们把数据的使用频率和方式分个类

  • 静态数据:一般不变,类似于字典表

  • 准静态数据:变化频率很低,部门结构设置,全国行政区划数据等

  • 中间状态数据:一些计算的可复用中间数据,变量副本,配置中心的本地副本

  • 热数据:使用频率高

  • 读写比较大:读的频率 >> 写的频率
    这些数据适合于使用缓存的方式访问

    广义上来说,为了加速数据处理,让业务更快访问的临时存放冗余数据,都是缓存 狭义上,现在我们一般在分布式系统里把缓存到内存的数据叫做内存缓存 还有没有其他数据?

缓存无处不在 内存

~ 可以看做是 CPU 和 磁盘之间的缓存
CPU与内存的处理速度也不一致,出现 L1&L2 Cache
网络处理,数据库引擎的各种Buffer,都可以看做是缓存
GUI的Double Buffer(双缓冲),是一个经典的性能优化方法

缓存的本质: 系统各级处理速度不匹配,导致利用空间换时间
缓存是提升系统性能的一个简单有效的办法

缓存加载时机

1、启动全量加载 ==> 全局有效,使用简单
2、懒加载
同步使用加载 ==>
- 先看缓存是否有数据,没有的话从数据库读取
- 读取的数据,先放到内存,然后返回给调用方
延迟异步加载 ==>
- 从缓存获取数据,不管是否为空直接返回 ==>
- 策略1异步)如果为空,则发起一个异步加载的线程,负责加载数据
- 策略2解耦)异步线程负责维护缓存的数据,定期或根据条件触发更新

缓存的有效性与数据同步

在这里插入图片描述

缓存使用不当导致的问题

1、系统预热导致启动慢 试想一下,一个系统启动需要预热半个小时。 导致系统不能做到快速应对故障宕机等问题。
2、系统内存资源耗尽 只加入数据,不能清理旧数据。 旧数据处理不及时,或者不能有效识别无用数据。

2. 本地缓存

最简单的本地缓存

在这里插入图片描述

Hibernate/MyBatis都有Cache

在这里插入图片描述

Guava Cache

在这里插入图片描述

Spring Cache

在这里插入图片描述

3. 远程缓存

考虑一下本地缓存有什么缺点?

1、在多个集群环境同步?当集群规模增大,缓存的读写放大。
2、在JVM中长期占用内存?如果是堆内存,总是会影响GC。
3、缓存数据的调度处理,影响执行业务的线程,抢资源。
== > 集中处理缓存
聪明的你,思考一下:有什么缺点呢?

Redis/Memcached 缓存中间件

REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储 系统。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内 存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的 一款开源高性能,分布式内存对象缓存系统。
Redis 官网:https://redis.io/
Redis 在线测试:http://try.redis.io/
Redis 命令参考:http://doc.redisfans.com/
《Redis 设计与实现》:http://redisbook.com/
Memcached 官网:https://memcached.org/

Hazelcast/Ignite 内存网格

4. 缓存策略

容量

资源有限

  • 缓存数据容量是必须要考虑的问题
  • 思考系统的设计容量、使用容量、峰值,应该是我们做架构设计的一个常识

过期策略

  • 按FIFO或LRU - 按固定时间过期
  • 按业务时间加权:例如3+5x

5. 缓存常见问题

缓存穿透

问题:大量并发查询不存在的KEY,导致都直接将压力透传到数据库。
分析:为什么会多次透传呢?不存在一直为空。 需要注意让缓存能够区分KEY不存在和查询到一个空值。
解决办法:
1、缓存空值的KEY,这样第一次不存在也会被加载会记录,下次拿到有这个KEY。
2、Bloom过滤或RoaringBitmap 判断KEY是否存在。
3、完全以缓存为准,使用 延迟异步加载 的策略2,这样就不会触发更新。

缓存击穿

问题:某个KEY失效的时候,正好有大量并发请求访问这个KEY。
分析:跟前面一个其实很像,属于比较偶然的。
解决办法:
1、KEY的更新操作添加全局互斥锁。
2、完全以缓存为准,使用 延迟异步加载 的策略2,这样就不会触发更新。

缓存雪崩

问题:当某一时刻发生大规模的缓存失效的情况,会有大量的请求进来直接打到数据库,导致数 据库压力过大升值宕机。
分析:一般来说,由于更新策略、或者数据热点、缓存服务宕机等原因,可能会导致缓存数据同 一个时间点大规模不可用,或者都更新。所以,需要我们的更新策略要在时间上合适,数据要均 匀分散,缓存服务器要多台高可用。
解决办法:
1、更新策略在时间上做到比较均匀。
2、使用的热数据尽量分散到不同的机器上。
3、多台机器做主从复制或者多副本,实现高可用。
4、实现熔断限流机制,对系统进行负载能力控制。


http://chatgpt.dhexx.cn/article/hwPuSHwC.shtml

相关文章

分布式缓存详解

“ 今天无聊来撩一下分布式缓存,希望你们喜欢~ 编者荐语: 此篇文章对于分布式缓存讲解的非常透彻! 目录 前言一. 常用的两种缓存技术的服务端特点1. Memcache服务端2. Redis服务端 二. 缓存结构化选型三. Redis构造大索引回源问题四. 一致性问…

分布式缓存的基本原理

随着互联网的发展,用户规模和数据规模越来越大,对系统的性能提出了更高的要求,缓存就是其中一个非常关键的组件,从简单的商品秒杀,到全民投入的双十一,我们都能见到它的身影。 分布式缓存首先也是缓存&…

分布式缓存

本文介绍关于缓存的常用设计模式。以及如何保证缓存的一致性进行分类讨论。 还会介绍关于缓存失效的常见问题,以及针对缓存失效的解决方法。 在高并发的环境下,比如春节抢票大战,一到放票的时间节点,分分钟大量用户以及黄牛的各种…

详解分布式系统的缓存设计

作者:vivo互联网服务器团队-Zhang Peng ​ 一、缓存简介 1.1 什么是缓存 缓存就是数据交换的缓冲区。缓存的本质是一个内存 Hash。缓存是一种利用空间换时间的设计,其目标就是更快、更近:极大的提高。 将数据写入/读取速度更快的存储&#xf…

今天带你了解-分布式缓存(一)

在网站架构的衍化历程中,当网站遇到性能瓶颈时,首先想到的解决方案就是使用缓存。 缓存指将数据存储在较高访问速度的存储介质中,以供系统处理。一方面缓存访问速度快,可以减少数据的访问时间,另一方面如果缓存的数据…

深入浅出分布式系统中的缓存架构

缓存,已经是一个老生常谈的技术了,在高并发读的情况下对于读服务来说可谓是抗流量的银弹。 高并发三大利器:缓存、限流、降级。 今天我们就来谈谈缓存。对于缓存,我的理解是让数据更接近于用户,目的是让用户的访问速…

分布式缓存灵魂十连,你能坚持几个?

点击上方蓝色“方志朋”,选择“设为星标” 回复“666”获取独家整理的学习资料! 目录 前言 目前工作中用到的分布式缓存技术有redis和memcached两种,缓存的目的是为了在高并发系统中有效降低DB的压力,但是在使用的时候可能会因为缓…

Webform 常用控件

Webform 常用控件 一,简单控件 1,Lable——标签:在网页中呈现出来的时候会变成span标签 属性:Text——标签上的文字 BackColor,ForeColor——背景色,前景色 Font——字体 Bold-加粗 Italic-倾斜 Under…

Web窗体(WebForm)

一.简介 0. 页面的生命周期。 1. WebForm后台页面类继承于Page类,Page类实现了IHttpHandler接口。 2. 前台页面类继承于后台页面类。 3. 先调用PageLoad方法,再调用Render方法生成html代码。 二. 加密安全 互联网没有绝对的安全,登…

ASP.NET Web Form学习

ASP.NET Web Form学习 0.aspx与html 它如何工作? 从根本上讲,ASP.NET 页面与 HTML 完全相同。 HTML 页面的扩展名是 .htm 或 .html。假如浏览器从服务器请求某张 HTML 页面,服务器不进行任何修改,就会把该页面发往浏览器。 A…

forms.Form和forms.ModelForm

forms.ModelForm是forms.Form的升级版 forms.Form验证规则 2.1 forms.py 2.2 view.py 把我们写的UserResetForm导入到view.py 2.3 模板 forms.ModelForm验证规则 3.1 models.py 3.2 forms.py就用上面模型类里面的验证规则 3.3 view.py 3.4 模板看你实际的情况 forms.…

WebForm与MVC混用

在现有的WebForm项目中加入MVC,可以吗? 西蒙说,可以。 怎么加呢? 我的开发环境是:WIN7 IIS7.5 VS2012 一、WebForm项目添加引用: 我都是选了最高的版本。 二、将MVC项目的部分文件拷贝到WEBFORM项目 …

ASP.NET WebForm+Vue.js

QQ:285679784 欢迎加入博主CSDN资源QQ群799473954(附加信息:CSDN博客)一起学习 ! 参考原文:https://blog.csdn.net/myppbird/article/details/85598154 Vue.js教程:http://www.runoob.com/vue2/vue-tutorial.html Vue.js Ajax…

解析ASP.NET WebForm和Mvc开发的区别

因为以前主要是做WebFrom开发,对MVC开发并没有太深入的了解。自从来到创新工场的新团队后,用的技术都是自己以前没有接触过的,比如:MVC 和EF还有就是WCF,压力一直很大。在很多问题都是不清楚的情况下,问周围的人,别人也只是给自己讲一个大概。而且前两天因为问了一个比较…

C#-WebForm-WebForm开发基础

1、C/S  客户端应用程序 WinForm  WPF  平级 数据是存放在其他的电脑上或服务器上 需要从服务器上下载相应的数据,在本地电脑上的客户端里进行加工 数据的加工是在用户的电脑上执行的,会对用户的电脑配置有所要求 2、B/S  网页端应用程序 ASP.NE…

ASP.NET--WebForm框架

WebForm框架 WebForm是微软推出的一款为了吸引更多的其他开发者能够快速入门到.NET技术中的一个框架,让开发人员感觉使用.NET技术进行BS开发和使用.NET技术进行CS开发一样简单快速。 微软的想法:以后程序员开发网站项目不需要先学习HTML+CSS就能够直接入门BS,因此将HTML标…

ASP.NET(二)--WebForm框架

WebForm框架 WebForm框架WebForm介绍WebForm窗体框架事件驱动开发简单应用ASP.NET程序开发过程网页生成过程的分析案例 WebForm框架 WebForm是微软推出的一款为了吸引更多的其他开发者能够快速入门到.NET技术中的一个框架,让开发人员感觉使用.NET技术进行BS开发和使…

winform webform 简单高效的UI界面框架

一、winform的界面框架设计( james_lx) 一直以来,我都在寻找WINFORM程序,简单高效的UI界面框架,终于,我领悟了。在此分享给和我一样使用C#而苦于界面设计的人。我的发现中,并没有加入什么其它的…

WebForm 基础学习

C/S 客户端应用程序(Client/Server) 客户端——服务器端 两种技术 WinForm WPF -- WPF开发于WinForm之后, --GUI 图形用户界面(采用图形方式显示的计…

c#webform制作网页应用的思路login登录

一方面是有实际工作需要,一方面是想学点东西,制作一个webform的信息科工单登记查询网页,虽然目前还是很多bug,虽然代码基本都是复制的,但是慢慢的搭建成型。自己记录下思路,纯小白,可以说基本都…