Java缓存介绍

article/2025/9/1 20:26:44

67b917c574d74675b39dd44baf3d53af.jpg一、缓存

 

 

1、什么是缓存?

 

      缓存是硬件,是CPU中的组件,CPU存取数据的速度非常的快,一秒钟能够存取、处理十亿条指令和数据(术语:CPU主频1G),而内存就慢很多,快的内存能够达到几十兆就不错了,可见两者的速度差异是多么的大 ,缓存是为了解决CPU和内存两者速度差异问题的中间媒体,将CPU访问频率较高的数据从内存读入缓存,从而提高软件执行效率。

 

  以上是硬件中缓存,软件中的缓存的定义更为广泛一些,实现的方式也更多一些,但目的是一样的,都是复制常用的数据到内存中方便CPU的快读读取(注意:通过java的原理可以看出java不能操作缓存,不过可以给缓存建议存储那些数据)。缓存的基本思想是以空间换时间。我们知道,IO的读写速度相对内存来说是比较慢的,通常一个web应用的瓶颈就出现在磁盘IO的读写上。那么,如果我们在内存中建立一个存储区,将数据缓存起来,当浏览器端由请求到达的时候,直接从内存中获取相应的数据,这样一来可以降低服务器的压力,二来,可以提高请求的响应速度,提升用户体验。

 

 

 

 

 

2、java项目中常用的实现缓存的发方式有哪些?

 

2.1 数据库数据缓存

 

      一般来说,web应用业务逻辑业务逻辑比较复杂,数据库繁多,要获取某个完整的数据,往往要多次读取数据库,或者使用极其复杂效率较低的SQL查询语句。为了提高查询的性能,将查询后的数据放到内存中进行缓存,下次查询时,直接从内存缓存直接返回,提高响应效率。

 

比如mysql、oracle等本身的缓存机制可以实现数据缓存,有时页面同样的请求,后面的请求时间比第一次请求明显短,就是数据库数据缓存的作用,另外通过调正数据库的字段类型和索引、序列等可以优化查询效率。

 

 

 

2.2 应用层缓存

      应用层缓存是指我们在代码层面上做的缓存。通过代码逻辑,把曾经请求过的数据或资源等,缓存起来,再次需要数据时通过逻辑上的处理选择可用的缓存的数据。应用层缓存主要针对某个业务方法进行缓存,有些业务对象逻辑比较复杂,可能涉及到多次数据库读写或者其他消耗较高的操作,应用层缓存可以将复杂的业务逻辑解放出来,降低服务器压力。

 

 

 

2.3 页面缓存(浏览器缓存)

      除了IO外,web应用的另一大瓶颈就是页面模板的渲染。每次请求都需要从业务逻辑层获取相应的model,并将其渲染成对应的HTML。一般来说,web应用读取数据的需求比更新数据的需求大很多,大多数情况下,某个请求返回的HTML是一样的,因此直接将HTML缓存起来也是缓存的一个主流做法。

 

 

 

2.4 代理服务器缓存

      正向代理需要用户浏览器进行配置,反向代理需要先配置DNS服务器,然后接受用户浏览请求,转发请求给远程服务器。反向代理服务器是浏览器和源服务器之间的中间服务器,浏览器先向这个中间服务器发起Web请求,经过处理后(比如权限验证,缓存匹配等),再将请求转发到源服务器。代理服务器缓存的运作原理跟浏览器的运作原理差不多,只是规模更大。可以把它理解为一个共享缓存,不只为一个用户服务,一般为大量用户提供服务,因此在减少相应时间和带宽使用方面很有效,同一个副本会被重用多次。常见的反向代理服务器:Nginx是软件。

 

 

 

2.5 CDN缓存

      CDN( ContentDeliveryNetwork 内容分发网络)缓存,也叫网关缓存、反向代理缓存。浏览器先向CDN网关发起Web请求,网关服务器后面对应着一台或多台负载均衡源服务器,会根据它们的负载请求,动态将请求转发到合适的源服务器上。虽然这种架构负载均衡源服务器之间的缓存没法共享,但却拥有更好的处扩展性。CDN是一集群服务器网络,不是软件。

 

 

 

