美文网首页
可过期的Map2

可过期的Map2

作者: engineer_tang | 来源:发表于2023-08-10 10:59 被阅读0次

第一步:引入guava的maven依赖

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>30.1.1-jre</version>
        </dependency>

第二步:编写具体实现

 //异步监听
    private RemovalListener<String, AtomicLong> removealListener = RemovalListeners.asynchronous(notification -> {
        RemovalCause cause = notification.getCause();
        String key = notification.getKey();
        AtomicLong value = notification.getValue();
        System.out.println("#######################%%%");
        log.error("#########################");
        switch (cause) {
            case EXPIRED:
                log.error("时间过期,数据KEY:{}", JSON.toJSON(key));
                break;
            case SIZE:
                log.error("超出容量,数据KEY:{}", JSON.toJSON(key));
                break;
            case COLLECTED:
                break;
            default:
                return;
        }
    }, Executors.newSingleThreadExecutor());

    private Cache<String, AtomicLong> cache = CacheBuilder.newBuilder()
            .expireAfterAccess(1, TimeUnit.DAYS)
            .initialCapacity(3)
            .maximumSize(7)
            .removalListener(removealListener).build();


    private ConcurrentMap<String, AtomicLong> cacheInfoMap = cache.asMap();


    public void putValue(String key, long value) {
        AtomicLong atomicLong = cacheInfoMap.get(key);
        if (Objects.isNull(atomicLong)) {
            atomicLong = new AtomicLong(0L);
        }
        atomicLong.addAndGet(value);
        cacheInfoMap.put(key, atomicLong);
    }

    public Long getValue(String key) {
        AtomicLong atomicLong = cacheInfoMap.get(key);
        if (Objects.isNull(atomicLong)) {
            return -1L;
        } else {
            return atomicLong.get();
        }
    }

相关文章

  • 指针问题

    Map1和Map2里面的value都指向了同一个People所以在Map2里面取出People还是修改值,还是会导...

  • HashMap源码解析 一

    HashMap继承自AbstractMap类实现的接口有三种1、 Map2、 Cloneable3、 Serial...

  • 纯函数式状态(2)

    更为通用的状态行为数据类型我们写过的函数——unit、map、map2、flatMap和sequence都不是专门...

  • 保质期

    肉罐头会过期,凤梨酥会过期,维他命会过期,甚至是创可贴都有保质期,时间到了,一切也就失去意义了...这也就是为什么...

  • 健康小常识【过期牛奶可以洗脸吗】

    健康小常识【过期牛奶可以洗脸吗】 可以,因为过期奶中含大量乳酸,可软化角质,保湿作用明显。而且,牛奶虽变质,其中的...

  • 文案练习 六一

    过期的身份证 不过期的童心 过期的糖果 不过期的友谊 过期的罐头 不过期的食欲 过期的枣子 不过期的乐趣 过期...

  • 推荐书籍《八百万种死法》

    过期的凤梨罐头,不过期的食欲,过期的底片,不过期的创作欲。过期的PLAYBOY,不过期的性欲,过期的旧书,不过期的...

  • 过期罐头菜

    “过期的菠萝罐头,不过期的食欲;过期的底片,不过期的创作欲;过期的《PlayBoy》,不过期的性欲;过期的旧书,...

  • My Song | 很高兴遇见你,可你已走出我的生命里

    过期的菠萝罐头,不过期的食欲; 过期的底片,不过期的创作欲; 过期的《PlayBoy》,不过期的性欲; 过期的旧书...

  • plink各种格式转换

    PLINK软件输入文件的常见格式类型: 1,一般格式:PED/MAP2,转置格式:TPED/TFAM3,二进制格式...

网友评论

      本文标题:可过期的Map2

      本文链接:https://www.haomeiwen.com/subject/mexzpdtx.html