热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java缓存的知识点有哪些

今天小编给大家分享一下Java缓存的知识点有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给

今天小编给大家分享一下Java缓存的知识点有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

一、缓存能用来做什么?

大多数人对于缓存的理解就是,当我们打开一个页面或是一个APP,当它们打开的速度很慢的时候,都会想到引入缓存,这样打开就会更快。

从技术这一方面来说,缓存之所以能够提高访问速度,是因为缓存是基于内存去建立的。而内存的读写速度相对于硬盘是快很多的,所以用内存代替硬盘作为读写的介质,自然就会大大提升了访问数据的速度。

二、运用方式:预读取和延迟写

除了上述的过程之外,缓存另外两个重要的运用方式:预读取和延迟写。

2.1 预读取

从字面意思来看就是预先读取,实际意义也确实如此。预读取就是提前把将要读取的数据载入,也就是在系统中把硬盘中的一部分数据提前加载到内存中,然后对外提供服务。

那么这么做的意义是什么?

因为有些系统一旦启动就会有数以万计的请求涌进来,假设让这些请求直接打到数据库上,非常大的可能就是会让数据库的压力剧增,数据库就会被挂掉,而导致无法正常响应。

预读取就是为了解决这样的问题。

2.2 延迟写

如果说预读取就是在数据出口加一道缓冲区,那么延迟写则是在数据入口加一道缓冲区。

由于数据库的写入速度要比读取速度慢,因此在写入的时候就需要一系列的保证数据正确性的机制。所以,要想提升写入速度,或是分库分表,或是通过缓存加一道缓冲,再一次性批量写入磁盘。引入分库分表的复杂度远大于引入缓存,一般都是优先考虑引入缓存的方案。

这种缓存方案就是延迟写,它是预先将准备写入磁盘或数据库的数据,暂时写入到内存,然后返回成功,再定时分批将内存中的数据写入到磁盘。

三、哪些可以加缓存?

在缓存之前需要考虑我们要缓存的是什么?符合什么样特点的数据才需要加缓存?因为缓存算是一个额外的成本投入,所以加了缓存要体现它的价值。

先引入衡量数据的两个标准:

热点数据:被高频访问,如每秒几十次以上。

静态数据:很少变动,读取要大于写入。

每个设立点都会挡掉一些流量,最终会形成以下的漏斗形效果,以此可以保护后面的系统以及最后的数据库。

这些设立点就像是红绿灯,如果没有红绿灯就容易发生事故,或是造成交通瘫痪等等。缓存设立点就是防止请求大量涌入,导致无法正常访问。

四、缓存类别

上文已经罗列了缓存的几种类别,接下我们将会对这些缓存类别进行介绍。

4.1 浏览器缓存

浏览器是离用户最近的,可以用来作为缓存的地方,而且借助的是用户的资源,性价比是几种里面最好的,可以让用户分担一些压力。

进入浏览器的开发者工具,有 from cachefrom memory cache from disk cache 的时候,说明数据已经被缓存在用户的终端设备上,在没网的时候也可能访问到一部分的内容就是这个原因。

浏览器会帮助我们完成这个过程,一般适用于图片、 js 和 css等这些资源的缓存。

浏览器缓存的劣势就是我们对它的掌控力比较差,没有发起新的请求的情况下,是无法主动去更新数据。

4.2 CDN缓存

提供CDN服务的服务商,在全国乃至全世界部署了大量的服务节点。我们就可以将数据分发到遍布各地服务器上作为缓存,当用户访问时可以读取就近的服务器上的缓存数据。这样就可以分摊压力和提升了加速效果。

要注意的是,由于节点众多,更新缓存数据会比较慢,一般至少是分钟级别,所以该缓存适用于不经常变动的静态数据。

4.3 网关(代理)缓存

我们经常会在源站前面加上一层网管,目的是为了做一些安全机制或者作为同一分流策略的入口。

在这里设立一个缓存,能够拦下来请求,其背后的源站也是收益很大的,减少了大量的 CPU 运算。常用的网关缓存有 VarnishSquidNginx

4.4 进程内缓存

