美文网首页
那些很坑的代码(1)——遍历缓存得到未过期的总数

那些很坑的代码(1)——遍历缓存得到未过期的总数

作者: 黄云斌huangyunbin | 来源:发表于2019-04-19 16:34 被阅读0次
public int calculateIpCount() {
        int i = 0;
        for (Map.Entry<Integer, Integer> entry : clientIpCache.asMap().entrySet()) {
            if (clientIpCache.getIfPresent(entry.getKey()) != null) {
                i++;
            }
        }
        return i;
    }

这里的clientIpCache是一个guava的loadingcache

很多人一看没理解这个代码在干嘛。

其实就是为了获取的loadingcache中没过期的key。

当时遍历所有的key去看一下是否过期,真的开销很大啊,经常缓存里会有几十万,甚至上百万的key。遍历一遍的开销真的很大。

那应该怎么做呢,其实很简单:
public int calculateIpCount() {
        clientIpCache.cleanUp();
        return Long.valueOf(clientIpCache.size()).intValue();
    }

当然也会说,cleanUp看起来要删除所有的过期的对象,如果也是要遍历所有的key的话,那还不是一样的啊。

image.png

其实读写操作,都会进到读写的queue,从最早的开始遍历,在过期的key非常少的情况下,很快点遍历到没过期的对象,就停止了。是会好很多的。

相关文章

网友评论

      本文标题:那些很坑的代码(1)——遍历缓存得到未过期的总数

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