博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GuavaCache入门
阅读量:7007 次
发布时间:2019-06-28

本文共 2409 字,大约阅读时间需要 8 分钟。

GuavaCache是Google研发的本地缓存方案,和redis、memcache、ehcache差不多,存储形式都属于Key-Value,都是为了加快程序读取数据的速度而产生的技术。

那么GuavaCache与redis还是有所区别的,相对于redis这种存储在本地磁盘上的key-value数据库不同的是,GuavaCache是存储在内存中的,这也导致了GuavaCache的几个特点:

1,缓存的容量受内存大小影响

2,由于缓存数据在内存中,读取的速度更快

3,这种缓存是线程安全的

这也就说明了GuavaCache的应用场景是:适用于存储一些访问量大,但是数据量极小,且不是特别重要的数据。

下面是官方的demo

LoadingCache
graphs = CacheBuilder.newBuilder() .maximumSize(1000) .expireAfterWrite(10, TimeUnit.MINUTES) .removalListener(MY_LISTENER) .build( new CacheLoader
() { public Graph load(Key key) throws AnyException { return createExpensiveGraph(key); } });复制代码

其中LoadingCache继承了Cache接口,我们利用CacheBuilder初始化Cache的参数,

maximumSize设置缓存的最大容量

expireAfterWritr设置缓存的生存时间,后面是单位TimeUnit.MINUTES代表每分钟,TimeUnit.HOURS代表每小时

我们可以新建一个工具类叫做TokenCache,做一个demo。

** * @ClassName TokenCache * @Description TODO * @Author liumingkang * @Date 2019-01-14 20:18 * @Version 1.0 **/public class TokenCache {    public static final String TOKEN_PREFIX = "token_";    private static LoadingCache
localCache = CacheBuilder.newBuilder().initialCapacity(1000).maximumSize(10000). expireAfterAccess(12, TimeUnit.HOURS).build(new CacheLoader
() { //默认的数据加载器,如果get值时候没有命中缓存的key,则调用此方法 @Override public String load(String s) throws Exception { return "null"; } }); public static void setKey(String key,String value){ localCache.put(key,value); } public static String getKey(String key){ String value = null; try{ value = localCache.get(key); if ("null".equals(value)){ return null; } return value; }catch (Exception e){ e.printStackTrace(); } return null; } public static void removeAll(){ localCache.invalidateAll(); } public static void remove(String key){ localCache.invalidate(key); }}复制代码

我们只实现了基本的get、set、remove方法。这样一个基本的工具类就完成了。

对于登陆时候我们只需执行

TokenCache.setKey(TokenName,Token);复制代码

把token存入TokenCache中,就可以了,和redis的操作很相似。

对于使用TokenCache有一点心得,因为TokenCache是在内存中的,如果你是分布式架构服务层和接口层不在一个服务器上,那么请确保TokenCache使用都在同一台服务器上即同一层。

不然会发生在Service层写入Cache,而接口层读入Cache却找不到的问题。

对于验证码这种极小的缓存,使用tokencache还是一个不错的方案。

如有言辞不准确的地方,请多包涵,我会不断改正的。

转载于:https://juejin.im/post/5c3e03eee51d455221610111

你可能感兴趣的文章