文档章节

高效可伸缩的结果缓存

引鸩怼孑
 引鸩怼孑
发布于 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

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

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

kajhsdjkah
2010/12/15
215
2
一步一步学solr:什么是solr?

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

王爵nice
2014/07/22
0
0
企业级搜索应用服务器solr介绍

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

_夏天的风_
2014/09/03
0
0
高可用可伸缩架构实用经验谈

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

onlyzq
2015/03/29
0
0
高可用可伸缩架构实用经验谈

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

luoahong
2016/01/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

这些Spring中的设计模式,你都知道吗?

设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆。 Spring作为业界的经典框架,无论是在架构设计方面,还是在代码编写方面,都堪称行...

Java填坑之路
34分钟前
1
0
Spring Aop原理之Advisor过滤

在上文(Spring Aop之Advisor解析)中我们讲到,Spring Aop对目标bean的代理主要分为三个步骤:获取所有的Advisor,过滤当前bean可应用的Advisor和使用Advisor为当前bean生成代理对象,并且上文...

爱宝贝丶
45分钟前
0
0
JMockit学习教程

1 JMockit中文网 我觉得如果仅仅是开发自测的话,把JMockit中文网认真看一遍,就可以在项目中使用JMockit了。 http://jmockit.cn/index.htm 2 JMockit中文教程 官方文档中文版。对于不喜欢看...

SuperHeroes
56分钟前
0
0
Linux服务器几乎从不采用Arch Linux?

我们见得多的Linux服务器系统一般都是什么Ubuntu Server啊,什么Cent OS啊,什么Fedora啊,或者企业采用的Red Hat啊,为什么几乎没有Arch Linux呢?下面我将从若干个方面指出Arch Linux在服务...

linux-tao
今天
0
0
js 函数柯里化 闭包

参考 https://mp.weixin.qq.com/s/GEHL3jarDdAAcr5tQGjmDg 一个统计求和的函数 需要知道整个数组的信息,然后遍历求值 function countMoney() { let money = 0 // 温馨提示:arguments...

阿豪boy
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部