Guava在插入和删除时调用哪些方法

时间:2015-10-28 13:27:39

标签: java guava

我有自己的缓存:

LoadingCache<String, MT> g = (LoadingCache<String, MT>) CacheBuilder
                .newBuilder().maximumSize(5)
                .build(new CacheLoader<String, MT>() {

                    @Override
                    public MT load(String arg0) throws Exception {
                        System.out.println("load for key " + arg0);
                        if (Singlten.getInstance().mts.containsKey(arg0)) {
                            return Singlten.getInstance().mts.get(arg0);
                        }
                        return null;
                    }

                });

我想知道是否可以(并且由番石榴支持)具有在从缓存中插入和删除数据时调用的函数?

就像我想在cacche

中插入和删除时做一些任务

1 个答案:

答案 0 :(得分:0)

有几种不同的选择,具体取决于您要完成的工作。你可能会更好地直接询问what you're trying to accomplish,而不是如何实现你想要解决的任何潜在问题的解决方案。

也就是说,如果您想知道何时从缓存中手动添加或删除元素(例如,通过.put().invalidate()),请将缓存包装在调用您的ForwardingCache实现中调用这些方法时的函数。

如果您想知道何时自动添加元素(例如,通过在不存在的键上调用LoadingCache.get()),请在调用{{3}时定义的load()方法中调用您的函数}}

如果您想知道从缓存中删除元素的时间(通过逐出或手动删除),请将您的功能注册为CacheBuilder.build()

您当然也可以将这些策略(例如,使用ForwardingCacheRemovalListener)合并到同一个缓存中。