一个请求能够到这里来,说明是“业务相关”,需要经过业务逻辑的运算。从这里开始,对缓存的引入成本相对于前三者而言,要大大的增加了,这是因为对缓存与数据库之间的‘数据一致性’要求更高了。

4.5 进程外缓存

这里是大多数程序员所熟悉的地方,就是 Redis Memcached 之类,或者也可以自己单独写一个程序来转存放缓存数据,提供给其他程序远程调用。

4.6 数据库缓存

数据库缓存是数据库的内部机制,一般都会给出设置缓存空间大小的配置来让你进行干预。

最后,磁盘本身也是有缓存的,所以能够让数据平稳地写入到磁盘,可谓是经历了一波三折。

五、缓存可能出现的问题

既然缓存作用如此大,那是不是就越多越好呢?只要速度慢就加缓存来解决?其实不然,缓存既有好的一面,也会有负面的一面。

5.1 缓存雪崩

问题:大量请求并发进入缓存时,可能由于某些原因缓冲效果未能正常执行,即便是在很短的时间内,就会导致请求全部转入数据库,从而造成数据库压力过重。

解决:可以通过“加锁排队”或者“缓存时间增加随机值”来解决此类问题。

5.2 缓存穿透

和缓存雪崩很相似,区别在于穿透会持续更长的时间。这是因为每次的 cache miss 后依然无法从数据源把数据加载到缓存,导致持续产生cache miss

可以通过“布隆过滤器”或者“缓存空对象”来解决此类问题。

5.3 缓存并发

一个缓存 key 下的数据被同时 set,怎么保证业务的准确性?如果进程内、进程外、数据库三者的缓存一起用的情况下?

使用“先DB再缓存”的方式,并且缓存操作用 delete 而不是 set。

5.4 缓存无底洞

虽然分布式缓存是可以无线横向扩展的,但是,集群下的节点也不是越多越好。缓存也是符合“边际效用递减”规律的。

5.5 缓存淘汰

内存的容量是有限的,如果请求的数据量是大量的,那么根据具体情况进行一定的淘汰策略是必不可少的。例如:LRULFUFIFO等等。

以上就是“Java缓存的知识点有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程笔记行业资讯频道。


推荐阅读
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 开发笔记:mysql 存储引擎介绍
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了mysql存储引擎介绍相关的知识,希望对你有一定的参考价值。一&nbs ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了python面试题——数据库和缓存(46题)相关的知识,希望对你有一定的参考价值。1、列举常见的关系型数据库和非关系型都有那些? ... [详细]
  • 数据库基本介绍
    1、数据库基本知识概念:数据库:database(DB),是一种存储数据的仓库数据库是根据数据结构组织、存储和 ... [详细]
  • 开发笔记:Memcached高性能内存对象缓存系统
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Memcached高性能内存对象缓存系统相关的知识,希望对你有一定的参考价值。一、Memcached概述 ... [详细]
  • 相对于内存来说,磁盘的容量是非常大的,所以Linux内核实现了一个叫 内存交换 的功能--把某些进程的一些暂时用不到的内存页保存到磁盘中,然后把物理内存页分配给更紧急的用户使用,当 ... [详细]
  • Redis学习笔记(二) .NET中使用Redis
    Redis是一个用的比较广泛的KeyValue的内存数据库,新浪微博、Github、StackOverflow等大型应用中都用其作为缓存,Redis的官网为http:redis.io。最 ... [详细]
  • 首先讲一下Memcache和Memcached。为什么会有Memcache和Memcached两种名称呢?其实Memcache是这个项目的名称,而Memcached是它服务器端的主 ... [详细]
  • linux 查看redis数据库大小,【数据库】linux查看redis是否启动
    redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、 ... [详细]
  • 大二修完java的基础入门,发现自己对这门语言有兴趣,想深入自学,但是一方面不知道怎么深入,另一方面想了解我毕业后能找哪方面的工作。我不想做单纯的程序员,不想每天都是敲代码。所以请过来人帮忙解疑。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 索引什么是索引索引是用来提高数据库性能的常用工具,索引就像数据的目录一样,通过索引可以快速找到需要的内容。索引的原理,加快查询索引是建立了针对数据内容的排序结果的指针,根据 ... [详细]
author-avatar
PearlLisa_Shanghai_901
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有