使用Guava进行高性能线程安全缓存

2024-01-10

我正在尝试实现高性能线程安全缓存。这是我已经实现的代码。我不需要任何按需计算。我可以使用cache.asMap()并安全地检索值吗?即使缓存设置有softValues?

  import java.io.IOException;
  import java.util.concurrent.ConcurrentMap;
  import java.util.concurrent.ExecutionException;
  import java.util.concurrent.TimeUnit;
  import java.util.concurrent.TimeoutException;

  import com.google.common.cache.Cache;
  import com.google.common.cache.CacheBuilder;

  public class MemoryCache {

    private static MemoryCache instance;
    private Cache<String, Object> cache;

    private MemoryCache(int concurrencyLevel, int expiration, int size) throws IOException {

        cache = CacheBuilder.newBuilder().concurrencyLevel(concurrencyLevel).maximumSize(size).softValues()
            .expireAfterWrite(expiration, TimeUnit.SECONDS).build();
    }

    static public synchronized MemoryCache getInstance() throws IOException {
        if (instance == null) {
               instance = new MemoryCache(10000, 3600,1000000);
        }
        return instance;
    }

    public Object get(String key) {
        ConcurrentMap<String,Object> map =cache.asMap();
        return map.get(key);
    }

    public void put(String key, Object obj) {
        cache.put(key, obj);
    }
   }

番石榴贡献者在这里:

是的,这看起来很好,尽管我不确定将缓存包装在另一个对象中的意义是什么。 (还,Cache.getIfPresent(key)完全等价于Cache.asMap().get(key).)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Guava进行高性能线程安全缓存 的相关文章

随机推荐

  • 如何将 DataReader 中的值放入 List 中? [复制]

    这个问题在这里已经有答案了 可能的重复 如何轻松地将 DataReader 转换为 List https stackoverflow com questions 1464883 how can i easily convert datare
  • 使用数学函数获取整数值

    我有一些 LessCSS 本质上是这样的 foo height 20px iconHeight 13px background position 0 height iconHeight 2 然而 这显然是background positio
  • 如何获取EL中当前组件的id

    我正在使用 JSF 和 PrimeFaces 但我需要获取组件 id 的值 因为我正在构建具有不同 id 的动态面板 所以要显示面板 我需要比较是否是当前面板 然后显示它 例如 如果我有下一个面板
  • 从 UWP 项目引用 .NETStandard 2.0 项目

    我正在构建一个 Xamarin 应用程序 并且已在 NETStandard 2 0 类库中实现了核心 使用 Xamarin Forms 它被实现平台特定代码的 iO 和 Android 项目正确引用 问题是 我尝试添加 UWP 项目以便我的
  • relplot seaborn 中的图例大小/标记

    我一直在寻找增加 relplot 中的图例 色调大小的方法 plt rcParams axes labelsize 20 g sns relplot x Time days y Duration Total s hue Outcome da
  • 企业库滚动平面文件未滚动

    我正在尝试轮换日志文件 每周轮换一个 但此配置文件不起作用 如果我将其更改为轮换而不是午夜到分钟 它只会记录一个持续时间为一分钟的单个文件 没有生成新文件 最新版本的企业库是否存在任何已知的错误 这些错误主要集中在滚动平面文件不起作用 我现
  • 在 MAC OS X 10.9.2 上安装 Rails 时遇到问题

    在 Mac 上安装 Rails 时遇到问题 想知道是否有人可以帮助我 dannys mbp 2 Danny1 sudo gem install rails 构建本机扩展 这可能需要一段时间 错误 安装导轨时出错 错误 无法构建 gem 本机
  • 获取对象的AppDomain

    有什么方法可以确定在哪个 AppDomain 中创建了对象或 ObjectHandle 实例 如果您的对象使用 例如 序列化从另一个应用程序域 旅行 到当前应用程序域 那么它本质上是在您当前的应用程序域中 创建 的 源 AppDomain
  • 如何使用VBA查找一个范围是否包含在另一个范围中?

    我在比较两个范围时遇到问题 为了简单起见 我将采用两个简单的范围M6 M10 and M6 M8 我想知道第二个是否包含在第一个中 我想的第一件事是写 Sub example Dim range1 range2 inte As range
  • AWS EBS 中的 ASP.Net Core - 写入权限和 .ebextensions

    我们已在 AWS EBS 上部署了 ASP Net Core 应用程序 但在其上写入文件时遇到问题 访问路径C inetpub AspNetCoreWebApps app App Data file txt被拒绝 I added ebext
  • 使用 OTP 的 Firebase 电话身份验证在发布版本中不起作用

    我在 Android 应用程序中使用 Firebase SDK 进行电话身份验证 OTP 验证 这在调试版本上运行良好 但在发布版本上则不然 在 firebase 项目中添加了我的调试 SHA 1 指纹 在 firebase 项目中添加了我
  • 在 C++17/20 中迭代元组[重复]

    这个问题在这里已经有答案了 有谁知道在 C 17 20 中迭代元组的好 干净的方法吗 假设我们有一些这样的代码 class Test public Test int x x x void Go const std cout lt lt Hi
  • 我的二进制间隙代码解决方案是否正确?那我应该改进什么?

    正整数 N 内的二进制间隙是 N 的二进制表示中两端都被 1 包围的连续零的最大序列 例如 数字 9 具有二进制表示形式 1001 并且包含长度为 2 的二进制间隙 数字 529 具有二进制表示形式 1000010001 并且包含两个二进制
  • java.lang.NullPointerException Hibernate 与 Ehcache 一起使用

    我使用了 Hibernate 4 1 2 和 Ehcache 2 4 3 下载 hibernate 时与 hibernate 一起提供 我的 hibernate cfg xml
  • 有没有办法获取应用于 HTML 片段或页面的所有 CSS 的列表?

    我知道使用 Firefox 的 Firebug 扩展等工具很容易获得应用于 HTML 中单个节点的 CSS 但有没有办法看到all对整个页面或较大的 HTML 片段有效的 CSS 具体来说 我们正在将一个非常大的 CSS 文件清理为较小的模
  • C++ 中 Java 风格的“double”打印

    是否有任何流操纵器的组合 或标准 C 中的任何其他方法 可以让我在打印时获得 正确 的位数double in C 我所说的 正确 数字是指定义的位数here https docs oracle com javase 7 docs api j
  • 如何在 Windows 上安装 lxml

    我正在尝试安装lmxl在我的 Windows 8 1 笔记本电脑上使用 Python 3 4 并惨遭失败 首先 我尝试了简单明了的解决方案 pip install lxml 然而 这并没有奏效 它是这样说的 Downloading unpa
  • 通过生成迁移将索引:unique 添加到 ruby​​ on Rails 中的列

    我知道我可以触摸迁移并添加 add index table name column name unique gt true 但是正确的 Rails 迁移命令如何生成它呢 rails g migration add index to colu
  • /proc/kallsyms 中的 T 和 t 有什么区别

    这是 System map 文本文件的一部分 proc kallsyms ffffffff8106c260 T leave mm ffffffff8106c340 t do flush tlb all ffffffff8106c390 t
  • 使用Guava进行高性能线程安全缓存

    我正在尝试实现高性能线程安全缓存 这是我已经实现的代码 我不需要任何按需计算 我可以使用cache asMap 并安全地检索值吗 即使缓存设置有softValues import java io IOException import jav