java中的本地缓存【自己构造单例、guava、ehcache:问题:为什么构造缓存、如何构造缓存、如何保证集群内部缓存的一致性】*****很重要
来源:互联网 发布:盲人阅读器小说软件 编辑:程序博客网 时间:2024/06/05 21:18
文章来源:
http://blog.sina.com.cn/s/blog_6940cab30102uwmh.html
java中的本地缓存,工作后陆续用到,一直想写,一直无从下手,最近又涉及到这方面的问题了,梳理了一下。自己构造单例、guava、ehcache基本上涵盖了目前的大多数行为了。
为什么要有本地缓存?
在系统中,有些数据,数据量小,但是访问十分频繁(例如国家标准行政区域数据),针对这种场景,需要将数据搞到应用的本地缓存中,以提升系统的访问效率,减少无谓的数据库访问(数据库访问占用数据库连接,同时网络消耗比较大),但是有一点需要注意,就是缓存的占用空间以及缓存的失效策略。
为什么是本地缓存,而不是分布式的集群缓存?
本地缓存在那个区域?
搞一个单例模式,里面有个Map的变量来放置数据
关于单例模式,一个既简单又复杂的模式(http://iamzhongyong.iteye.com/blog/1539642)
非常典型的代码如下:
public class SingletonMap {
}
这种能不能用?可以用,但是非常局限
但是这种的就是本地缓存了吗?答案显然不是,为啥呢?
1、 没有缓存大小的设置,无法限定缓存体的大小以及存储数据的限制(max size limit);
2、 没有缓存的失效策略(eviction policies);
3、 没有弱键引用,在内存占用吃紧的情况下,JVM是无法回收的(weak rererences keys);
4、 没有监控统计(statistics);
5、 持久性存储(persistent store);
所以,这种就直接废掉了。。。
引入EhCache来构建缓存(详细介绍: http://raychase.iteye.com/blog/1545906)
EhCahce的核心类:
A、CacheManager:Cache的管理类;
B、Cache:具体的cache类信息,负责缓存的get和put等操作
C、CacheConfiguration :cache的配置信息,包含策略、最大值等信息
D、Element:cache中单条缓存数据的单位
典型的代码如下:
public static void main(String[] args) {
当然,Cache的配置信息,可以通过配置文件制定了。。。
优点:功能强大,有失效策略、最大数量设置等,缓存的持久化只有企业版才有,组件的缓存同步,可以通过jgroup来实现
缺点:功能强大的同时,也使其更加复杂
引入guava的cacheBuilder来构建缓存
这个非常强大、简单,通过一个CacheBuilder类就可以满足需求。
缺点就是如果要组件同步的话,需要自己实现这个功能。
典型的代码如下:
public class GuavaCacheBuilderTest {
}
缓存预热怎么搞?
A、全量预热,固定的时间段移除所有,然后再全量预热
适用场景:
1、数据更新不频繁,例如每天晚上3点更新即可的需求;
B、增量预热(缓存查询,没有,则查询数据库,有则放入缓存)
适用场景:
1、 数据更新要求缓存中同步更新的场景
集群内部,缓存的一致性如何保证?
如果采用ehcache的话,可以使用框架本身的JGroup来实现组内机器之间的缓存同步。
如果是采用google的cacheBuilder的话,需要自己实现缓存的同步。
A、非实时生效数据:数据的更新不会时时发生,应用启动的时候更新即可,然后定时程序定时去清理缓存;
B、需要实时生效数据:启动时可预热也可不预热,但是缓存数据变更后,集群之间需要同步
原文:http://iamzhongyong.iteye.com/blog/2038982
0 0
- java中的本地缓存【自己构造单例、guava、ehcache:问题:为什么构造缓存、如何构造缓存、如何保证集群内部缓存的一致性】*****很重要
- 缓存-ehcache 集群缓存的同步
- 使用RxJava自己构造一个三级缓存的实例
- EhCache 分布式缓存/缓存集群
- EhCache 分布式缓存/缓存集群
- EhCache 分布式缓存/缓存集群
- EhCache 分布式缓存/缓存集群
- EhCache 分布式缓存/缓存集群
- EhCache 分布式缓存/缓存集群
- EhCache 分布式缓存/缓存集群
- EhCache 分布式缓存/缓存集群
- EhCache 分布式缓存/缓存集群
- EhCache 分布式缓存/缓存集群
- EhCache 分布式缓存/缓存集群
- EhCache 分布式缓存/缓存集群
- EhCache 分布式缓存/缓存集群
- EhCache 分布式缓存/缓存集群
- EhCache 分布式缓存/缓存集群
- 优化MyEclipse设置,提高运行效率
- javascript 对于手机中的一些事件
- php的socket
- 复习jquery的选择器部分
- history.go()和location.Reload()和location.href 区别
- java中的本地缓存【自己构造单例、guava、ehcache:问题:为什么构造缓存、如何构造缓存、如何保证集群内部缓存的一致性】*****很重要
- Redis 作为数据库持久化替代方案的问题分析
- 寻找幸福
- unix系统工具源码安装(更新)
- Firefox OS system app
- android fragments
- list和map集合遍历方法
- iOS UITableCell自适应高度
- 寻找幸福