`

高效可伸缩的结果缓存

阅读更多
/**
 * 要执行的算法,返回结果v
 */
public interface Computable<A, V> {
	public V comput(final A arg);

}

 

/**
 * 用于缓存数据
 */
public class Memoizer<A, V> implements Computable<A, V> {

	private final ConcurrentMap<A, Future<V>> cache = new ConcurrentHashMap<A, Future<V>>();

	private final Computable<A, V> c;

	private Memoizer(Computable<A, V> c) {
		this.c = c;
	}

	@Override
	public V comput(final A arg) {
		while (true) {
			Future<V> f = cache.get(arg);
			if (f == null) {
				Callable<V> eval = new Callable<V>() {

					@Override
					public V call() throws Exception {
						return c.comput(arg);
					}
				};
				FutureTask<V> ft = new FutureTask<V>(eval);
				//若没有这个key则put。总是返回oldValue
				f = cache.putIfAbsent(arg, ft);
				if (f == null) {
					f = ft;
					ft.run();
				}

			}
			return null;
		}
	}

}

 

1
0
分享到:
评论

相关推荐

    构建高效可伸缩的缓存demo

    在构建高效可伸缩的缓存系统中,我们需要考虑的关键因素包括性能、容错性、扩展性和资源管理。本demo提供了实现这些目标的实例代码和测试案例,让我们深入探讨其中涉及的技术点。 首先,缓存的主要目的是提高数据...

    可伸缩的系统技术方案

    构建可伸缩的系统是一项复杂而挑战性的任务,需要综合运用垂直伸缩和水平伸缩的策略,同时考虑到锁问题、线程管理、数据分片、并行计算、分布式缓存与存储等多个方面。通过精心设计和不断优化,可以打造出既高效又...

    demo缓存伸缩

    【标题】:“Demo缓存伸缩” 在计算机科学与信息技术领域,缓存伸缩是针对高并发场景下,为了...通过对DemoProject的深入研究,我们可以学习到如何在实际项目中应用这些理论知识,以实现高效且可扩展的缓存解决方案。

    行业分类-设备装置-基于可伸缩性设计的教育平台数据缓存方法及系统.zip

    "基于可伸缩性设计的教育平台数据缓存方法及系统"就是一个针对这一挑战的解决方案。这个压缩包文件包含了对这一主题的深入探讨,主要涉及以下几个关键知识点: 1. **可伸缩性设计**:可伸缩性是指系统在面临负载...

    Asp.net缓存处理

    这种缓存策略适用于处理计算结果或复杂数据结构,可以显著提高性能。与页输出缓存不同,应用程序缓存可以在代码中动态管理和操作。 3. **分布式缓存** - 当应用运行在多服务器负载均衡环境或分布式系统中,ASP.NET...

    C# 系统缓存全解析

    它们可以在多台服务器之间共享缓存,提高系统的可伸缩性和性能。 总的来说,C# .NET的系统缓存机制提供了多种方式来优化应用程序的响应速度,通过合理使用缓存,可以显著降低服务器负载,提高用户体验。在设计和...

    可伸缩的网络编程(Scalable Network Programming)中文版

    《可伸缩的网络编程(Scalable Network Programming)》是一本深入探讨网络编程领域中如何构建可扩展、高效系统的专业书籍。这本书的中文版为中国的读者提供了方便,使更多的人能够理解并应用这些概念和技术。 网络...

    spring + ehcache + redis两级缓存

    当我们谈论“Spring + Ehcache + Redis”两级缓存时,我们实际上是在讨论如何在Java环境中利用Spring框架来集成Ehcache作为本地缓存,并利用Redis作为分布式二级缓存,构建一个高效且可扩展的缓存解决方案。...

    app 缓存应用介绍

    这个技术的主要目的是提高应用程序的性能、可伸缩性和可用性,尤其是在Web应用程序和桌面应用程序中。通过AppFabric,开发人员可以轻松地将缓存功能集成到他们的应用中,而无需深入理解复杂的分布式系统原理。 ...

    encache+jgroups集群缓存共享

    在IT行业中,缓存共享是提高系统性能和可伸缩性的重要手段,特别是在分布式系统中。"encache+jgroups集群缓存共享"这个主题聚焦于如何利用EnCache和JGroups两个技术来实现高效的集群间缓存共享。 EnCache是一个高...

    第6章 可伸缩的 SAAS 应用框架

    在IT行业中,构建可伸缩的SAAS(Software as a Service)应用框架是现代企业级软件开发的关键。本章将深入探讨如何设计和实现这样的框架,以满足不断变化的业务需求,提供高效、稳定且可扩展的服务。我们将从以下几...

    浅谈电商支撑系统中分布式缓存管理技术的研究与实现.pdf

    在现代的电子商务环境中,分布式缓存管理技术是支撑系统高效运行的关键因素。分布式缓存能够在多台服务器上存储数据的副本,从而提高数据访问的性能和系统的可用性。在面对高并发场景时,分布式缓存能够显著降低...

    基于ZooKeeper的分布式缓存的设计与实现.pdf

    例如,它可以帮助缓存系统在保持高可用性的同时,处理好数据一致性的问题,实现高效的数据同步和状态更新。通过ZooKeeper,分布式缓存系统可以做到在单个节点故障时,集群的其它节点仍然能继续提供服务,从而实现...

    Spring缓存配置

    EhCache是Java的一个开源、高性能、可伸缩的分布式缓存系统,常用于缓存对象以提高性能。EhCache支持本地缓存和分布式缓存,且与Spring框架有良好的集成。 **2. 引入依赖** 首先,我们需要在项目中引入EhCache的...

    互联网创业核心技术:构建可伸缩的Web应用(带书签,完整版)

    10. **代码优化**:最后但同样重要的是,编写高效、优化的代码,减少冗余,提高执行效率,也是确保Web应用可伸缩性的基础。 综上所述,构建可伸缩的Web应用涉及多个层面,从系统架构到具体的技术选择,都需要...

    一种基于Qt的可伸缩全异步CS架构服务器实现

    在IT行业中,构建高效、可伸缩的服务器架构是至关重要的。本文将深入探讨一种基于Qt库实现的可伸缩全异步C/S(客户端/服务器)架构,它旨在提供高性能的服务并支持大规模用户并发。 Qt是一个跨平台的C++图形用户...

    浅析SpringCache缓存1

    9. **多级缓存**:Spring Cache 还支持多级缓存,可以结合本地缓存和分布式缓存,提高系统的可伸缩性和性能。 10. **缓存区域**:可以定义多个缓存区域,每个区域可以有自己的配置,例如独立的缓存提供者、过期策略...

    行业文档-设计装置-可伸缩标示的书签.zip

    因此,设计应考虑缓存策略和高效的搜索算法,确保快速加载和查找。 8. **同步与备份**:如果应用支持多设备使用,书签的同步机制是必不可少的,确保用户在任何设备上都能访问他们的书签。同时,定期备份能防止数据...

Global site tag (gtag.js) - Google Analytics