2.6 基于spring的缓存

 

spring作为一个成熟的java web 框架,自身有一套完善的缓存机制,同时,spring还未其他缓存的实现提供了扩展。接下来,让我们在一个简单的学生管理系统中尝试spring的数据库缓存、应用层缓存、页面缓存的实现。


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

相关文章

Java实现本地缓存、分布式缓存及多级缓存

以下均为自己参考其它博主文章或自己理解整理而成,如有错误之处,欢迎在评论区批评指正! 0. 缓存简介 像MySql等传统的关系型数据库已经不能适用于所有的业务场景,比如电商系统的秒杀场景,APP首页的访问流量高峰场景&a…

Java本地高性能缓存的几种实现方式

Java缓存技术可分为远端缓存和本地缓存,远端缓存常用的方案有著名的redis和memcache,而本地缓存的代表技术主要有HashMap,Guava Cache,Caffeine和Encahche。本篇博文仅覆盖了本地缓存,且突出探讨高性能的本地缓存。 本…

SIFT的两个版本:OpenCV和VL_SIFT

暂时记录一下 OpenCV版本&#xff1a; #include<iostream> #include<opencv2/opencv.hpp> #include<opencv2/core.hpp> #include<opencv2/features2d.hpp> #include <opencv2/xfeatures2d/nonfree.hpp>using namespace std; using namespace c…

论文阅读笔记《Matching Images With Multiple Descriptors: An Unsupervised Approach for Locally Adaptive》

核心思想 本文提出一种将多种特征描述算法融合起来实现更好图像匹配的方法。近些年来&#xff0c;图像特征的描述算法层出不穷如SIFT、LIOP 、DAISY等等&#xff0c;每种方法都有各自的优势和侧重点&#xff0c;对于不同图像其效果也各有优劣。那么能不能将多种算法的优势结合起…

LIFT: Learned Invariant Feature Transform详细笔记

LIFT: Learned Invariant Feature Transform Paper: LIFT: Learned Invariant Feature Transform | SpringerLink Code: GitHub - cvlab-epfl/LIFT: Code release for the ECCV 2016 paper 文章目录 Abstract思路来源LIFT文献来源 方法&#xff1a;LIFTPipeline网络架构训练流…

简单的倒计时shell脚本

效果如下: 代码如下: #! /bin/bash #####################倒计时################ #作者:liop #完成时间:2019.12.17 #三位数以内秒数的倒计时 ########################################## display(){case $1 in1)case $2 in1)echo "******** ";;2)echo "…

计算机视觉领域经典论文源码

计算机视觉领域经典论文源码 转载自&#xff1a;http://blog.csdn.net/ddreaming/article/details/52416643 2016-CVPR论文代码资源&#xff1a; https://tensortalk.com/?catconference-cvpr-2016 一个GitHub账号&#xff0c;里面有很多计算机视觉领域最新论文的代码实现&am…

【译文】Local Intensity Order Pattern for Feature Description

在上一篇文章【特征检测】LIOP特征描述算法中讲到了LIOP描述符&#xff0c;下面我将原文翻译如下&#xff0c;如有出入请以原文为准。 —————————————————————————————————————————————————————————————————…

[2015 Springer] Local Image Descriptor: Modern Approaches——2 Classical Local Descriptors

转载请注明链接&#xff1a; 有问题请及时联系博主&#xff1a;Alliswell_WP 第一篇链接&#xff1a;https://blog.csdn.net/qq_21685903/article/details/103475243 第二篇链接&#xff1a;https://blog.csdn.net/qq_21685903/article/details/103610331 翻译 本地图像描述…

[2015 Springer] Local Image Descriptor: Modern Approaches——3 Intensity Order-Based Local Descriptors

转载请注明链接&#xff1a; 有问题请及时联系博主&#xff1a;Alliswell_WP&#xff1a;Alliswell_WP 第一篇链接&#xff1a;https://blog.csdn.net/qq_21685903/article/details/103475243 第二篇链接&#xff1a;https://blog.csdn.net/qq_21685903/article/details/10361…

