GuavaCache入门

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

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

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

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

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

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


下面是官方的demo

LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()
        .maximumSize(1000)
        .expireAfterWrite(10, TimeUnit.MINUTES)
        .removalListener(MY_LISTENER)
        .build(
            new CacheLoader<Key, Graph>() {
                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<String,String> localCache = CacheBuilder.newBuilder().initialCapacity(1000).maximumSize(10000).
            expireAfterAccess(12, TimeUnit.HOURS).build(new CacheLoader<String, String>() {
        //默认的数据加载器,如果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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值