美文网首页
Guava内存缓存Cache存储的使用

Guava内存缓存Cache存储的使用

作者: 运气爆棚lsw | 来源:发表于2022-03-24 16:39 被阅读0次
Guava内存缓存Cache的常见代码示例用法如下,可直接复制在实际项目中进行使用
主要用于缓存使用频率最高且少量的数据,内存缓存主要将数据缓存在内存中,
大数据量请选择Redis数据存储,节省服务器资源
[expireAfterWrite]如果设置此项===》在指定的时间段内没有更新缓存中数据就会移除,需要重新PUT
[expireAfterAccess]如果设置此项===》在指定的时间段内没有读写缓存中数据就会移除,需要重新PUT

一、内存缓存Cache的日常用法

先来看下Cache的接口代码

@ThreadSafe
public interface Cache<K, V> {

  /**
  * 从cache中获取值,如果没有直接返回null
  */
  @Nullable
  V getIfPresent(@Nonnull Object key);

  /**
  * 从cache中获取值,如果没有则通过给出的Function来加载值
  * 如果Function返回的值不为null会被放到缓存中,这个跟后边要讲到的CacheLoad很像
  */
  @Nullable
  V get(@Nonnull K key, @Nonnull Function<? super K, ? extends V> mappingFunction);

  /**
  * 按照给定的key返回一个map类型的集合
  */
  @Nonnull
  Map<K, V> getAllPresent(@Nonnull Iterable<?> keys);

  /**
  * 存值
  */
  void put(@Nonnull K key, @Nonnull V value);

  /**
  * 批量存放
  */
  void putAll(@Nonnull Map<? extends K,? extends V> map);

  /**
  * 将一个key值从缓存中清除,在方法级别有个@CacheEvict注解,其中有个evict,evict的实现也是调用的invalidate,他们最底层的实现是remove
  */
  void invalidate(@Nonnull Object key);


  void invalidateAll(@Nonnull Iterable<?> keys);


  void invalidateAll();

  /**
  * 获取当前缓存中的大概存放值,这个数字不一定准确,因为它可能会包含已经过期/失效的值
  */
  @Nonnegative
  long estimatedSize();

  /**
  * 当前缓存的一些记录,这块需要自己看下具体值才能了解,下边争取列出来这块
  */
  @Nonnull
  CacheStats stats();

  /**
  * 将集合转换为一个ConcurrentMap
  */
  @Nonnull
  ConcurrentMap<K, V> asMap();

  /**
   * 清除缓存中一些过期的值
   */
  void cleanUp();

  /**
   * 设定策略,这个后边我尽量也给列出来一块吧(如果记得)
   */
  @Nonnull
  Policy<K, V> policy();
}

二、业务代码示例参考,可结合业务修改使用

package com.example.demo.dto;

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.util.concurrent.TimeUnit;

/**
 * @author lisanwei24282
 */
@Slf4j
public class CacheTest {
    public static void main(String[] args) throws InterruptedException {
        /**
         * 数据内存缓存
         */
        Cache<String, String> MEMORY_CACHE = CacheBuilder.newBuilder()
                .maximumSize(2)
                /* 设置写缓存后5秒钟过期 */
                .expireAfterWrite(5, TimeUnit.SECONDS)
                /* 设置缓存容器的初始容量为10 */
                .initialCapacity(100)
                /* 设置要统计缓存的命中率 */
                .recordStats()
                /* 设置缓存的移除通知 */
                .removalListener(notification -> log.info("notification = " + notification.getKey() + "数据缓存was removed, cause is " + notification.getCause()))
                .build();

        int count = 1000;
        for (int i = 0; i < count; i++) {
            // TODO 如果缓存中不存在就返回为Null
            // TODO [expireAfterWrite]如果设置是此项===》》在指定的时间段内没有更新缓存中数据就会移除,需要重新PUT
            // TODO [expireAfterAccess]如果设置是此项===》》在指定的时间段内没有读写缓存中数据就会移除,需要重新PUT
            String res = MEMORY_CACHE.getIfPresent("AA");
            if (StringUtils.isBlank(res)) {
                // TODO 这里是实际使用过程中直接调用DB获取数据放入即可
                MEMORY_CACHE.put("AA", "AAA--------------新加入的" + i);
            }
            log.info("res = " + res);
            Thread.sleep(1000);
        }

    }
}


相关文章

  • 高并发系统技术梳理

    缓存 缓存使用常见问题归纳Guava Cache系列之一Guava Cache系列之二Guava Cache系列之...

  • Guava内存缓存Cache存储的使用

    Guava内存缓存Cache的常见代码示例用法如下,可直接复制在实际项目中进行使用 主要用于缓存使用频率最高且少量...

  • Guava Cache用法介绍

    Guava Cache是在内存中缓存数据,相比较于数据库或redis存储,访问内存中的数据会更加高效。Guava官...

  • Guava Cache用法介绍

    Guava Cache的使用场景 参考1 Guava Cache用法介绍2 分布式系统缓存系列之guava cache

  • google guava cache缓存基本使用讲解

    一、简介 guava cache是google guava中的一个内存缓存模块,用于将数据缓存到JVM内存中.实际...

  • java之guava cache应用

    google的guava cache是一个轻量级进程内缓存框架。 如何使用guava cache a. 引入方便,...

  • Guava Cache

    原文 使用Guava cache构建本地缓存 - sameLuo的个人空间 - OSCHINA Guava Cac...

  • Guava缓存

    Guava缓存是谷歌的一种本地缓存,缓存是通过使用本机的内存来存储的,实现原理类似于ConcurrentHashM...

  • Guava Cache系列之二:如何回收缓存

    上一篇文章:Guava Cache系列之一:如何加载缓存 回收缓存方案 Guava Cache提供了三种基本的缓存...

  • guava 本地缓存

    介绍 Guava cache是本地缓存的一种实现。 Guava Cache与ConcurrentMap很相似,但也...

网友评论

      本文标题:Guava内存缓存Cache存储的使用

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