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
相关推荐
Linux帧缓存资料 自己整理的一些资料,对学习使用Linux帧缓存有很大帮助。
设计精良的网上商城系统,包括前端、后端、数据库、负载均衡、数据库缓存、分库分表、读写分离、全文检索、消息队列等,使用SpringCloud框架,基于Java开发。该项目可部署到服务器 个人花大量时间整理出的实战资料...
thinkPHP的F方法只能用于缓存简单数据类型,不支持有效期和缓存对象。S()缓存方法支持有效期,又称动态缓存方法。本文是小编日常整理有关thinkphp缓存方法,对thinkphp缓存方法感兴趣的朋友一起学习吧
个人花大量时间整理出的实战资料,内容丰富,文档也很详细。无论做毕业设计还是用于学习技能,或工作中当做参考资料,都能发挥重要作用 亲们下载我任何一个付费资源后,即可私信联系我免费下载其他相关资源哦~ 个人...
在本篇文章里小编给大家整理的是一篇关于python删除缓存文件方法,需要的朋友们可以学习下。
为了保证性能和程序的稳定性,在加载图片时需要做必要的图片缓存处理。该demo是我最开始学Android时学习编写的,可供初学者学习,更好的图片处理方式有时间再整理。
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
整理了框架底层是按技术(包括反射,XML,设计模式)及Redis缓存数据库技术。 Java 反射机制是在运行状态中,对于任意一个类,都能够获得这个类的所有属性和方法,对于任意一个对象都能够调用它的任意一个属性和方法...
集成Redis缓存、消息队列(RabbitMq、RocketMQ)、分布式搜索ElasticSearch 个人花大量时间整理出的实战资料,内容丰富,文档也很详细。无论做毕业设计还是用于学习技能,或工作中当做参考资料,都能发挥重要作用 亲们...
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
基于springcloud全家桶开发分布式框架(支持oauth2认证授权、SSO登录、统一下单、微信公众号服务、Shardingdbc分库分表、常见服务监控、链路监控、异步日志、redis缓存等功能),实现基于Vue全家桶等前后端分离项目...
个人辛勤整理,拿来与大家分享,功能上个人认为算是实现了,虽然不如360等流氓软件,但是可以作为需要这方面需求的朋友共同学习交流,还希望路过的朋友请关注新浪微博,小小弓长张,讨论学习
包含了JVM、java集合、多线程并发、java基础、spring生态原理、微服务、设计模式、NETTY与RPC、网络、日志、ZOOKEEPER、KAFKA、RABBITMQ、HBASE...加密算法、分布式缓存、HADOOP、SPARK、STORM、YARN、机器学习、云计算...
最近正在学缓存依赖,现把一些学习资料整理如下:缓存依赖主要提供以下功能:1.SQL 缓存依赖项可用于应用程序缓存和页输出缓存。2.可在 SQL Server 7.0 及更高版本中使用 SQL 缓存依赖项。3.可以在网络园(一台...
jvm、java集合、java多线程并发、java基础、spring原理、微服务、netty与rpc、网络、日志、zookeeper、kafka、rabbitmq、hbase、mongodb、...加密算法、分布式缓存、hadoop、spark、storm、yarn、机器学习、云计算...
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...