前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java之缓存的使用

java之缓存的使用

作者头像
码农王同学
发布2020-03-25 09:51:39
6090
发布2020-03-25 09:51:39
举报
文章被收录于专栏:后端Coder后端Coder

说起缓存,首先映入我们脑海的好像有很多种,比如说java自带的map,业界流行的分布式缓存服务器redis,其实还有mc了,但是mc很少用到,至少自己从未用到过,了解一下就可以了,有的时候,你知道的仅仅需要了解,因为你压根用不到他们,但是我今天要分享的与这种没有一点关系。

今天自己分享的是谷歌提供的一个自带过期时间的map,为啥要分享这篇文章呢,又是自己的一次总结,因为分配给自己的需求里面就是在单机版的服务进行任务的完成,但是当时自己用了另外一个方法去做,但是多人的情况下就出现了问题,所以后来就用到接下来要分享的map了。

首先,我们需要在自己的项目maven的pom文件加上下面的依赖。

代码语言:javascript
复制
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>28.1-jre</version>
</dependency>

接下来,就是需要用谷歌提供的方法进行看下如何使用自带过期时间的map使用了,我这里仅分享一下如何使用这个map的方法咯,其实很简单的。

代码语言:javascript
复制
package com.wpw.learnlearn;


import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import lombok.*;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;

import java.time.Duration;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.TimeUnit;

@Slf4j
public class Test2 {
    public static void main(String[] args) {
        Cache<Object, Object> objectObjectCache = CacheBuilder.newBuilder().expireAfterAccess(Duration.ofMinutes(1)).build();
        ConcurrentMap<Object, Object> objectObjectConcurrentMap = objectObjectCache.asMap();
        objectObjectConcurrentMap.put("test", new User().setName("w").setAge(1));
        Set<Object> keySet = objectObjectConcurrentMap.keySet();
        Set<Object> objectSet = new HashSet<>(keySet);
        objectSet.forEach(System.out::println);
        System.out.println("objectObjectConcurrentMap.getOrDefault(\"test\",\"key对应的值已过期\") = " + objectObjectConcurrentMap.getOrDefault("test", "key对应的值已过期"));
        try {
            TimeUnit.MINUTES.sleep(1);
        } catch (InterruptedException e) {
            log.info("堆栈信息:{}", e);
        }
        Set<Object> keySet1 = objectObjectConcurrentMap.keySet();
        Set<Object> objectSet1 = new HashSet<>(keySet1);
        objectSet1.forEach(System.out::println);
        System.out.println("objectObjectConcurrentMap = " + objectObjectConcurrentMap.getOrDefault("test", "key对应的值已过期,这是默认值"));

    }

    @Data
    @Accessors(chain = true)
    @Builder
    @EqualsAndHashCode
    @NoArgsConstructor
    @AllArgsConstructor
    private static class User {
        private String name;
        private Integer age;
    }
}

运行上面的示例程序,我们可以看到下面的日志信息。

代码语言:javascript
复制
test
objectObjectConcurrentMap.getOrDefault("test","key对应的值已过期") = Test2.User(name=w, age=1)
objectObjectConcurrentMap = key对应的值已过期,这是默认值

Process finished with exit code 0

其实,上面的示例程序现在以我自己总结出来自己的实现过程,在我自己看来还是很实用的,至少它在某些方面帮助了自己很多,为啥要分享出来呢,我倒是希望当那天你遇到了一个类似的需求,发现这篇文章可以帮助到你,或者其他人,或许会觉得开心了起来。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农王同学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档