You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构建键为大小写不敏感字符串的Guava LoadingCache

实现Guava LoadingCache的大小写不敏感键

完全可行,你不需要让调用者提前转换键的大小写,只需通过Guava的CacheBuilder.keyEquivalence()方法自定义键的等价性判断逻辑,就能让缓存自行处理大小写不敏感的匹配。

具体实现步骤

1. 定义大小写不敏感的键等价规则

创建一个Equivalence<String>实例,重写等价性判断和哈希计算逻辑:

Equivalence<String> caseInsensitiveEquivalence = new Equivalence<String>() {
    @Override
    protected boolean doEquivalent(String a, String b) {
        // 忽略大小写判断两个字符串是否等价
        return a.equalsIgnoreCase(b);
    }

    @Override
    protected int doHash(String s) {
        // 基于小写字符串计算哈希值,保证哈希一致性
        return s.toLowerCase().hashCode();
    }
};

2. 构建带有自定义等价规则的LoadingCache

在缓存构建时指定上述等价规则:

LoadingCache<String, MyObject> myCache = CacheBuilder.newBuilder()
        .keyEquivalence(caseInsensitiveEquivalence)
        .build(new CacheLoader<String, MyObject>() {
            @Override
            public MyObject load(final String key) {
                // 这里可以直接使用调用者传入的原key,无需转换
                // 如果业务方法需要统一大小写的键,可在这里转成小写/大写后传入
                return myMethod(key);
            }
        });

关键说明

  • 缓存会依据自定义的等价规则判断键是否匹配,调用者传入"KEY"、"key"或"Key"都会命中同一个缓存条目。
  • 哈希计算使用小写字符串的哈希值,确保相同语义的键(大小写不同)会被映射到哈希表的同一个桶,避免缓存击穿或重复加载。
  • 如果你的myMethod依赖键的原始大小写格式,直接使用传入的key即可;若业务需要统一格式,可在load方法内部自行转换。

内容的提问来源于stack exchange,提问作者user3130010

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 17:58:13