当前位置: 首页 > news >正文

java map cache_java Map实现的cache manager

一个模仿memcached的JAVA虚拟缓存工具,可以缓存java对象

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.util.concurrent.ConcurrentHashMap;

import java.util.Map;

/**

* java Map cache manager 改进版

* 特点:无线程,取出时判断过期,系列化实现的深度克隆,覆盖原则

* 问题: 线程安全,克隆带来的时效损耗

* @author frank

*

*/

public class VirtualCache{

/**

* 开发模式

*/

private boolean isdev = false;

private static String ERROR_SET = "VirtualCache缓存数据异常:key=";

private static String ERROR_GET= "VirtualCache取出数据异常:key=";

/**

* 虚拟缓存

*/

private Map cache = new ConcurrentHashMap();

/**

* 过期时间

*/

private Map tasks = new ConcurrentHashMap();

public VirtualCache(boolean isdev){

this.isdev = isdev;

}

public VirtualCache(){

}

/**

* 深度克隆

*/

private Object clone(String key,Object obj,boolean isSet){

if(obj == null)

return null;

ByteArrayOutputStream bo = null;

ObjectOutputStream oo = null;

ByteArrayInputStream bi = null;

ObjectInputStream oi = null;

Object value = null;

try {

bo=new ByteArrayOutputStream();

oo = new ObjectOutputStream(bo);

oo.writeObject(obj);

bi=new ByteArrayInputStream(bo.toByteArray());

oi=new ObjectInputStream(bi);

value = oi.readObject();

} catch (Exception e) {

this.printError(e, key,isSet);

} finally{

if(oo != null)

try {

oo.close();

} catch (Exception e) {

this.printError(e, key,isSet);

}

if(oi != null)

try {

oi.close();

} catch (Exception e) {

this.printError(e, key,isSet);

}

}

return value;

}

/**

* 日志输出

*/

private void printError(Exception e,String key,boolean isSet){

if(isSet)

System.err.println(ERROR_SET + key);

else

System.err.println(ERROR_GET + key);

if(this.isdev)

e.printStackTrace();

}

/**

* 存入缓存

*/

public void set(String key,Object value,long timeout){

this.delete(key);

this.cache.put(key, this.clone(key,value,true));

if(timeout > 0l)

this.tasks.put(key,timeout*1000l + System.currentTimeMillis());

}

/**

* 获取缓存

*/

public Object get(String key){

Long timeout = this.tasks.get(key);

if(timeout != null && timeout <= System.currentTimeMillis())

this.delete(key);

return this.clone(key,this.cache.get(key),false);

}

/**

* 删除缓存

*/

public void delete(String key){

this.cache.remove(key);

this.tasks.remove(key);

}

}

Ehcache&lpar;2&period;9&period;x&rpar; - API Developer Guide&comma; Cache Manager Event Listeners

About CacheManager Event Listeners CacheManager event listeners allow implementers to register callb ...

Java map 详解 - 用法、遍历、排序、常用API等

尊重原创: http://www.cnblogs.com/lzq198754/p/5780165.html 概要: java.util 中的集合类包含 Java 中某些最常用的类.最常用的集合类是 L ...

java map遍历、排序,根据value获取key

