package com.linmingliang.myblog.utils;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; /**
* @Author: lml
* @Date: 2018/6/1 17:15
* @Description:
*/
public class MapCache { private static final MapCache mapCache;
private Map<String, CacheObject> map; private MapCache() {
map = new ConcurrentHashMap<>();
} static {
mapCache = new MapCache();
} public static MapCache getMapCache() {
return mapCache;
} /**
* 设置没有过期时间缓存
*
* @param key 键
* @param value 值
*/
public void set(String key, Object value) {
this.set(key, value, -1L);
} /**
* 设置带时间缓存
*
* @param key 键
* @param value 值
* @param time 缓存时间
*/
public void set(String key, Object value, Long time) {
time = time > 0 ? System.currentTimeMillis() / 1000 + time : time;
CacheObject cacheObject = new CacheObject(key, value, time);
map.put(key, cacheObject);
} /**
* 获取缓存
*
* @param key
* @param <T>
* @return
*/
public <T> T get(String key) {
CacheObject cacheObject = map.get(key);
if (cacheObject != null) {
Long currentTime = System.currentTimeMillis() / 1000;
if (cacheObject.getTime() <= 0 || currentTime > cacheObject.getTime()) {
return (T) cacheObject.getValue();
}
}
return null;
} /**
* 删除缓存
*
* @param key 键
*/
public void delete(String key) {
map.remove(key);
} /**
* 清空缓存
*/
public void clear() {
map.clear();
} class CacheObject {
private String key;
private Object value;
private Long time; public String getKey() {
return key;
} public void setKey(String key) {
this.key = key;
} public Object getValue() {
return value;
} public void setValue(Object value) {
this.value = value;
} public Long getTime() {
return time;
} public void setTime(Long time) {
this.time = time;
} public CacheObject(String key, Object value, Long time) {
this.key = key;
this.value = value;
this.time = time;
}
} }

map集合实现缓存的更多相关文章

  1. ES6中的Set和Map集合

    前面的话 在ES6标准制定以前,由于可选的集合类型有限,数组使用的又是数值型索引,因而经常被用于创建队列和栈.如果需要使用非数值型索引,就会用非数组对象创建所需的数据结构,而这就是Set集合与Map集 ...

  2. ES6 Set和Map集合(六)

    一.Set集合创建Set实例:let set = new Set();1.特性:a.Set本身是一个构造函数,用来生成Set数据结构[类比数组结构]b.Set函数可以接受具有Iterable接口的数据 ...

  3. Java版本:识别Json字符串并分隔成Map集合

    前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...

  4. Java常用的几种集合, Map集合,Set集合,List集合

    Java中  Object是所有类的根 Java集合常用的集合List集合.Set集合.Map集合 Map接口常用的一些方法 size() 获取集合中名值对的数量 put(key k, value v ...

  5. Map集合

    1:Map (1)将键映射到值的对象. 一个映射不能包含重复的键:每个键最多只能映射到一个值. 键值对的方式存在 (2)Map和Collection的区别? A:Map 存储的是键值对形式的元素,键唯 ...

  6. MyBatis的一系列问题的处理(遍历Map集合和智能标签和属性和字段不一样的解决办法 和sql片段)(三)

    一.字段名与属性名(数据库的名字)不一样怎么办? 方案一:在小配置中配置一个resultMapper <!--方案一:resultMapper 字段名与属性名不一致 --> <res ...

  7. Map集合及与Collection的区别、HashMap和HashTable的区别、Collections、

    特点:将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值. Map集合和Collection集合的区别 Map集合:成对出现 (情侣)                       ...

  8. java://Comparator、Comparable的用法(按照要求将map集合的键值对进行顺序输出)

    import java.util.*; public class Person implements Comparable<Person>//使Person的属性具有比较性 { priva ...

  9. Java集合类学习笔记(Map集合)

    Map用于保存具有映射关系的数据,因此Map集合里保存着两组数据,一组用于保存Map的key,一组用于保存key所对应的value. Map的key不允许重复. HashMap和Hashtable都是 ...

随机推荐

  1. 深入java----垃圾回收

    Java和C++之间有一睹内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人想出来.-------<深入理解JVM虚拟机> 补充:在无用对象判断这两种方法中,都是靠对 ...

  2. springboot 热部署

    1 pom文件添加 <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...

  3. java基础知识—字符串

    1.声明字符串的方法: String s ="你好" String s=new String("你好"); 2.字符串的长度: 字符串.length(); 3. ...

  4. Mysql基础教程之mysql 设置参数常用方法

    1)设置mysql的全局方法,设置完立刻重启mysqlvim /etc/my.cnf[mysqld]interactive_timeout=1800wait_timeout=1800 全局永久生效现在 ...

  5. Docker多主机互联最佳实践

    在公司使用docker多主机互联时碰到了各种坑.搞清楚后才发现如此简单,以下是根据实际经验的总结. 版本信息 Client: Version: 18.09.0 API version: 1.39 Go ...

  6. 普天同庆,微博开通,从今以后,努力用功! 狗屎一样的顺口溜!Q狗屎!!狗屎。。。。。 测试。。测试。。。没刷过微博。屯里来的。看看啥效果

    普天同庆,微博开通,从今以后,努力用功! 狗屎一样的顺口溜!Q狗屎!!狗屎..... 测试..测试...没刷过微博.屯里来的.看看啥效果

  7. more语法

    二.more 文件内容或输出查看工具 more 是我们最常用的工具之一,最常用的就是显示输出的内容,然后根据窗口的大小进行分页显示,然后还能提示文件的百分比: [root@localhost ~]# ...

  8. Some notes in Stanford CS106A(1)

    Karel world 1.During make a divider operation --int x=5; double y = x/2  =>  y=2 we need sth as a ...

  9. 页面商城总结(一)——HTML部分

    学习编程,与君共勉. 在做过一些页面并且参考了许多商城页面后,对代码的书写和风格也有所体会,再次将我的经验分享给大家,希望大家也能够写出整洁有效的代码.本文主要是针对排版的问题进行总结,代码量较少,希 ...

  10. @RequestParam 和 @ PathVariable 的区别

    @RequestParam 和 @ PathVariable 的区别http://localhost:8080/Springmvc/user/page.do?pageSize=3&pageNo ...