利用guava来实现本地的cache缓存
guava是谷歌提供的工具类,功能强大,举个例子,我我想把数据存到本地,该咋办?我们想到的只有是全局的Map和session中。如果我们想实现这个容器的大小呢?时间呢?不好搞吧。
guava就有这样的功能。话不多说 上code
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>
TokenCache.java
package com.mmall.common; import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import lombok.extern.slf4j.Slf4j; import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit; /**
* Created by 敲代码的卡卡罗特
* on 2018/3/11 16:52.
*/
@Slf4j
public class TokenCache {
public static final String TOKEN_PREFIX="token_";
private static LoadingCache<String,String> loadingCache = CacheBuilder.newBuilder().initialCapacity(1000)//初始容量
.maximumSize(10000) //最大缓存数据量
.expireAfterAccess(12, TimeUnit.HOURS) //过期清除
.removalListener(new RemovalListener<String, String>() { //设置监听事件,就是在 删除key的时候触发这个事件
@Override
public void onRemoval(RemovalNotification<String, String> notification) {
System.out.println(registerCache.size()+"---------------");
String email = notification.getValue();
String key = notification.getKey();
RemovalCause cause = notification.getCause();
System.out.println("email===="+email);
System.out.println("key===="+key);
System.out.println("cause===="+cause);
}
})
.build(new CacheLoader<String, String>() { //缓存规则,功能很鸡肋 不知道干嘛的 没用到过。
@Override
public String load(String s) throws Exception {
return "null";
}
}); public static void setKey(String key,String val){
loadingCache.put(key,val);
} public static String getKey(String key){
String val=null;
try {
val = loadingCache.get(key);
} catch (ExecutionException e) {
e.printStackTrace();
log.error("缓存中没有该key");
}
return val;
} //删除key的几个方法
//任何时候,你都可以显式地清除缓存项,而不是等到它被回收: //个别清除:Cache.invalidate(key)
//批量清除:Cache.invalidateAll(keys)
//清除所有缓存项:Cache.invalidateAll() }
利用guava来实现本地的cache缓存的更多相关文章
- google guava cache缓存基本使用讲解
代码地址:https://github.com/vikde/demo-guava-cache 一.简介 guava cache是google guava中的一个内存缓存模块,用于将数据缓存到JVM内存 ...
- spring boot guava cache 缓存学习
http://blog.csdn.net/hy245120020/article/details/78065676 ****************************************** ...
- Guava 源码分析(Cache 原理 对象引用、事件回调)
前言 在上文「Guava 源码分析(Cache 原理)」中分析了 Guava Cache 的相关原理. 文末提到了回收机制.移除时间通知等内容,许多朋友也挺感兴趣,这次就这两个内容再来分析分析. 在开 ...
- [js开源组件开发]localStorage-cache本地存储的缓存管理
localStorage-cache本地存储的缓存管理 距离上次的组件开发有近三个月的时间了,最近一直在做一些杂事,无法静下心来写写代码,也是在学习emberjs,在emberjs中有一个很重要的东西 ...
- Guava 源码分析之Cache的实现原理
Guava 源码分析之Cache的实现原理 前言 Google 出的 Guava 是 Java 核心增强的库,应用非常广泛. 我平时用的也挺频繁,这次就借助日常使用的 Cache 组件来看看 Goog ...
- 注释驱动的 Spring cache 缓存介绍
概述 Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使 ...
- [转]注释驱动的 Spring cache 缓存介绍
原文:http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/ 概述 Spring 3.1 引入了激动人心的基于注释(an ...
- paip.cache 缓存架构以及性能提升总结
paip.cache 缓存架构以及性能提升总结 1 缓存架构以及性能(贯穿读出式(LookThrough) 旁路读出式(LookAside) 写穿式(WriteThrough) 回写式 ...
- 注释驱动的 Spring cache 缓存介绍--转载
概述 Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使 ...
随机推荐
- HDOJ2025_查找最大元素
一道简单题 HDOJ2025_查找最大元素 #include<stdio.h> #include<stdlib.h> #include<ctype.h> #incl ...
- 队列----java实现
FIFO:先进先出 存储单元: public class Node { /* 元素有两部分: 元素 下一个元素的引用 */ Object data;//数据域 Node next; //指针域 pub ...
- 使用TensorFlow实现分类
这一节使用TF搭建一个简单的神经网络用于分类任务,首先把需要的包引入,另外为了防止在多次运行中一些图中的tensor在内存中影响实验,采取重置操作: import tensorflow as tf i ...
- python---random模块详解
在python中用于生成随机数的模块是random,在使用前需要import, 下面看下它的用法. random.random random.random()用于生成一个0到1的随机符点数: 0 &l ...
- File操作
对文件进行操作(只操作小文件) bool Exists(string path) 判断文件是否存在 FileStream Create(string path) 创建文件 void Move(stri ...
- Play on Words HDU - 1116(欧拉路判断 + 并查集)
题意: 给出几个单词,求能否用所有的单词成语接龙 解析: 把每个单词的首字母和尾字母分别看作两个点u 和 v,输入每个单词后,u的出度++, v的入度++ 最后判断是否能组成欧拉路径 或 欧拉回路,当 ...
- Codeforces Round #428 (Div. 2)A,B,C
A. Arya and Bran time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- 【 Gym 101116K 】Mixing Bowls(dfs)
BUPT2017 wintertraining(15) #4H Gym - 101116K 题意 给定一个菜谱,大写的单词代表混合物,小写的代表基础原料.每个混合物由其它混合物或基础原料组成,不会间接 ...
- mysql中存储过程
存储过程procedure 存储过程,其本质还是函数——但其规定:不能有返回值: 定义形式: 说明: 1,in:用于设定该变量是用来“接收实参数据”的,即“传入”:默认不写,就是in 2,out:用于 ...
- 02 自学Aruba之无线频段---ISM频段及UNII频段
点击返回:自学Aruba之路 02 自学Aruba之无线频段---ISM频段及UNII频段 1. 无线频段-ISM频段 ISM频段即工业,科学和医用频段.一般来说世界各国均保留了一些无线频段,以用于工 ...