我的编程空间,编程开发者的网络收藏夹
学习永远不晚

LocalCache在Java项目中如何实现本地缓存

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

LocalCache在Java项目中如何实现本地缓存

今天就跟大家聊聊有关LocalCache在Java项目中如何实现本地缓存,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

一、本地缓存应用场景

localcache有着极大的性能优势:

单机情况下适当使用localcache会使应用的性能得到很大的提升。

集群环境下对于敏感性要求不高的数据可以使用localcache,只配置简单的失效机制来保证数据的相对一致性。

哪些数据可以存储到本地缓存?

1.访问频繁的数据;

2.静态基础数据(长时间内不变的数据);

3.相对静态数据(短时间内不变的数据)。

二、java本地缓存标准

Java缓存新标准(javax.cache),这个标准由JSR107所提出,已经被包含在Java EE 7中。

特性:
1.原子操作,跟java.util.ConcurrentMap类似
2.从缓存中读取
3.写入缓存
4.缓存事件监听器
5.数据统计
6.包含所有隔离(ioslation)级别的事务
7.缓存注解(annotations)
8.保存定义key和值类型的泛型缓存
9.引用保存(只适用于堆缓存)和值保存定义

但目前应用不是很普遍。

三、java开源缓存框架

比较有名的本地缓存开源框架有:

1.EHCache

EHCache是一个纯java的在进程中的缓存,它具有以下特性:快速,简单,为Hibernate2.1充当可插入的缓存,最小的依赖性,全面的文档和测试。

BUG: 过期失效的缓存元素无法被GC掉,时间越长缓存越多,内存占用越大,导致内存泄漏的概率越大。

2.OSCache

OSCache有以下特点:缓存任何对象,你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。拥有全面的API--OSCache API给你全面的程序来控制所有的OSCache特性。永久缓存--缓存能随意的写入硬盘,因此允许昂贵的创建(expensive-to-create)数据来保持缓存,甚至能让应用重启。支持集群--集群缓存数据能被单个的进行参数配置,不需要修改代码。缓存记录的过期--你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(如果默认性能不需要时)。

3.JCache

Java缓存新标准(javax.cache)

4.cache4j

cache4j是一个有简单API与实现快速的Java对象缓存。它的特性包括:在内存中进行缓存,设计用于多线程环境,两种实现:同步与阻塞,多种缓存清除策略:LFU, LRU, FIFO,可使用强引用。

5.ShiftOne

ShiftOne Java Object Cache是一个执行一系列严格的对象缓存策略的Java lib,就像一个轻量级的配置缓存工作状态的框架。

6.WhirlyCache

Whirlycache是一个快速的、可配置的、存在于内存中的对象的缓存。 

四、LocalCache实现

LocalCache简介

LocalCache是一个精简版本地缓存组件,有以下特点:

1.  有容量上限maxCapacity;
2.  缓存达到容量上限时基于LRU策略来移除缓存元素;
3.  缓存对象的生命周期(缓存失效时间)由调用方决定;
4.  缓存对象失效后,将会有定时清理线程来清理掉,不会导致内存泄漏。
5.  性能比Ehcache稍强。

总体设计

LocalCache总体设计:

1.  缓存元素 CacheElement;
2.  缓存容器 LRULinkedHashMap;
3.  缓存接口 Cache;
4.  缓存组件实现 LocalCache。

详细设计

1.  CacheElement设计

public class CacheElement { private Object key; private Object value; private long createTime; private long lifeTime; private int hitCount; public CacheElement() { } public CacheElement(Object key ,Object value) { this.key = key; this.value = value; this.createTime = System.currentTimeMillis(); }  public Object getKey() { return key; } public void setKey(Object key) { this.key = key; } public Object getValue() { hitCount++; return value; } public void setValue(Object value) { this.value = value; } public long getCreateTime() { return createTime; } public void setCreateTime(long createTime) { this.createTime = createTime; } public int getHitCount() { return hitCount; } public void setHitCount(int hitCount) { this.hitCount = hitCount; } public long getLifeTime() { return lifeTime; } public void setLifeTime(long lifeTime) { this.lifeTime = lifeTime; }  public boolean isExpired() { boolean isExpired = System.currentTimeMillis() - getCreateTime() > getLifeTime(); return isExpired; }  public String toString() { StringBuffer sb = new StringBuffer(); sb.append("[ key=").append(key).append(", isExpired=").append(isExpired())  .append(", lifeTime=").append(lifeTime).append(", createTime=").append(createTime)  .append(", hitCount=").append(hitCount)  .append(", value=").append(value).append(" ]"); return sb.toString(); }   public final int hashCode(){ if(null == key){  return "".hashCode(); } return this.key.hashCode(); }   public final boolean equals(Object object) { if ((object == null) || (!(object instanceof CacheElement))) {  return false; } CacheElement element = (CacheElement) object; if ((this.key == null) || (element.getKey() == null)) {  return false; } return this.key.equals(element.getKey()); }}

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

