写了一个Java的简单缓存模型
缓存操作接口
- /**
- * 缓存操作接口
- *
- * @author xiudong
- *
- * @param <T>
- */
- public interface Cache<T> {
- /**
- * 刷新缓存数据
- *
- * @param key 缓存key
- * @param target 新数据
- */
- void refresh(String key, T target);
- /**
- * 获取缓存
- *
- * @param key 缓存key
- * @return 缓存数据
- */
- T getCache(String key);
- /**
- * 判断缓存是否过期
- *
- * @param key 缓存key
- * @return 如果缓存过期返回true, 否则返回false
- */
- Boolean isExpired(String key);
- /**
- * 设置缓存过期时间
- *
- * @param key 缓存key
- * @param millsec 缓存过期时间,单位:毫秒
- */
- void setExpired(Long millsec);
- /**
- * 是否存在缓存对象
- *
- * @param key 缓存key
- * @return 存在返回true,不存在返回false
- */
- Boolean exist(String key);
- }
- import java.util.Date;
- /**
- * 缓存实体
- *
- * @author xiudong
- *
- * @param <T>
- */
- public class LastCache<T> {
- /**
- * 上次缓存的数据
- */
- private T data;
- /**
- * 最后刷新时间
- */
- private long refreshtime;
- public LastCache(T data) {
- this(data, new Date().getTime());
- }
- public LastCache(T data, long refreshtime) {
- this.data = data;
- this.refreshtime = refreshtime;
- }
- public T getData() {
- return data;
- }
- public void setData(T data) {
- this.data = data;
- }
- public long getRefreshtime() {
- return refreshtime;
- }
- public void setRefreshtime(long refreshtime) {
- this.refreshtime = refreshtime;
- }
- }
- import java.util.Date;
- import java.util.Map;
- import java.util.concurrent.ConcurrentHashMap;
- /**
- * 简单的缓存模型
- *
- * @author xiudong
- *
- * @param <T>
- */
- public class SimpleCached<T> implements Cache<T> {
- /**
- * 缓存数据索引
- */
- private Map<String, LastCache<T>> cache = new ConcurrentHashMap<String, LastCache<T>>();
- /**
- * 缓存超时时间,单位:毫秒
- */
- private Long expired = 0L;
- public SimpleCached() {
- this(5 * 1000 * 60L);
- }
- public SimpleCached(Long expired) {
- this.expired = expired;
- }
- @Override
- public void refresh(String key, T target) {
- if (cache.containsKey(key)) {
- cache.remove(key);
- }
- cache.put(key, new LastCache<T>(target));
- }
- @Override
- public T getCache(String key) {
- if (!this.exist(key)) {
- return null;
- }
- return cache.get(key).getData();
- }
- @Override
- public Boolean isExpired(String key) {
- if (!this.exist(key)) {
- return null;
- }
- long currtime = new Date().getTime();
- long lasttime = cache.get(key).getRefreshtime();
- return (currtime - lasttime) > expired;
- }
- @Override
- public void setExpired(Long millsec) {
- this.expired = millsec;
- }
- @Override
- public Boolean exist(String key) {
- return cache.containsKey(key);
- }
- }
写了一个Java的简单缓存模型的更多相关文章
- 分享:写了一个 java 调用 C语言 开发的动态库的范例
分享:写了一个 java 调用 C语言 开发的动态库的范例 cfunction.h 代码#pragma once#ifdef __cplusplusextern "C" {#e ...
- 我写了一个java实体类,implements了Serializable接口,然后我如何让serialversionUID自动生成
写了一个java实体类,implements了Serializable接口,让serialversionUID自动生成方法: 1.点击类旁边的警告符号: 2.选择Add generated seria ...
- 师兄写的一个JAVA播放器的源代码(转)
师兄写的一个JAVA播放器的源代码 MediaPlayer.java------------------------------------------------------------------ ...
- 自己写的一个 java swing 的闹钟
上一周新入职,把代码down下来之后,领导和我讲了一些大概的业务以及代码流程(领导是技术出身),领导让我自己先看看代码,然后我看了两天,觉得已经完全可以接任务了,但是领导却迟迟没有分配任务给我,虽然他 ...
- 第一次尝试学习java 安装jdk 与配置环境变量 写第一个java程序 并运行
第一次学习java,今天知道了java之父叫 詹姆斯.高司令 其它的记不住太多,首先我们先来安装jdk 百度搜索jdk12 (现在的jdk为12版本)安装稳定版 找到javaSE12X.. 下 ...
- 使用interllij IDEA 写第一个Java程序
安装interllij IDEA interllij IDEA简称IDEA,是最好用的Java集成开发环境.你只需要安装一个IDEA,就可以立马开始学习Java,不用再费心去配置Java环境. IDE ...
- 001. 使用IDEA新建一个JAVA最简单的Spring MVC JAVAWEB程序
1. 我们打开一个空的IDEA 2. 选择Java之后点击Next 3. 点击Next创建空白工程 4. 给工程取个名字,叫MYIDEA 5. 勾选之后,点击This Window按钮 6. 我们可以 ...
- [Android面试题-7] 写出一个Java的Singleton类(即单例类)
1.首先明确单例的概念和特点: a>单例类只能有一个实例 b>单例类必须自己创建一个自己的唯一实例 c>单例类必须为其他所有对象提供这个实例 2.单例具有几种模式,最简单的两种分别是 ...
- 用intellij idea 写第一个Java程序
Java小白,还不怎么会eclipse,只会在命令行用javac编译并java运行编译后的类. 英文还不好orz 发现创建项目后,能build但就是不能run... 找了半天教程没找着,去官网溜了一下 ...
随机推荐
- CSS 文件引入
CSS 文件引入 <html> <head> <!-- link标签引用其他文件.rel="stylesheet" 引用css.href=" ...
- Linux 文件系统结构、磁盘的管理
1.linux文件系统内没有文件的创建时间. 2.个人版RHEL8.0,RHEL9.企业版RHEL5U4,RHEL5U5. 3.cat /etc/issue查看系统版本的文件. 4.ext2无法灾难恢 ...
- linux 英汉词典程序shell+postgresql版
在linux控制台下工作,有时候遇到不懂的单词,想要找个linux下的词典程序,搜寻无果,只好自己动手写个了. 首先获取词典文本文件,在github上找到一个 建立数据库 create databas ...
- C#使用NPOI导出Excel
当记录数超出65536时,有两种方式处理: 一是调用WriteToDownLoad65536方法建立多个Excel. 二是调用WriteToDownLoad方法在同一个Excel中建多个Sheet. ...
- 尚硅谷面试第一季-13git分支相关命令
课堂重点:分支相关命令 实际应用-工作流程 实操命令及运行结果: 创建master分支并提交 git init git add . git commit -m "V1.0" git ...
- Windows server 2016安装Docker EE
Windows server 2016安装Docker EE 下载 windows server 2016 180天评估版本. 地址:https://www.microsoft.com/en-us/e ...
- VirtualBox运行出现“0x00000000指令引用的0x00000000内存。该内存不能为written” ,错误解决
win7 64位系统,运行virtual box 出现如下错误 错误原因:由于系统主题被破解导致的 解决办法: 1.管理员身份运行UniversalThemePatcher_1.5.22 x64,点击 ...
- .net中文分词 jieba.NET
简介 平时经常用Python写些小程序.在做文本分析相关的事情时免不了进行中文分词,于是就遇到了用Python实现的结巴中文分词.jieba使用起来非常简单,同时分词的结果也令人印象深刻,有兴趣的可以 ...
- Linux下修改用户的UID、GID
01.用户的UID和GID不能被占用 [root@26 ~]# id mvpuid=503(mvp) gid=503(mvp) groups=503(mvp) ###假定我需要设置mvp的uid/gi ...
- pagex/y offsetx/y screenx/y clientx/y 用法及区别
1 pagex/pagey:鼠标相对于整个页面的x/y坐标 注:整个页面的意思就是你整个页面的全部 例如:宽200px 高400px 那么pagex/y他们最大值就是它 2,offsetX/y与pa ...