Map作为缓存使用
public class MapCache {
/**
* 默认存储1024个缓存
*/
private static final int DEFAULT_CACHES = 1024;
private static final MapCache INS = new MapCache();
public static MapCache single() {
return INS;
}
/**
* 缓存容器
*/
private static Map<String, CacheObject> cachePool;
public MapCache() {
this(DEFAULT_CACHES);
}
public MapCache(int cacheCount) {
cachePool = new ConcurrentHashMap(cacheCount);
}
/**
* 读取一个缓存
*
* @param key 缓存key
* @param <T>
* @return
*/
public static <T> T get(String key) {
CacheObject cacheObject = cachePool.get(key);
if (null != cacheObject) {
long cur = System.currentTimeMillis() / 1000;
if (cacheObject.getExpired() <= 0 || cacheObject.getExpired() > cur) {
Object result = cacheObject.getValue();
return (T) result;
}
}
return null;
}
/**
* 读取一个hash类型缓存
*
* @param key 缓存key
* @param field 缓存field
* @param <T>
* @return
*/
public <T> T hget(String key, String field) {
key = key + ":" + field;
return this.get(key);
}
/**
* 设置一个缓存
*
* @param key 缓存key
* @param value 缓存value
*/
public static void set(String key, Object value) {
INS.set(key, value, -1);
}
/**
* 设置一个缓存并带过期时间
*
* @param key 缓存key
* @param value 缓存value
* @param expired 过期时间,单位为秒
*/
public void set(String key, Object value, long expired) {
expired = expired > 0 ? System.currentTimeMillis() / 1000 + expired : expired;
CacheObject cacheObject = new CacheObject(key, value, expired);
cachePool.put(key, cacheObject);
}
/**
* 设置一个hash缓存
*
* @param key 缓存key
* @param field 缓存field
* @param value 缓存value
*/
public void hset(String key, String field, Object value) {
this.hset(key, field, value, -1);
}
/**
* 设置一个hash缓存并带过期时间
*
* @param key 缓存key
* @param field 缓存field
* @param value 缓存value
* @param expired 过期时间,单位为秒
*/
public void hset(String key, String field, Object value, long expired) {
key = key + ":" + field;
expired = expired > 0 ? System.currentTimeMillis() / 1000 + expired : expired;
CacheObject cacheObject = new CacheObject(key, value, expired);
cachePool.put(key, cacheObject);
}
/**
* 根据key删除缓存
*
* @param key 缓存key
*/
public static void del(String key) {
cachePool.remove(key);
}
/**
* 根据key和field删除缓存
*
* @param key 缓存key
* @param field 缓存field
*/
public void hdel(String key, String field) {
key = key + ":" + field;
this.del(key);
}
/**
* 清空缓存
*/
public void clean() {
cachePool.clear();
}
static class CacheObject {
private String key;
private Object value;
private long expired;
public CacheObject(String key, Object value, long expired) {
this.key = key;
this.value = value;
this.expired = expired;
}
public String getKey() {
return key;
}
public Object getValue() {
return value;
}
public long getExpired() {
return expired;
}
}
}
转载处:https://blog.csdn.net/xsj_blog/article/details/83056143
Map作为缓存使用的更多相关文章
- java使用Map做缓存你真的用对了吗?弱引用WeakHashMap了解一下
目录 关于缓存我们应该考虑什么?-intsmaze WeakHashMap弱引用-intsmaze 线程安全问题-intsmaze Collections-intsmaze ThreadLocal-i ...
- Java 使用 Map 实现缓存工具
以下代码参考于网上,做了小部分修改. 该代码实现了定时清除临时缓存的功能. 缓存管理类 package com.wbproject.util.cache; import java.time.Local ...
- Map实现缓存
为什么要使用缓存 缓存最终的目的是为减轻服务端压力,减少网络传输请求 客户端缓存 浏览器访问自带缓存~~ 页面缓存 浏览器缓存 App客户端缓存 IOS 前端开发 底层都有缓存技术的 ( ...
- map全局缓存demo
import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.apache.log4j.Logger; ...
- 为什么要用 redis 而不用 map 做缓存?
缓存分为本地缓存和分布式缓存.以 Java 为例,使用自带的 map 或者 guava 实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着 jvm 的销毁而结束,并且在多实例的情况下,每个实例 ...
- Redis和MemCache静态Map做缓存区别
本地缓存和分布式缓存 本地缓存:使用自带的map或者guava实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着jvm的销毁而结束,并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不 ...
- 简单的Map缓存机制实现
大致思路是用一个单例的Map实现,当然此Map得是线程安全的--ConcurrentHashMap 原本项目需求是缓存十条消息,所以打算用Map实现缓存机制.中途夭折下面具体尚未实现... 当然此代码 ...
- Spring缓存机制的理解
在spring缓存机制中,包括了两个方面的缓存操作:1.缓存某个方法返回的结果:2.在某个方法执行前或后清空缓存. 下面写两个类来模拟Spring的缓存机制: package com.sin90lzc ...
- Spring缓存框架原理浅谈
运维在上线,无聊写博客.最近看了下Spring的缓存框架,这里写一下 1.Spring 缓存框架 原理浅谈 2.Spring 缓存框架 注解使用说明 3.Spring 缓存配置 + Ehcache(默 ...
随机推荐
- 豆瓣读书isbn 查询
最近学习微信小程序,做一个类似"书库"的小demo,大致流程使用摄像头获取书本后面的isbn,通过豆瓣读书API得到书本介绍.豆瓣评分.图书评论等信息,然鹅https://api. ...
- hdu1801 01翻转 贪心
题目描述: 对于给出的一个n*m的矩形,它由1和0构成,现在给你一个r*c的矩形空间可以选择,且可以选择无数次(被选中的范围内01翻转),要求问将这个01矩阵全部变成0的最少需要翻多少次,且如果无法实 ...
- seq2seq模型详解及对比(CNN,RNN,Transformer)
一,概述 在自然语言生成的任务中,大部分是基于seq2seq模型实现的(除此之外,还有语言模型,GAN等也能做文本生成),例如生成式对话,机器翻译,文本摘要等等,seq2seq模型是由encoder, ...
- application platform as a service (aPaaS)
Application platform as a service (aPaaS) is a cloud service that provides environments for the deve ...
- Table to List<object> C#
我们有 myobj 是这样的 public class MyObj { public string Name { get; set; } public int ID { get; set; } } 再 ...
- javascript中 encodeURIComponent() 与 encodeURI() 的区别
前言:js 中仅有的几个全局函数中,有两个全局函数可以用来编码url 字符串. 一.encodeURIComponent() 将转义用于分隔 URI 各个部分的标点符号 ,也就是可以编码 " ...
- Test of String
1.前言 这是我出的第一套题目,话说感觉有点晚了,还是在向总安排下出的.我被安排的是字符串方面的内容,这应该相对而言是比较小众的知识点吧,但是一样的有作用的,也有很神的题目.所谓是NOIP模拟题,其实 ...
- [转]Jumpserve跳板机的生产环境应用
Jumpserver是国内一款开源的轻便的跳板机系统,他们的官网:http://www.jumpserver.org/ 使用这款软件意在提高公司内部登录生产环境服务器的便捷性,权限分配细化,以及后台管 ...
- Java集合详解6:这次,从头到尾带你解读Java中的红黑树
<Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...
- Win10,Anaconda,tensorflow-gpu安装教程
,参考于:https://www.cnblogs.com/guoyaohua/p/9265268.html 目录 前言 第一步:安装Anaconda 1.下载和安装 2.配置Anaconda环境变量 ...