1、为什么要使用缓存

由于服务器、数据库、网络等资源有限,无法支撑越来越多的请求与计算量,所以将一部分数据放在缓存中,以此减小薄弱环节的计算量和请求流程。

网站中缓存的应用场景:1:可以缓存整个页面的html,提高访问响应能力;2:针对局部页面元素进行缓存;3:对复杂数据的结果进行缓存,例如一个查询需要结合多个数据集,然后根据这些数据集进行相应的运算,即使每个子集查询有缓存,但还是需要额外的运算,这种情况可以考虑缓存计算后的结果。4:对耗时的查询进行缓存,例如产品列表页的查询。5:和上下文相关的用户数据,例如用户从订单埴写页进入到订单成功页,或者是从产品列表页点击详细产品进行预订时的订单填写页,此时这两个页面之间都需要传递大量的相关数值,我们可以把所有的数值封装在一个类中,然后通过缓存进行通信。

2、缓存的属性

缓存有以下几个重要属性:

Ø命中率:命中率指请求次数与正确返回结果次数的比例,越高越好。

影响缓存命中率的因素:1:数据时实性,每个业务系统都对自己的数据有相应的要求,有些数据的实时性非常强,像每日的股票信息,这种情况如果设置了缓存,缓存的命中率会特别低。2:缓存粒度问题,一般来说是缓存的跨度太大,即此时的KEY值包含的条件太多,会出现缓存命中率特别低的情况。

提高缓存命中率的方法:1:增大存储介质的容量;2:对非常热点的数据进行捕捉,可以采用实时更新缓存的方式来平衡缓存与实时性的问题,例如可以单独开启一个后台服务来定时做更新缓存的工作。3:调整缓存KEY值的算法,尽量保证缓存KEY的细粒度,KEY-VALUE就是很好的细粒度例子。4:根据业务调整缓存的过期策略。

Ø最大元素:缓存中可以存放的元素的最大数量。

Ø清空策略。清空策略通常有以下几种:

nFIFO:最先进入缓存得数据在缓存空间不够情况下(超出最大元素限制时)会被首先清理出去

nLFU:一直以来最少被使用的元素会被被清理掉。这就要求缓存的元素有一个hit属性,在缓存空间不够得情况下,hit值最小的将会被清出缓存。

nLRU:最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。

Ø预热策略

全量预热:一开始就加载全部数据,适用于不怎么变化的数据,比如地区数据

增量预热:查询不到时,从数据源取出放入缓存内。

3、需要注意的问题

3.1缓存穿透

什么是缓存穿透?

一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。如果key对应的value是一定不存在的,并且对该key并发请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。

如何避免?

1:对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert了之后清理缓存。

2:对一定不存在的key进行过滤。可以把所有的可能存在的key放到一个大的Bitmap中,查询时通过该bitmap过滤。【感觉应该用的不多吧】

缓存雪崩

3.2缓存雪崩

当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB)带来很大压力。

如何避免?

1:在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。

2:不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。

3:做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期(此点为补充)

3.3分布式缓存系统

分布式缓存系统面临的问题

3.3.1缓存一致性问题

1:缓存系统与底层数据的一致性。这点在底层系统是“可读可写”时,写得尤为重要

2:有继承关系的缓存之间的一致性。为了尽量提高缓存命中率,缓存也是分层:全局缓存,二级缓存。他们是存在继承关系的。全局缓存可以有二级缓存来组成。

3:多个缓存副本之间的一致性。为了保证系统的高可用性,缓存系统背后往往会接两套存储系统(如memcache,redis等)

3.3.2缓存穿透和缓存雪崩

上面有讲述。

3.3.3缓存数据的淘汰

缓存淘汰的策略有两种:(1)定时去清理过期的缓存。(2)当有用户请求过来时,再判断这个请求所用到的缓存是否过期,过期的话就去底层系统得到新数据并更新缓存。

两者各有优劣,第一种的缺点是维护大量缓存的key是比较麻烦的,第二种的缺点就是每次用户请求过来都要判断缓存失效,逻辑相对比较复杂,具体用哪种方案,大家可以根据自己的应用场景来权衡。

1.预估失效时间2.版本号(必须单调递增,时间戳是最好的选择)3.提供手动清理缓存的接口。

