基于Java实现缓存Cache的深入分析

 更新时间:2013年06月04日 11:58:32   作者:  
本篇文章是对Java实现缓存Cache进行了详细的分析介绍,需要的朋友参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

原理是使用LinkedHashMap来实现,当缓存超过大小时,将会删除最老的一个元组。
实现代码如下所示
复制代码 代码如下:

import java.util.LinkedHashMap;
import java.util.Map;
public class LRUCache {
 public static class CachedData {
  private Object data = null;
  private long time = 0;
  private boolean refreshing = false;
  public CachedData(Object data) {
   this.data = data;
   this.time = System.currentTimeMillis();
  }
  public Object getData() {
   return data;
  }
  public long getTime() {
   return time;
  }

  public void setTime(long time) {
   this.time = time;
  }

  public boolean getRefreshing() {
      return refreshing;
  }

  public void setRefreshing(boolean b) {
      this.refreshing = b;
  }
 }
 protected static class CacheMap extends LinkedHashMap {
  protected int maxsize = 0;
  public CacheMap(int maxsize) {
   super(maxsize * 4 / 3 + 1, 0.75f, true);
   this.maxsize = maxsize;
  }
  protected boolean removeEldestEntry(Map.Entry eldest) {
   return size() > this.maxsize;
  }
 }
 protected CacheMap map = null;
 public LRUCache(int size) {
  this.map = new CacheMap(size);
 }
 public synchronized void set(Object key, Object value) {
  map.remove(key);
  map.put(key, new CachedData(value));
 }
 public synchronized void remove(Object key) {
  map.remove(key);
 }
 public synchronized CachedData get(Object key) {
  CachedData value = (CachedData) map.get(key);
  if (value == null) {
   return null;
  }
  map.remove(key);
  map.put(key, value);

  return value;
 }

 public int usage() {
  return map.size();
 }

 public int capacity() {
  return map.maxsize;
 }

 public void clear() {
  map.clear();
 }
}

相关文章

  • Java实现模拟机器人对话的示例代码

    Java实现模拟机器人对话的示例代码

    本文主要介绍了Java实现模拟机器人对话的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • JavaSE的三大接口:Comparator,Comparable和Cloneable详解

    JavaSE的三大接口:Comparator,Comparable和Cloneable详解

    这篇文章主要介绍了详解JavaSE中Comparator,Comparable和Cloneable接口的区别的相关资料,希望通过本文大家能彻底掌握这部分内容,需要的朋友可以参考下
    2021-10-10
  • Java多线程之readwritelock读写分离的实现代码

    Java多线程之readwritelock读写分离的实现代码

    这篇文章主要介绍了Java多线程之readwritelock读写分离的相关内容,文中涉及具体实例代码,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • Java Swing JToggleButton开关按钮的实现

    Java Swing JToggleButton开关按钮的实现

    这篇文章主要介绍了Java Swing JToggleButton开关按钮的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Java @Async注解导致spring启动失败解决方案详解

    Java @Async注解导致spring启动失败解决方案详解

    这篇文章主要介绍了Java @Async注解导致spring启动失败解决方案详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 一篇带你解析入门LongAdder源码

    一篇带你解析入门LongAdder源码

    LongAdder类是JDK1.8新增的一个原子性操作类。AtomicLong通过CAS算法提供了非阻塞的原子性操作,因为非常搞并发的请求下AtomicLong的性能是不能让人接受的
    2021-06-06
  • 聊一聊SpringBoot服务监控机制

    聊一聊SpringBoot服务监控机制

    这篇文章主要介绍了聊一聊SpringBoot服务监控机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • ElasticSearch学习之文档API相关操作

    ElasticSearch学习之文档API相关操作

    这篇文章主要为大家介绍了ElasticSearch学习之文档API相关操作,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Springboot使用Logback实现日志配置与异常记录

    Springboot使用Logback实现日志配置与异常记录

    默认情况下,SpringBoot内部使用logback作为系统日志实现的框架,将日志输出到控制台,不会写到日志文件。本篇文章主要讲解下如何自定义logabck.xml以及对logback文件中配置做一个详解,需要的可以参考一下
    2022-11-11
  • 关于SpringGateway调用服务 接受不到参数问题

    关于SpringGateway调用服务 接受不到参数问题

    这篇文章主要介绍了关于SpringGateway调用服务接受不到参数问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12

最新评论


http://www.vxiaotou.com