文档章节

高效可伸缩的结果缓存

引鸩怼孑
 引鸩怼孑
发布于 2015/04/29 14:56
字数 155
阅读 10
收藏 0
  1. /** 
  2.  * 要执行的算法,返回结果v 
  3.  */  
  4. public interface Computable<A, V> {  
  5.     public V comput(final A arg);  
  6.   
  7. }  

 

Java代码   收藏代码
  1. /** 
  2.  * 用于缓存数据 
  3.  */  
  4. public class Memoizer<A, V> implements Computable<A, V> {  
  5.   
  6.     private final ConcurrentMap<A, Future<V>> cache = new ConcurrentHashMap<A, Future<V>>();  
  7.   
  8.     private final Computable<A, V> c;  
  9.   
  10.     private Memoizer(Computable<A, V> c) {  
  11.         this.c = c;  
  12.     }  
  13.   
  14.     @Override  
  15.     public V comput(final A arg) {  
  16.         while (true) {  
  17.             Future<V> f = cache.get(arg);  
  18.             if (f == null) {  
  19.                 Callable<V> eval = new Callable<V>() {  
  20.   
  21.                     @Override  
  22.                     public V call() throws Exception {  
  23.                         return c.comput(arg);  
  24.                     }  
  25.                 };  
  26.                 FutureTask<V> ft = new FutureTask<V>(eval);  
  27.                 //若没有这个key则put。总是返回oldValue  
  28.                 f = cache.putIfAbsent(arg, ft);  
  29.                 if (f == null) {  
  30.                     f = ft;  
  31.                     ft.run();  
  32.                 }  
  33.   
  34.             }  
  35.             return null;  
  36.         }  
  37.     }  
  38.   
  39. }  


你看懂了吗?

本文转载自:http://flyouwith.iteye.com/blog/2206973

共有 人打赏支持
引鸩怼孑
粉丝 43
博文 205
码字总数 16947
作品 0
南京
项目经理
私信 提问
可伸缩系统的设计模式

http://www.infoq.com/cn/news/2010/12/scalable-design-patterns 过去十年所取得的一个主要成就就是面向大众的可伸缩系统的广泛应用,尤其是云系统和某些高可伸缩的Web应用。比如说,Faceb...

kajhsdjkah
2010/12/15
215
2
企业级搜索应用服务器solr介绍

简介 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出...

_夏天的风_
2014/09/03
0
0
一步一步学solr:什么是solr?

简介 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出...

王爵nice
2014/07/22
0
0
高可用可伸缩架构实用经验谈

移动互联网、云计算和大数据的成熟和发展,让更多的好想法得以在很短的时间内实现为产品。此时,如果用户需求抓得准,用户数量将很可能获得爆发式增长,而不需要像以往一样需要精心运营几年的...

onlyzq
2015/03/29
0
0
书单丨这5本书标引了架构与运维技术发展新动向

点击上方“程序人生”,选择“置顶公众号” 第一时间关注程序猿(媛)身边的故事 图片源自:Harry Potter and the Sorcerer's Stone 参与文末话题讨论,有机会获得赠书~ 网站的发展离不开架构...

CSDN程序人生
09/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JeeSite 4.x 树形结构的表设计和用法

有些同仁对于 JeeSite 4 中的树表设计不太了解,本应简单的方法就可实现,却写了很多复杂的语句和代码,所以有了这篇文章。 在 JeeSite 4 中的树表设计我还是相对满意的,这种设计比较容易理...

ThinkGem
13分钟前
1
0
0022-如何永久删除Kafka的Topic

1.问题描述 使用kafka-topics --delete命令删除topic时并没有真正的删除,而是把topic标记为:“marked for deletion”,导致重新创建相同名称的Topic时报错“already exists”。 2.问题复现...

Hadoop实操
15分钟前
0
0
技术工坊|区块链中的p2p网络(上海)

区块链是一个去中心化的系统,每个节点分布在全球各地,那么节点之间是如何自发地组成网络,又如何进行通信的?区块链中的p2p网络算法与bt下载中的p2p网络有什么区别?11月28日,第29期技术工...

HiBlock
21分钟前
1
0
MySQL性能优化之char、varchar、text的区别

在存储字符串时, 可以使用char、varchar或者text类型, 那么具体使用场景呢? 参考下面这个表结构: 1、 char长度固定, 即每条数据占用等长字节空间;适合用在身份证号码、手机号码等定。 ...

hansonwong
23分钟前
0
0
并发编程系列:4大并发工具类的功能、原理、以及应用场景

一:并发工具包 1.并发工具类 提供了比synchronized更加高级的各种同步结构:包括CountDownLatch、CyclicBarrier、Semaphore等,可以实现更加丰富的多线程操作。 2.并发容器 提供各种线程安全...

游人未归
33分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部