java 全局缓存_java本地缓存相关推荐

  1. MyBatis 缓存详解-一级缓存(本地缓存)介绍

    一级缓存也叫本地缓存,MyBatis 的一级缓存是在会话(SqlSession)层面进行缓存的.MyBatis 的一级缓存是默认开启的,不需要任何的配置. 首先我们必须去弄清楚一个问题,在MyBati ...

  2. 分布式缓存与本地缓存的区别

    分布式缓存与本地缓存的区别 转载自:https://ost.51cto.com/posts/1002 缓存的概念: 在服务端中,缓存主要是指将数据库的数据加载到内存中,之后对该数据的访问都在内存中完成 ...

  3. 缓存基础----本地缓存、分布式缓存以及多级缓存

    目录 一.缓存的概念(什么是缓存) 二.为什么要用缓存(为什么要用redis作为缓存) 三.缓存的分类有哪些 1.本地缓存 2.分布式缓存 3.多级缓存 像MySql等传统的关系型数据库已经不能适用于 ...

  4. 同时存多个变量缓存 微信小程序_微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解...

    微信小程序 缓存 关于本地缓存 1.wx.setStorage(wx.setStorageSync).wx.getStorage(wx.getStorageSync).wx.clearStorage( ...

  5. 客户端缓存(http缓存和本地缓存)

    原文链接:https://juejin.im/post/6844904194680291342 http缓存 http缓存用于客户端储存一些不经常变化的静态文件(图片.css.js等).分为强制缓存和 ...

  6. 服务端分布式缓存与本地缓存

    缓存技术是保障系统性能的基础技术.核心技术. 缓存发挥的作用 ① 最大程度上避免对数据库的并发查询,从而降低因为数据库资源不足导致的系统故障. ② 提升系统的响应速度,保证用户体验 总之缓存使系统稳定 ...

  7. 分布式缓存和本地缓存的区别

    分布式缓存和本地缓存的区别 redis/memcached**分布式缓存**和map/guava**本地缓存**的区别 什么是缓存一致性? redis/memcached分布式缓存和map/guava ...

  8. 前端缓存 (http缓存 与 本地缓存)

    前端缓存主要是分为http缓存和本地缓存 http 缓存 强缓存:Expires(过期时间)/ Cache-Control(no-cache)(优先级高) 协商缓存:Last-Modified/Eta ...

  9. 从架构上来理解redis缓存和本地缓存的关系

    redis缓存和本地缓存混用是一种非常实用的实践方式. 优点:极大地降低了redis的读写频率,特别是处理特别耗时的业务逻辑(大于1分钟). 缺点:会产生一定的延时,这个延时具体的影响将会根据业务的差 ...

最新文章

  1. CentOS 6.x中目录结构及用途
  2. 周志华、宋继强谈如何培养高端AI人才,以及深度学习的局限性和未来
  3. 量子计算机个人化时间,科学家发现量子算法可以停止时间
  4. ArcGIS Server9.3+ArcGIS Desktop9.3破解安装(for microsoft .net)
  5. Linux 文件系统 EXT4 的前世今生
  6. 分布式数据集训营,从入门到精通,从理论到实践,你不可错过的精品课程!...
  7. 【华为云实战开发】1.传统Java项目怎么能变得高大上?
  8. SpringSecurity Exceptions
  9. 百度播放器插件html,百度影音调用方法:网页控件使用教程说明
  10. 使用Simian检查Java项目中冗余代码
  11. 【python】if __name__==‘__mian__‘ 如何理解,原理及作用
  12. 为什么我坚定看好分布式存储
  13. unity 检测电脑摄像头_unity3d调用手机或电脑摄像头
  14. 怎么隐藏鼠标箭头_立刻上手,无鼠标高效操作excel指南(一)
  15. 问题:you-get能下载百度网盘的资源吗?
  16. C# WebService 远程服务器返回错误:(500)内部服务器错误
  17. C语言小案例_小程序学习(三)
  18. linux命令dstat,dstat命令
  19. 大学的多级放大电路,你交给老师了吗?
  20. 技术至简-5:动画显示复指数信号的形状与物理意义

热门文章

  1. php 商品价格区间表,ThinkPHP框架,按分类,计算商品价格区间,来完成价格搜索...
  2. APPLE开发者客服电话
  3. BZOJ 2818: Gcd区间内最大公约数 为素数的对数(欧拉函数的应用)
  4. error: 'FILE' undeclared (first use in this function)
  5. 企业开源治理案例及开源项目列表
  6. dedecms 织梦发布文章改成默认待审核状态
  7. 蓝宝石超频软件测试,RX 480显卡超频测试:超频软件好评,风冷1.35GHz
  8. react-prev
  9. S32K144 PWM实践
  10. 掌握这些图片无损压缩工具,轻松搞定图片压缩