Cache简介:
缓存(Cache )是计算机领域非常通用的概念。它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储源的频率,从而提高应用的运行性能。缓存中的数据是数据存储源中数据的拷贝,应用程序在运行时直接读写缓存中的数据,只在某些特定时刻按照缓存中的数据来同步更新数据存储源。
缓存的物理介质通常是内存,而永久性数据存储源的物理介质通常是硬盘或磁盘,应用程序读写内在的速度显然比读写硬盘的速度快,如果缓存中存放的数据量非常大,也会用硬盘作为缓存的物理介质。
缓存的实现不仅需要作为物理介质的硬件,同时还需要用于管理缓存的并发访问和过期等策略的软件。因此,缓存是通过软件和硬件共同实现的。
1.1. 持久化层的缓存的范围
缓存的范围决定了缓存的生命周期以及可以被谁访问。缓存的范围分为三类。
1) 事务范围:缓存只能被当前事务访问。缓存的生命周期依赖于事务的生命周期,当事务结束时,缓存也就结束生命周期。在此范围下,缓存的介质是内存。事务可以是数据库事务或者应用事务,每个事务都有独自的缓存,缓存内的数据通常采用相互关联的对象形式。
2) 进程范围:缓存被进程内的所有事务共享。这些事务有可能是并发访问缓存,因此必须对缓存采取必要的事务隔离机制。缓存的生命周期依赖于进程的生命周期,进程结束时,缓存也就结束了生命周期。进程范围的缓存可能会存放大量的数据,所以存放的介质可以是内存或硬盘。缓存内的数据既可以是相互关联的对象形式也可以是对象的松散数据形式。松散的对象数据形式有点类似于对象的序列化数据,但是对象分解为松散的算法比对象序列化的算法要求更快。
3) 集群范围:在集群环境中,缓存被一个机器或者多个机器的进程共享。缓存中的数据被复制到集群环境中的每个进程节点,进程间通过远程通信来保证缓存中的数据的一致性,缓存中的数据通常采用对象的松散数据形式。
对大多数应用来说,应该慎重地考虑是否需要使用集群范围的缓存,因为访问的速度不一定会比直接访问数据库数据的速度快多少。
持久化层可以提供多种范围的缓存。如果在事务范围的缓存中没有查到相应的数据,还可以到进程范围或集群范围的缓存内查询,如果还是没有查到,那么只有到数据库中查询。事务范围的缓存是持久化层的第一级缓存,通常它是必需的;进程范围或集群范围的缓存是持久化层的第二级缓存,通常是可选的。
1.2. 持久化层的缓存的并发访问策略
当多个并发的事务同时访问持久化层的缓存的相同数据时,会引起并发问题,必须采用必要的事务隔离措施。
在进程范围或集群范围的缓存,即第二级缓存,会出现并发问题。因此可以设定以下四种类型的并发访问策略,每一种策略对应一种事务隔离级别。
1) 事务型(Transactional)策略:仅仅在受管理环境中适用。它提供了Repeatable Read事务隔离级别。对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读和不可重复读这类的并发问题。
2) 读写型(read-write)策略:提供了Read Committed事务隔离级别。仅仅在非集群的环境中适用。对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读这类的并发问题。
3) 非严格读写型(nonstrict-read-write)策略:不保证缓存与数据库中数据的一致性。如果存在两个事务同时访问缓存中相同数据的可能,必须为该数据配置一个很短的数据过期时间,从而尽量避免脏读。对于极少被修改,并且允许偶尔脏读的数据,可以采用这种并发访问策略。
4) 只读型策略(read-only):对于从来不会修改的数据,如参考数据,可以使用这种并发访问策略。
事务型并发访问策略是事务隔离级别最高,只读型的隔离级别最低。事务隔离级别越高,并发性能就越低。
分享到:
相关推荐
【简单缓存Cache介绍】 在IT领域,尤其是在Web应用程序开发中,缓存是提升系统性能的关键技术之一。本文主要探讨的是ASP.NET中的简单缓存机制,即Cache,它可以帮助我们减少对数据库的频繁访问,提高应用程序响应...
java 缓存 cache lru 实例 java 缓存 cache lru 实例 java 缓存 cache lru 实例 java 缓存 cache lru 实例 java 缓存 cache lru 实例 java 缓存 cache lru 实例 java 缓存 cache lru 实例
本文将详细介绍浏览器缓存机制的工作原理、 Memory Cache、Disk Cache、 HTTP Cache 三种缓存机制的区别和应用场景,以及强缓存和协商缓存的机制。 Memory Cache Memory Cache 是浏览器在内存中存储的缓存,主要...
**Cache(数据缓存)详解** Cache,也称为数据缓存,是一种提高应用程序性能的关键技术。它通过存储经常访问的数据,使得数据的读取速度更快,从而减轻了对底层资源(如数据库或网络)的压力。在本文中,我们将深入...
该工程包含数据缓存D_Cache和指令缓存I_Cache的Verilog代码和仿真文件,Cache的详细技术参数包含在.v文件的注释中。 直接相连16KB D_Cache Cache写策略: 写回法+写分配 (二路)组相连16KB I_Cache Cache替换策略: ...
Java 中常用缓存Cache机制的实现 缓存机制是指将程序或系统经常要调用的对象存在内存中,以便快速调用,不必再去创建新的重复的实例。这样做可以减少系统开销,提高系统效率。缓存主要可分为二大类:一、通过文件...
#直接下载hcache文件到linux,并使用该文件即可 ...#ps: 一般进程缓存的文件并不会太大, 最大的可能性是读写了大文件导致文件被缓存,建议检查下是否存在无用的超大日志,查找大于1G的文件 find / -type f
本篇文章将深入探讨如何利用Retrofit2和OkHttp3的Cache机制来实现数据缓存,并且着重讲解如何修改缓存时间,以便自定义缓存策略。 首先,Retrofit2是一个类型的网络请求库,它允许开发者用Java注解来声明HTTP操作,...
cache2k, 轻量级,高性能的Java缓存 cache2k缓存cache2k是内存高性能的Java缓存库。 Cache,String> cache = new Cache2kBuilder, String>
Spring Cache是一个抽象层,它允许开发者在不关注具体缓存实现的情况下,轻松地在应用程序中添加缓存功能。本篇文章将详细探讨如何通过key值更新Spring Cache中的指定缓存,以及相关的缓存管理策略。 首先,让我们...
该工程包含数据缓存D_Cache和指令缓存I_Cache的Verilog代码和仿真文件,附带可运行的ISE工程文件,Cache的详细技术参数包含在.v文件的注释中。 直接相连16KB D_Cache Cache写策略: 写回法+写分配 (二路)组相连16KB ...
### JAVA缓存入门文档:EHCache #### 一、EHCache简介 EHCache 是一个纯 Java 缓存实现,主要用于提高应用程序性能。它通过在内存中缓存数据来减少对数据库或其他外部系统的调用次数,从而加快应用响应速度。...
如果访问量大的话会给数据库造成很大的负担,所以对于变化不经常的内容要做好php 数据cache(缓存)是十分必要的。 对于一般的变量,把该变量变成php语言的格式,写到文件中,用时只要include这个文件就相当于加载了...
【缓存Cache的示例】 缓存Cache是计算机系统中广泛使用的一种技术,旨在提高数据访问速度。在Web应用中,Cache缓存被用于存储经常访问但变化不大的数据,以减少对数据库的直接访问,从而提升整体性能。计算机系统...
在ASP.NET中,Cache缓存是一种重要的性能优化机制,它允许开发者将经常访问的数据存储在内存中,减少对数据库或其他资源的访问,从而提高Web应用程序的响应速度。 **Cache缓存的基本概念** Cache是ASP.NET应用程序...
本文将详细讲解"cache/ehcache缓存使用"的相关知识点,包括缓存的基本概念、Ehcache的介绍、以及如何在Java应用中使用Ehcache进行缓存操作。 首先,我们要理解什么是缓存。缓存是一种存储技术,它临时存储常用或...
如果访问量大的话会给数据库造成很大的负担,所以对于变化不经常的内容要做好php 数据cache(缓存)是十分必要的。 对于一般的变量,把该变量变成php语言的格式,写到文件中,用时只要include这个文件就相当于...
J2Cache 是 OSChina 目前正在使用的两级缓存框架(要求至少 Java 8)。第一级缓存使用内存(同时支持 Ehcache 2.x、Ehcache 3.x 和 Caffeine),第二级缓存使用 Redis(推荐)/Memcached 。 由于大量的缓存读取会导致 L2...
易游 CACHE X II 新一代缓存管理是对服务器上的缓存进行统一管理与分配,新一代缓存加入了对SSD磁盘作为 缓存的完美支持,SSD缓存是作为内存缓存的辅助缓存使用的,一般情况下只有游戏盘需设置SSD缓存,所以 在...