缓存---缓存问题

5.缓存问题

缓存穿透

??指的是对某个一定不存在的数据进行请求,该请求将会穿透缓存到达数据库

解决方案:

  • 对这些不存在的数据缓存一个空数据
  • 对这类请求进行过滤

缓存雪崩

??指的是由于数据没有加载到缓存中,或者缓存数据在同一时间出现大面积的失效(过期),又或者是缓存服务器崩溃,导致大量的请求都到达数据库

??在有缓存的系统中,系统非常的依赖缓存,缓存分担了很大一部分的数据请求,当发生缓存雪崩时,数据库因为无法处理这么多的请求,导致数据库崩溃

解决方案:

  • 为了防止缓存在同一时间内大量的过期导致缓存雪崩,可以通过观察用户行为,合理的设置缓存过期时间来实现。
  • 为了防止缓存服务器发生宕机而导致的缓存雪崩,我们可以采用分布式缓存,分布式缓存每个节点只缓存部分数据,当某个节点宕机,也可以保证其他节点的数据可以使用
  • 也可以进行缓存预热,避免在系统刚启动不久由于还未将大量数据进行缓存而导致缓存雪崩。

缓存一致性

??缓存一致性要求数据更新的同时缓存数据也能够实时更新

解决方案:

  • 在数据更新的同时去更新缓存数据。
  • 在读缓存之前判断缓存是不是最新的,如果不是最新的,那么先进行更新。

??要保证缓存一致性需要付出很大的代价,缓存数据最好是对那些对一致性要求不高的数据进行缓存,允许缓存数据存在一些脏数据。

缓存无底洞现象

??指的是为了满足业务要求添加了大量的缓存节点,但是性能不但没有好转反而下降的现象。

??产生原因:缓存系统通常采用hash函数将key映射到对应的缓存节点随着缓存节点数目的增加,键值分布到更多的节点上,导致客户端一次批量操作会涉及到多次网络操作,这意味着批量操作的耗时会随着节点数目的增加而不断的增大。此外,网络连接数变多,对节点的性能也有一定的影响。

解决方案:

  • 优化批量数据操作命令
  • 减少网络通信次数
  • 降低接入成本,使用长连接、连接池,NIO等。

原文地址:https://www.cnblogs.com/yjxyy/p/11135376.html

时间: 2024-07-31 11:03:45

缓存---缓存问题的相关文章

MemoryCache缓存 ---缓存时效

MemoryCache缓存 ---缓存时效测试 var cachePool = new MyCachePool(); //Thread.Sleep(1000); var value = cachePool.GetFileValue(); /// <summary> /// MemoryCache缓存 /// </summary> public class MyCachePool { ObjectCache cache = MemoryCache.Default; const str

HTTP缓存缓存机制

http协议无状态,所以缓存设定从两方面考虑.客户端浏览器和服务器端. 浏览器端实现过期机制. 服务器端实现验证机制. 缓存机制. 为了减轻服务器负担,也减少网络传输数量.http1.0定义了Expires. http1.1 进一步定义了cache-control字段. Expires: 返回一个date 类型时间戳,指定该文件被浏览器缓存到什么时间后过期.这个字段貌似在F5刷新时候仍会重新发送http请求. Cache-Control:该字段定义了很多子项,  本人只关心浏览器端返回字段,如m

EhCache 分布式缓存/缓存集群

开发环境: System:Windows JavaEE Server:tomcat5.0.2.8.tomcat6 JavaSDK: jdk6+ IDE:eclipse.MyEclipse 6.6 开发依赖库: JDK6. JavaEE5.ehcache-core-2.5.2.jar Email:[email protected] Blog:http://blog.csdn.net/IBM_hoojo http://hoojo.cnblogs.com/ http://hoojo.blogjava.

EhCache RMI 分布式缓存/缓存集群

EhCache 系统简介 EhCache 是一个纯 Java 的进程内缓存框架,具有快速.精干等特点. EhCache 的主要特性有: 快速.精干 简单: 多种缓存策略: 缓存数据有两级:内存和磁盘,因此无需担心容量问题: 缓存数据会在虚拟机重启的过程中写入磁盘: 可以通过 RMI.可插入 API 等方式进行分布式缓存: 具有缓存和缓存管理器的侦听接口: 支持多缓存管理器实例,以及一个实例的多个缓存区域: 提供 Hibernate 的缓存实现: EhCache集群解决的问题:  由 于 EhCa

应用服务器性能优化之分布式缓存-缓存基础

应用服务器就是处理网站应用的服务器,网站的业务代码都部署在这里,是网站开发最复杂,变化最多同时也是最重要.最基础的地方.可以说没有应用服务器就没有网站. 在我们介绍分布式缓存之前,因为考虑到很多览客和当初的我一样,对于什么是应用服务器,分布式缓存是什么样的概念都不清楚,所以我们就一步一步来,从基本的概念说起. 1.缓存基本原理 所谓的缓存是指将数据存储在相对访问速度较高的介质中,以供系统处理.一方面缓存访问速度快,可以减少数据的访问时间,另一方面如果缓存的数据是经过计算得到的,那么缓存的数据就无

redis中的缓存-缓存雪崩和缓存穿透

缓存雪崩 缓存雪崩是由于原有缓存失效(过期),新缓存未到期间.所有请求都去查询数据库,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机.从而形成一系列连锁反应,造成整个系统崩溃. 1. 碰到这种情况,一般并发量不是特别多的时候,使用最多的解决方案是加锁排队. public object GetProductListNew() { const int cacheTime = 30; const string cacheKey = "product_list"; const st

缓存---缓存位置

3.缓存位置 浏览器 ??当HTTP响应允许进行缓存时,浏览器会将HTML,CSS,JAVAScript,图片等静态资源进行缓存. ISP ??网络服务提供商(ISP)是网络访问的第一跳,通过将数据缓存在ISP中能够大大提高用户的访问速度. 反向代理 ??反向代理位于服务器之前,请求与响应都要经过反向代理.通过将数据缓存在反向代理,在用户请求反向代理时就可以直接使用缓存进行响应. 本地缓存 ??使用Guava Cache将数据缓存在服务器本地内存中,服务器代码可以直接读取本地内存中的缓存,速度非

缓存总结

缓存分为页面缓存,数据缓存,数据源缓存,页面缓存主要指的是webform页面中的outputcache标记以及他所带的一些属性,通过设置实现页面信息的缓存,数据源缓存类似于dataset这样的数据集以及微软封装好的那些缓存的插件可以实现,数据源缓存是对cache这个类进行的一些操作,这样的方式较为灵活,可以实现局部数据的缓存 缓存是存储于服务器上的可以供任何人访问的信息,这一点和cookie不同,cookie只能存在于个人客户端. 缓存分为普通缓存,文件缓存依赖和数据库缓存依赖. 普通缓存如:c

Java 缓存技术

以下仅是对map对方式讨论.没有对点阵图阵讨论.作缓存要做以下2点:  1:清理及更新缓存时机的处理: . 虚拟机内存不足,清理缓存 .. 缓存时间超时,或访问次数超出, 启动线程更新 2:类和方法的反射 (线程嵌套调用) reflect.invoke的使用. JAVA缓存有两种: 一.文件缓存,是指把数据存储在磁盘上,可以XML格式,也可以序列化文件DAT格式还是其它文件格式. 二.内存缓存,也就是实现一个类中静态Map,对这个Map进行常规的增删查. 代码如下:内存中的缓存 package