1.缓存基本知识
参考博客:http://carlosfu.iteye.com/blog/2241010
1.1 基本概念
1).什么是缓存(cache)?
Cache(缓存): 从cpu的一级和二级缓存、Internet的DNS、到浏览器缓存都可以看做是一种缓存。
维基百科: 写道
2). Cache hit(缓存命中)和Cahe miss(缓存未命中)
3).缓存算法
LRU(Least Recently Used) FIFO(First Input First Output)Least Frequently Used(LFU) 等等
4).序列化
serialization-and-deserialization(序列化与反序列化):可以参考:http://www.infoq.com/cn/articles/serialization-and-deserialization
后面也有单独文章去分析。
5).Scale Up (垂直扩容) 和 Scale out (水平扩容)
驴拉车,通常不是把一头驴养壮(有极限),而通常是一群驴去拉(当然每个个体也不能太差)。
服务器也是一样的道理,至少互联网是这样:
6). Write-through 和 write-behind
1.2 缓存的种类
1). LocalCache(独立式-本地cache): 例如Ehcache、BigMemory Go
(1) 缓存和应用在一个JVM中。
(2) 缓存间是不通信的,独立的。
(3) 弱一致性。
2. Standalone(单机):
(1) 缓存和应用是独立部署的。
(2) 缓存可以是单台。(例如memcache/redis单机等等)
(3) 强一致性
(4) 无高可用、无分布式。
3. Distributed(分布式):例如Redis-Cluster, memcache集群等等
(1) 缓存和应用是独立部署的。
(2) 多个实例。(例如memcache/redis等等)
(3) 强一致性或者最终一致性
(4) 支持Scale Out、高可用。
1.3 数据层访问速度:(作为开发人员要记住这些量级)
1.4 缓存相关问题
- 缓存系列文章--4.缓存常用更新策略对比。
- 缓存系列文章--7.穿透问题。
- 缓存系列文章--8.雪崩问题-stampeding herd(惊逃的野牛)
- 缓存系列文章--9.无底洞问题(multiget hole)
2. cache的应用
2.1. ehcache,bigmemory使用
详细参考专栏: http://www.iteye.com/blogs/subjects/bigmemory
其中重点理解的点:
1) ehcache架构图
- ehcache-core:API,标准缓存引擎,RMI复制和Hibernate支持
- ehcache:分布式Ehcache,包括Ehcache的核心和Terracotta的库
- ehcache-monitor:企业级监控和管理
- ehcache-web:为Java Servlet Container提供缓存、gzip压缩支持的filters
- ehcache-jcache:JSR107 JCACHE的实现
- ehcache-jgroupsreplication:使用JGroup的复制
- ehcache-jmsreplication:使用JMS的复制
- ehcache-openjpa:OpenJPA插件
- ehcache-server:war内部署或者单独部署的RESTful cache server
- ehcache-unlockedreadsview:允许Terracotta cache的无锁读
- ehcache-debugger:记录RMI分布式调用事件
- Ehcache for Ruby:Jruby and Rails支持
2).Ehcache和bigmemeory关系
Terracotta是一款由美国Terracotta公司开发的著名开源Java集群平台,Terracotta公司在2009年收购了著名的Java开源缓存项目Ehcache以及Java任务调度项目Quartz。经过对该项目的深度整合,Terracotta推出了易用性更高的分布式缓存 bigmemeory GO,bigmemory MAX 等等,官网:http://terracotta.org/
Get standalone in-memory data management on a single application server.
Leverage All the RAM on Your Machine without Garbage Collection Pauses
BigMemory Go lets you keep all application data instantly available in your server's ultra-fast machine memory. If you're still using only a few gigs of RAM for fear of garbage collection performance hits, then it’s time to add the power of BigMemory Go.
3).Ehcache BigMemory: 摆脱GC困扰,参考下图:
3.1)、MemStore(通常指堆内存储)
(1) 堆内存储,受制于GC
(2) 理论上最快,可以存储序列化和非序列化数据
(3) 线程安全
(4) 如果使用了OffHeapStore,那么MemStore保存The hottest subset of data from thre OffHeapStore.
3.2)、OffHeapStore(堆外内存:被称为BigMemory):
有关堆外内存:可以参考如下文章:http://calvin1978.blogcn.com/articles/directbytebuffer.html
只在企业版本的Ehcache(BigMemory)中提供,原理是利用nio的DirectByteBuffers实现,比存储到磁盘 上快,而且完全不受GC的影响,可以保证响应时间的稳定性;但是direct buffer的在分配上的开销要比 heap buffer大,而且要求必须以字节数组方式存储,因此对象必须在存储过程中进行序列化,读取则进 行反序列化操作,它的速度大约比堆内存储慢一个数量级。
注:direct buffer不受GC影响,但是direct buffer归属的的JAVA对象是在堆上且能够被GC回收的,一旦 它被回收,JVM将释放direct buffer的堆外空间。)
(1) 堆外内存,不受制于GC
(2) 只在Bigmemory中能用,Ehcache不支持。
(3) 堆外内存使用字节码存储,所以只能存储序列化数据。
(4) 速度极快 us级别,能扛着很高QPS
4).bigmemory接入
参考:http://carlosfu.iteye.com/blog/2237511
相关推荐
ArcGIS Server 地图缓存(map cache)案例学习 本文是关于使用 ArcGIS Server 实现地图缓存(map cache)的案例学习,通过发布新西兰 1:50,000的地形图数据库,测试 ArcGIS Server 的 Cache 能力,并将服务作为底图...
16.memcache&redis构建缓存服务器.学习笔记整理分享给需要的同学
缓存是一种基于时空局部性的优化策略,即在短时间内,如果某个数据被访问,那么接下来很可能还会再次访问到这个数据。缓存通过将频繁访问的数据存储在快速但容量有限的内存区域,减少了访问慢速存储(如硬盘)的次数...
Hibernate学习笔记整理 以下是 Hibernate 框架的详细知识点: Hibernate 介绍 Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到数据库表中。它提供了一个简洁的方式来访问和操作...
"缓存图片查看器"是一款专门用于查看和提取网页中CSS隐藏图片的工具...总之,“缓存图片查看器”是一个实用的工具,能够帮助用户轻松获取和管理网页中的所有图片,无论是为了设计、开发还是学习,都能提供很大的便利。
### 架构学习资料整理 #### 核心知识点解析 ##### 架构师必备技能 架构师在IT项目中扮演着至关重要的角色,其职责不仅仅是设计系统架构,更需具备全面的技术视野和深刻的业务理解。架构师应具备以下特点: 1. **...
### hibernate框架学习笔记整理 #### 一、Hibernate框架简介 **Hibernate框架**是一种用于Java应用的**对象关系映射**(Object-Relational Mapping, ORM)解决方案,它允许开发者使用面向对象的方式操作数据库中的表...
《软件考试系统架构设计师学习笔记(整理版)》是一份详尽的学习资料,主要针对的是软件考试中的系统架构设计师这一专业领域。这份笔记包含了自2008年以来的历年试题,是备考者全面掌握该考试内容的重要参考资料。...
这份"mybatis学习资料整理"虽然不全面,但包含了MyBatis的一些核心概念和实践应用,还可能包含了他人博客的链接,可以作为学习MyBatis的初步指南。 1. **MyBatis简介**:MyBatis 是一个基于Java的持久层框架,它...
学习其基本配置,实体映射(包括一对一、一对多、多对多等关联关系),HQL查询,以及性能优化策略,如缓存和事务管理。 8. **Spring**:核心是IoC(控制反转)和DI(依赖注入)。理解Spring架构,掌握AOP(面向切面...
### Redis学习笔记整理 #### 一、Redis环境搭建 ##### 1.1 简介 Redis是一款开源的键值(Key-Value)型数据库系统,因其高性能和丰富的数据结构而广受欢迎。它不仅可以作为数据库使用,还可以作为一种数据结构服务器...
设计精良的网上商城系统,包括前端、后端、数据库、负载均衡、数据库缓存、分库分表、读写分离、全文检索、消息队列等,使用SpringCloud框架,基于Java开发。该项目可部署到服务器 个人花大量时间整理出的实战资料...
thinkPHP的F方法只能用于缓存简单数据类型,不支持有效期和缓存对象。S()缓存方法支持有效期,又称动态缓存方法。本文是小编日常整理有关thinkphp缓存方法,对thinkphp缓存方法感兴趣的朋友一起学习吧
7. **代理模式**:为其他对象提供一种代理以控制对这个对象的访问,可以实现远程代理、虚拟代理、缓存代理等。 8. **桥接模式**:将抽象部分与实现部分分离,使它们可以独立变化,降低了抽象和实现之间的耦合。 9....
用户可以查阅“使用说明”来了解如何操作这个工具,通过查看“源程序代码”学习和研究其工作原理,而“工程1.exe”是一个可执行文件,用户可以直接运行它来执行缓存文件的合并操作,无需进行编译或构建过程。...
Java学习整理文档主要涵盖Spring框架、线程安全和Bean生命周期等多个关键知识点,这些内容对于面试和深入理解Java应用开发非常重要。 1. **Spring Bean的线程安全性**:Spring框架并没有保证单例Bean的线程安全,这...
"清除缓存等"这一主题涵盖了对缓存、通话记录和短信记录的管理,旨在提供一个小型的演示项目,供学习者参考。 首先,我们要理解缓存的原理。缓存是一种存储技术,它能存储最近访问的数据以便快速重用。当应用程序...
### 堆栈的学习整理 #### 一、堆与栈的基本概念 - **堆(Heap)**:在程序运行过程中动态分配的内存区域,它的内存分配是不连续的,可以随机访问任何位置的数据。堆内存通常由操作系统管理,并且其大小可以根据...