美文网首页
那些很坑的代码(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