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(默 ...
随机推荐
- 安装Visual Studio 时窗口闪过就退出
双击安装文件,窗口闪了下就退出了. 解决方法:控制面板 ———程序——程序和功能——打开或关闭Windows功能——关闭NET相关框架. 然后再次安装即可. 参考文献: VS安装程序一闪而过
- vmware-vmx.exe进程应该怎么杀掉
如何解决VMware-vmx.exe无法彻底删除的问题 遇见的问题就是 虚拟机一直黑屏,强制关机之后,无法再次打开的问题. 显示:无法创建新虚拟机: 无法打开配置文件 以独占方式锁定此配置文件失败.另 ...
- 搭建自己的docker镜像
手动构建 1.关键字查找镜像 sudo docker search centos 2.下载基本镜像 sudo docker pull centos 3.启动容器 sudo docker run -d ...
- 达信:深度解读COSO新版企业风险管理框架(ERM)
http://www.sohu.com/a/124375769_489979 2016年6月,美国反欺诈财务报告委员会(The Committee of Sponsoring Organization ...
- jsp获取map
1.简单Map User user = new User(); user.setName("zmy"); user.setAge(); user.setBirthday(new D ...
- html--前端css常用属性
1.颜色属性 <div style="color:blueviolet">ppppp</div> 输入颜色英文单词 <div style=" ...
- hadoop KerberosUtil 做Kerberos认证
网上找了一下,自己写了个KerberosUtil工具类,测试过可以用. 注意这个不是 org.apache.hadoop.security.authentication.util.KerberosUt ...
- shell equal
#!/bin/shzero=0 status=1 let status=0 if [[ $status -eq $zero ]];then echo "bu >= 3.6"e ...
- JavaScriptDOM编程学习笔记(一)DOM概述
首先介绍下DOM,一套对文档的内容进行抽象和概念化的方法.即Document Object Model,当创建了一个网页并加载到Web浏览器中时,DOM就把编写的网页转换为一个文档对象,而通过浏览器提 ...
- python总结二
1.在命令行:dd是删除光标所在的那一整行 yy是复制光标所在的那一整行 p是将已复制的数据在光标的下一行粘贴 P是将已复制的数据在光标的上一行粘贴 2.在命令行中查找的话 从上往下查找:/ 从下往上 ...