设为首页 加入收藏

TOP

用Java写一个分布式缓存——缓存淘汰算法(二)
2023-07-25 21:42:06 】 浏览:62
Tags:Java
put(key, value); } return value; } private boolean removeCache(Integer historyCount) { return historyCount >= putStandard; } public void setPutStandard(int putStandard) { this.putStandard = putStandard; } @Override public void setCallback(Callback<K, V> callback) { super.setCallback(callback); } public void setHistoryListCallback(Callback<K, V> callback) { historyList.setCallback((Callback<Object, Integer>) callback); } }

LRU-K能降低缓存污染发生的概率,但是需要额外记录对象访问次数,内存消耗较大。

测试

class LRUCacheTest {

    @Test
    void lru(){
        CacheStrategy<Integer, Integer> lruCache = new LRUCache<>(5);
        lruCache.setCallback((integer, integer2) -> System.out.println("淘汰"+integer+"="+integer2));
        lruCache.put(1,1);
        lruCache.put(2,2);
        lruCache.put(3,3);
        lruCache.put(4,4);
        lruCache.put(5,5);
        lruCache.put(6,6);
        List list = lruCache.list();
        System.out.println(list);
    }

}
淘汰1=1
[2=2, 3=3, 4=4, 5=5, 6=6]
class LRUKCacheTest {

    @Test
    void lrukCacheTest() {
        LRUKCache<Integer, Integer> lrukCache = new LRUKCache<>(2,3,1);
        lrukCache.setHistoryListCallback((integer, integer2) -> System.out.println("记录队列淘汰"+integer+"="+integer2));
        lrukCache.setCallback((integer, integer2) -> System.out.println("缓存淘汰"+integer+"="+integer2));
        lrukCache.get(1);
        lrukCache.get(1);
        lrukCache.get(1);
        lrukCache.get(2);
        lrukCache.get(2);
        lrukCache.get(2);
        lrukCache.get(3);
        lrukCache.get(3);
        lrukCache.get(3);
        lrukCache.get(4);
        lrukCache.get(4);
        lrukCache.get(4);
        lrukCache.put(1,2);
        lrukCache.put(2,2);
        lrukCache.put(3,2);
        lrukCache.put(4,2);
        List list = lrukCache.list();
        System.out.println(list);
    }
}
记录队列淘汰1=3
缓存淘汰2=2
[3=2, 4=2]
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇常见限流算法 下一篇学习笔记——Mybatis逆向工程MBG..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目