Map 四种遍历: Map map = new HashMap(); map.put("one&quot ...

java Map常用方法封装

java Map常用方法封装 CreationTime--2018年7月16日15点59分 Author:Marydon 1.准备工作 import java.util.HashMap; impo ...

Java Map获取key和value 以及String字符串转List方法

一.问题描述 这里描述两个问题: 1.Java Map获取key和value的方法: 2.String字符串转List的方法: 二.解决方法 1.Java Map获取key和value的方法   2. ...

java map添加另一个map时候 键值对的类型要一致

java map添加另一个map时候 键值对的类型要一致

java&colon;Map借口及其子类HashMap五,identityHashMap子类

java:Map借口及其子类HashMap五,identityHashMap子类 了解:identityHashMap子类 一般情况下,标准的Map,是不会有重复的key值得value的,相同的key ...

随机推荐

Python 正则表达式:只要整数和小数

要求用户只能输入数字(包括整数和小数),如何用正则表达式验证用户输入? 有两种思路: 1. 给出正确格式的正则表达式,然后看输入是否合法. 2. 列出所有错误的输入,看输入是否非法. 对于思路1,想想 ...

javascript性能优化总结二(转载)

上面一篇文章大致介绍了一些javascript当中使用的一些小技巧,当下这篇文章继续介绍一下内存管理.松散耦合.性能方面的一些小知识.为避免错误应该注意的点 内存管理 1.循环引用 如果循环引用中包含 ...

IOS开发-本地持久化存储sqlite应用

前言 需求描述 开发测试环境 FMDB介绍 创建工程 一.前言 上一章介绍了如何开发一个IOS应用的入门案例教程:                     我的第一个IOS开发应用    本章主要将介 ...

Broadwell I7-5775c&sol;5675c BSOD 蓝屏问题

今年6月末Intel发布了第五代台式机CPU,代号Broadwell,跳票一年多,仅有两款零售型号,I7-5775C和I5-5675C. 第一时间就买来试用,当时还是在日亚购买的,等待了10天左右终于 ...

MSChart实例

MSChart是VS中自带的图表控件,功能比较强大,效果也比较丰富.下面只提供一个例子,以供新接触的朋友参考. 先看下效果图: 看完效果图上代码啦. 使用这个控件需要先在页面注册一下.

python mysql多条插入

程序的目的是把文本里面的数据存储到数据库中,原来的思路是读一条,插入一条,结果就是时间长的不得了...18万条的数据,真是慢. 后来的想法是把所有的记录都读到一个list里,结果是mysql奔溃go ...

WPF界面设计技巧(7)—模拟电梯升降的缓动动画

原文:WPF界面设计技巧(7)-模拟电梯升降的缓动动画 如同Flash一样,WPF的亮点之一也在于其擅于表现平滑的动画效果,但以移动动画来说,仅凭简单的起始位置.目标位置,所产生的动画仍会非常生硬,这 ...

C&num;学习——简介(第一天)

一.控制台输出 在控制台输出: console.writeline(); console.readkey(); 加上后面一句是为了保证弹窗不会一闪而过. 二.注释 1.单行注释: //int a=90 ...

WinForm 菜单控件

一:MenuStrip 菜单条 MenuStrip 是应用程序菜单条的容器. 二:ToolStripMenuItem 像上面图中, 文件 格式 等这些菜单当中的一级菜单以及文件中的 新建 打开 分割条 ...

torch&period;utils&period;data&period;DataLoader&lpar;&rpar;中的pin&lowbar;memory参数

参考链接:http://www.voidcn.com/article/p-fsdktdik-bry.html 该pin_memory参数与锁页内存.不锁页内存以及虚拟内存三个概念有关: 锁页内存理解( ...

相关文章:

  • java中的链表类_6.JAVA-链表实例
  • java 二分查找 简书_二分查找的三种模板(C++,Java,Python)
  • 用java实现矩阵链乘积_矩阵最优链乘及Java实现
  • java泛型 语法_Java泛型中的? super T语法
  • java 模块化 组件化_关于模块化、组件化的理解
  • java isnull方法_Java 检查判断变量null(空值)的方法示例代码
  • java容器类的实现_java容器类总结——基于JDK1.8
  • MySQL实验7存储过程_存储过程 · MySQL5.7文档 · 看云
  • php mysql insert 默认_PHP MySQL Insert Into
  • 称重机 java_Java实现称重3次找到假球
  • triangle java_LeetCode Triangle Java版本
  • python用户重复输入_在Python中从用户输入中查找重复值
  • java类与类之间的类图_UML类图(Class Diagram)中类与类之间的关系及表示方式(转)
  • java按时间范围过滤_Java列表按日期过滤
  • java员工表代码_基于java+ssh员工考勤管理系统源代码
  • $translatePartialLoader加载失败及解决方式
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 2018一半小结一波
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • Debian下无root权限使用Python访问Oracle
  • Making An Indicator With Pure CSS
  • Redis 中的布隆过滤器
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Vue 动态创建 component
  • vue2.0项目引入element-ui
  • 如何胜任知名企业的商业数据分析师?
  • 深度学习在携程攻略社区的应用
  • 我建了一个叫Hello World的项目
  • zabbix3.2监控linux磁盘IO
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • #HarmonyOS:Web组件的使用
  • #Linux(Source Insight安装及工程建立)
  • #stm32驱动外设模块总结w5500模块
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (6)添加vue-cookie
  • (AngularJS)Angular 控制器之间通信初探
  • (二)丶RabbitMQ的六大核心
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (转)memcache、redis缓存
  • (转载)Linux网络编程入门
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .libPaths()设置包加载目录
  • .net MySql
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/C# 的字符串暂存池
  • .net流程开发平台的一些难点(1)
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • .NET中GET与SET的用法
  • /var/log/cvslog 太大
  • [ C++ ] STL---仿函数与priority_queue
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解