LocalCache在Java项目中如何实现本地缓存

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

LocalCache在Java项目中如何实现本地缓存

今天就跟大家聊聊有关LocalCache在Java项目中如何实现本地缓存,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、本地缓存应用场景localcache有着极大的性能优势:1.
2023-05-31

在Java中使用 LocalCache如何实现本地缓存

在Java中使用 LocalCache如何实现本地缓存?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。使用场景在Java应用中,对于访问频率高,更新少的数据,通常
2023-05-31

java本地缓存如何实现

Java本地缓存可以通过多种方式实现,以下是其中几种常用的方法:1. 使用HashMap:可以使用java.util.HashMap来创建一个简单的本地缓存。将数据存储为键值对,并且可以根据需要设置过期时间或容量限制。javaMap
2023-10-21

利用Java如何实现本地缓存

本篇文章给大家分享的是有关利用Java如何实现本地缓存,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。使用场景在 Java 应用中,对于访问频率高,更新少的数据,通常的方案是将这
2023-05-31

如何在java项目中操作Redis缓存

这篇文章给大家介绍如何在java项目中操作Redis缓存,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.导入必须的Jar包使用Java操作Redis需要两个必须的Jar包:jedis-2.5.1.jar 和 com
2023-05-31

Ehcache缓存框架如何在Java项目中使用

今天就跟大家聊聊有关Ehcache缓存框架如何在Java项目中使用 ,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言JAVA缓存实现方案有很多,最基本的自己使用Map去构建缓存,或
2023-05-31

在Java项目中如何实现实例化

今天就跟大家聊聊有关在Java项目中如何实现实例化,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java实例化的几种方法总结Java创建有四种方式:(1)用new 语句创建对象,这是
2023-05-31

如何在PHP项目中实现数据缓存和页面预加载?

如何在PHP项目中实现数据缓存和页面预加载?随着互联网的发展,网站和应用程序的性能优化成为了一个重要的议题。其中,数据缓存和页面预加载是提高用户访问速度和改善用户体验的重要手段之一。在PHP项目中实现数据缓存和页面预加载,可以有效地减少数据
如何在PHP项目中实现数据缓存和页面预加载?
2023-11-02

如何在PHP项目中实现数据缓存和页面静态化?

如何在PHP项目中实现数据缓存和页面静态化?随着互联网的快速发展,网站访问量不断增加,如何提高网站的性能成为了开发人员共同面临的问题。在PHP项目中,数据缓存和页面静态化是两种常见的性能优化方法。本文将介绍如何在PHP项目中实现数据缓存和页
如何在PHP项目中实现数据缓存和页面静态化?
2023-11-02

如何在PHP项目中实现国际化和本地化支持?

随着全球化的发展,各种语言和文化之间的交流变得越来越普遍。因此,在开发Web应用程序时,考虑国际化和本地化支持变得越来越重要。在这篇文章中,我们将探讨如何在PHP项目中实现国际化和本地化支持。什么是国际化和本地化?国际化(i18n)和本地化
如何在PHP项目中实现国际化和本地化支持?
2023-11-03

如何在Android项目中是SharedPreferences实现存储

如何在Android项目中是SharedPreferences实现存储?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。SharedPreferences详解Sha
2023-05-31

FloydWarshall算法如何在java项目中实现

这期内容当中小编将会给大家带来有关FloydWarshall算法如何在java项目中实现,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。求一个图中任意两点之间的最短路径 FloydWarshall
2023-05-31

webservice方式如何在java项目中实现

webservice方式如何在java项目中实现?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。具体内容如下1、定义接口package org.enson.cha
2023-05-31

hibernate在java中使用如何实现二级缓存

本篇文章为大家展示了hibernate在java中使用如何实现二级缓存,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Hibernate的二级缓存一、缓存概述缓存(Cache): 计算机领域非常通用的
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录