`
ruijin5566
  • 浏览: 4579 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

缓存的实现方式

 
阅读更多

1.HashMap + ReentrantReadWriteLock

写时加WriteLock,读时加ReadLock,定时更新HashMap,适用于读取量大写入量小的场景。

 

2.LinkedHashMap,实现一个LRU缓存

继承LinkedHashMap,重写removeEldestEntry()方法,并做外部同步,比如EhCache的实现。

 

3.ConcurrentHashMap,实现一个FIFO的缓存

缓存实体可以用一个类似ConcurrentHashMap中HashEntry的结构,加上 volatile long livetime表示缓存时间

static final class CacheEntry implements Serializable {
	private static final long serialVersionUID = 7664619266911312995L;
	final String key;
	final int hash;
	volatile Object value;
	volatile long livetime;
	final CacheEntry next;

	CacheEntry(String key, int hash, CacheEntry next, Object value,
		long livetime) {
		this.key = key;
		this.hash = hash;
		this.next = next;
		this.value = value;
		this.livetime = livetime;
	}

	static final CacheEntry[] newArray(int i) {
		return new CacheEntry[i];
	}
}

 在每次put操作的时候,把缓存的key链接成一个单向链表,如果该段缓存大于该段最大对象个数了,则从Map中删除该链表头结点的key值,这样就实现了FIFO淘汰策略。

private KeyLinked head; //头结点
public KeyLinked current; //当前节点

public final class KeyLinked implements Serializable {
	private static final long serialVersionUID = -2057372648832421472L;
	public String key;
	public KeyLinked next;
}

 在初始化这个类似ConcurrentHashMap的缓存的时候,开启一个线程,每隔1个小时清除过期的元素,只要每段中有一个元素过期,那么就清空该段,链表随之清空;如果某段的所有元素都不过期,则不清空,并重建KeyLinked单链表。

 

 

 

分享到:
评论

相关推荐

    缓存组件的实现(go语言实现)

    在Web系统中,常见的缓存实现方式包括在服务器端、客户端或者使用CDN网络。例如,Redis是一个广泛使用的内存中的数据结构存储系统,常用于缓存各种Web服务中的数据。但有时候,对于一些特定需求,我们可能需要设计一...

    如何基于LoadingCache实现Java本地缓存

    LoadingCache 是 Guava 库提供的一种缓存实现方式,本文将详细介绍如何基于 LoadingCache 实现 Java 本地缓存。 一、Guava 介绍 Guava 是 Google 开源的一套工具库,其中提供的 cache 模块非常方便,是一种与 ...

    dns_parse-master_dns_dnscache缓存实现_middlecjc_directionlem_dnshash

    在这个项目中,采用了基于哈希表的缓存实现方式,这是因为它具有查找速度快、平均时间复杂度低的优点。 哈希表是一种数据结构,通过哈希函数将键(在这里是DNS查询的域名)映射到数组的索引上,使得查找、插入和...

    iBATIS缓存的使用方法

    - 这是最简单的缓存实现方式,使用引用计数来管理缓存项。当一个缓存项的引用计数为零时,该项就会被移除。 - MEMORY缓存不支持统一的失效策略,适合对内存使用没有严格限制的场景。 2. **LRU ...

    Hibernate_二级缓存 实验心得,手册

    EhCache是一种常用的二级缓存实现方式,其配置文件`ehcache.xml`示例如下: ```xml maxElementsInMemory="100" eternal="false" overflowToDisk="true" timeToIdleSeconds="300" timeToLiveSeconds="600" ...

    C#缓存的使用

    三、C#缓存实现方式 1. .NET Framework的`System.Web.Caching.Cache`:适用于ASP.NET Web应用程序,提供简单的键值对存储,过期策略和依赖项管理。 ```csharp HttpRuntime.Cache.Insert("key", "value", null, ...

    hibernate缓存策略

    1. **选择缓存实现**:Hibernate支持多种缓存实现方式,如Ehcache、OSGi等,需要根据项目需求选择合适的缓存实现。 2. **配置缓存插件**:在Hibernate配置文件中指定缓存插件,并对其进行相应的配置。 3. **实体...

    android数据缓存

    3. **缓存实现方式** - SharedPreferences:适合存储小量的键值对数据,如字符串和基本类型。 - SQLite数据库:适用于结构化的数据,可以进行查询操作。 - 文件存储:可以存储Bitmap、Drawable等二进制数据,但...

    分布式锁实现方式1

    其次,Redis缓存实现方式使用了Redis提供的`setnx`命令,这个命令能够在键不存在的情况下设置键值对。键作为锁的标识,值包含当前时间加上超时时间,这样可以避免锁无法释放的问题。如果`setnx`返回1,表示成功获取...

    QLogic缓存SAN适配器实现Oracle RAC闪存加速.pdf

    传统的基于服务器的闪存缓存实现方式并不支持此功能,因为每个服务器的缓存是独立的,不与对方通信。尽管它们能有效提升单台服务器的性能,但在集群服务器环境或利用多个物理服务器的虚拟化基础设施中实现存储加速是...

    java中的缓存技术

    在Java中,常见的缓存实现方式有内存缓存和分布式缓存。 1. 内存缓存:Java中最常用的内存缓存框架是Google的Guava Cache。Guava Cache提供了一种便捷的方式来管理和存储缓存数据,支持自动过期、大小限制等特性。...

    hibernate二级缓存

    1. **选择缓存提供者**:Hibernate 提供了多种缓存实现方式,如 EhCache、OSCache 等。 ```xml <property name="hibernate.cache.provider_class">org.hibernate.cache.ehcache.EhCacheProvider ``` 2. **配置...

    java缓存[借鉴].pdf

    在给定的文件中,我们看到了两种主要的Java缓存实现方式:文件缓存和内存缓存。 文件缓存通常涉及将数据持久化到磁盘上,以便在后续请求时快速加载。这种缓存可以使用不同的格式,如XML、序列化的DAT文件或其他...

    实验六 采用高速缓存实现文件读写

    下面是一个简单的示例程序,展示了如何使用高速缓存实现文件读写。 首先,我们需要建立两个文件句柄,一个用于读取源文件,另一个用于写入目标文件。然后,我们可以使用 ReadFile 函数读取源文件的内容,并将其写入...

    Java cache 实现

    我们可以根据需要选择不同的缓存实现方式,如使用 Ehcache、 Hazelcast 等第三方缓存框架。 缓存的优点 使用缓存机制可以带来多种优点,包括: * 提高应用程序的性能和响应速度 * 降低系统的负载和延迟 * 缩短...

    java map 实现缓存技术

    总的来说,Java Map提供了一种简单而有效的方式实现缓存技术。开发者可以根据具体需求选择合适的Map实现,并结合各种策略来管理和维护缓存,以提升系统的响应速度和效率。在实际应用中,还可以考虑使用第三方库如...

    分布式缓存架构1.docx

    为了更好地理解分布式缓存的概念,我们首先来看一种简单的本地缓存实现方式——基于`Map`集合的缓存。 ##### 1. 定义Map缓存工具类 ```java @Component public class MapEhcaChe, V> { private Map, V> ...

    更简单的Java缓存框架 jscache.docx

    jscache是一个轻量级、易用的Java缓存框架,它基于面向切面编程(AOP)原理实现,支持灵活配置缓存策略,并提供了多种缓存实现方式。通过使用jscache,开发者能够更加简单高效地管理应用中的缓存数据,提高系统的...

    网络数据缓存的一种快速实现方式

    本文将详细探讨一种快速实现网络数据缓存的方法,主要关注`Cache`, `Volley` 和 `ImageLoader` 这三个关键概念。 首先,我们来理解`Cache`(缓存)的基本原理。缓存是存储在本地的数据副本,当应用需要数据时,它会...

    基于Redis的UniEAP缓存实现

    本文将深入探讨基于Redis的UniEAP缓存实现,如何使用Redis替换原有的Ehcache缓存,并讨论相关的优势和注意事项。 首先,让我们了解一下 UniEAP 开发平台。UniEAP 是一个企业级应用开发框架,它提供了丰富的功能模块...

Global site tag (gtag.js) - Google Analytics