在SIFT和SURF之后,有哪些比较新的且具有一定影响力的自然图像配准算法?

链接&#xff1a;https://www.zhihu.com/question/32066833/answer/2041516754 编辑&#xff1a;深度学习与计算机视觉 声明&#xff1a;仅做学术分享&#xff0c;侵删 作者&#xff1a;Vinjn张静https://www.zhihu.com/question/32066833/answer/54575191 我就提一下 OpenCV 中…

matlab vlfeat hog,vlfeat-0.9.20-bin 特征提取的工具包,实现各种 ,如hog,lbp,sift. matlab 242万源代码下载- www.pudn.com...

文件名称: vlfeat-0.9.20-bin下载 收藏√ [ 5 4 3 2 1 ] 开发工具: matlab 文件大小: 17828 KB 上传时间: 2015-07-21 下载次数: 0 提 供 者: 刘晓晶 详细说明&#xff1a;特征提取的工具包&#xff0c;实现各种特征&#xff0c;如hog,lbp,sift.-Feature extraction kit …

关于视觉SLAM的最先进技术的调查-A survey of state-of-the-art on visual SLAM

原文见文章末尾&#xff1a; 今天读了一篇视觉slam的综述&#xff0c;真的是读了一天&#xff0c;记录一下。我比较关注的是特征提取和匹配和深度学习有关的章节。好久&#xff0c;但是还算是有收获的吧。 摘要&#xff1a; 本文概述了视觉同步定位和测绘&#xff08;V-SLAM&a…

队列

目录 队列的概念及结构队列代码实现 队列的概念及结构 队列和栈略有不同&#xff0c;队列是先进后出的一种数据结构&#xff0c;通常使用链表来表示&#xff0c;当然有一种特殊的循环队列使用顺序表来进行表示的。 队列只允许从后进入&#xff0c;从前弹出&#xff0c;就像我们…

HPatches数据集(图像匹配)---2关于评估代码的解释---和python画出结果

关于画图: 参考: Matplotlib系列: https://blog.csdn.net/yuyh131/category_7823048.html 关于评估代码的解释: 我们先提前下载所有算法对数据集patches提取的描述符: ./download.sh descr List of available descriptor results file for HPatches: ----------------------…

LIOP特征

注&#xff1a;本文是笔者在阅读相关英文文献后&#xff0c;翻译、整理所得&#xff1b;原文是&#xff1a;Local Intensity Order Pattern for Feature Description&#xff1b; Zhenhua Wang, Bin Fan, and Fuchao Wu&#xff1b;ICCV2011 LIOP: Local Intensity Order Patte…

【特征检测】LIOP特征描述算法

简介&#xff1a; LIOP特征描述算法&#xff0c;是2011年ICCV上一片paper《Local Intensity Order Pattern for Feature Description》中提出的一种特征描述算法。等有空闲时间把原文仔细翻译一遍&#xff0c;然后放上来分享给大家。 算法的提出者也是比较厉害的&#xff0c;其…

php把字符串日期转成时间戳,php怎样把日期转成时间戳

php把日期转成时间戳的方法&#xff1a;可以利用strtotime()函数来实现。strtotime()函数可以将任何字符串的日期时间描述解析为Unix时间戳&#xff0c;若成功则返回时间戳&#xff0c;失败则返回false。 strtotime() 函数将任何字符串的日期时间描述解析为 Unix 时间戳&#x…

java日期转时间戳精确到毫秒

代码如下&#xff1a; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Test {public static void main(String[] args) {long daytimeToStamp("2019-08-06 11:22:32");System.out.println(day);//输出1…

go 日期时间戳转换

一、日期字符串转成时间戳 //设置时区 var LOC, _ time.LoadLocation("Asia/Shanghai") //日期时间字符串 timeStr : "2022-10-10 10:00:00" //要转换成时间日期的格式模板&#xff08;go诞生时间&#xff0c;模板必须是这个时间&#xff09; timeTmepla…