时间缓存容器TimeCacheMap的实现
来源:互联网 发布:古文观止知乎 编辑:程序博客网 时间:2024/06/06 02:31
Storm中实现了一个容器,它里面的元素存一定时间,超过该时间的元素便可能被删除,以保证容器可以加入更多新容器。
实现思想:初始化N个容器,N个容器组成链表,元素的最短存储时间为T,每次将新元素插入到链表头部的容器内,每隔T/(N-1)时间,将链表尾部的容器删除,同时在链表头部插入新容器,每次删除在N个容器中分别执行删除操作。可以每个元素的存储时间为:[T, T + T/(N-1)]
在具体实现中作者采用一个线程进行容器队列的头部插入和尾部删除工作,同时使用锁机制避免常规容器操作和容器队列的删除与添加操作的访问冲突。
Code:
privatefinalObject_lock= newObject();
privateThread_cleaner;
private ExpiredCallback _callback;
……
final long expirationMillis = expirationSecs * 1000L;
final long sleepTime = expirationMillis / (numBuckets-1);
_cleaner = new Thread(new Runnable() {
public void run() {
try {
while(true) {
Map<K, V> dead = null;
Time.sleep(sleepTime);
synchronized(_lock) {
dead =_buckets.removeLast();
_buckets.addFirst(new HashMap<K, V>());
}
if(_callback!=null) {
for(Entry<K, V>entry:dead.entrySet()){
_callback.expire(entry.getKey(),entry.getValue());
}
}
}
} catch (InterruptedException ex) {
}
}
});
_cleaner.setDaemon(true);
_cleaner.start();
- 时间缓存容器TimeCacheMap的实现
- storm实战--TimeCacheMap的使用
- TimeCacheMap的解析与使用
- Spring容器的缓存技术
- Linux实现的ARP缓存老化时间原理解析
- [*] Linux实现的ARP缓存老化时间原理解析
- java实现时间复杂度O(1)的LFU缓存
- Linux实现的ARP缓存老化时间原理解析
- 控制缓存的时间
- strom的TimeCacheMap和RotatingMap比较和升级
- docker容器的时间问题
- Eacache缓存+缓存的过期时间
- stack容器的实现
- C++容器的实现
- list容器的实现
- set容器的实现
- vector容器的实现
- IoC容器的实现
- 写给10年后的自己
- Android(Java):c 文件
- Paxos算法及拜占庭将军问题
- 获取PCI设备并初始化
- 299 - Train Swapping
- 时间缓存容器TimeCacheMap的实现
- 《partner4java 讲述jBPM4》之第一步:jBPM4概念 & helloworld
- 用Topo序列求关键路径
- xcode快捷键
- java的System.getProperty()方法可以获取的值
- [项目管理] 项目管理之配置管理
- JSON-lib框架,转换JSON、XML不再困难
- 索引优先队列
- 高数题目 (暑假)