-
Notifications
You must be signed in to change notification settings - Fork 15
FIFO & LRU & LFU
Tony Shen edited this page Feb 9, 2019
·
6 revisions
在 core 模块中,Memory 的默认实现 FIFOMemoryImpl、LRUMemoryImpl、LFUMemoryImpl 分别使用 FIFO、LRU、LFU 算法来缓存数据。
RxCache 通过使用 LinkedList 存放缓存的 keys、ConcurrentHashMap 存放缓存的数据,可以实现 FIFO 算法。
LRU是Least Recently Used的缩写,即最近最少使用,常用于页面置换算法,是为虚拟页式存储管理服务的。
RxCache 使用 ConcurrentHashMap 和 ConcurrentLinkedQueue 实现该算法。如果某个数据已经存放在缓存中,则从 queue 中删除并添加到 queue 的第一个位置。如果缓存已满,则从 queue 中删除最后面的数据。并把新的数据添加到缓存。
LFU是Least Frequently Used的缩写,即最近最不常用使用。
LRU 是淘汰最长时间未被使用的数据,而 LFU 是淘汰一定时期内被访问次数最少的数据。LFU 会记录数据在一定时间内的使用次数。
import com.safframework.rxcache.RxCache;
import com.safframework.rxcache.memory.impl.LFUMemoryImpl;
/**
* Created by tony on 2018/10/22.
*/
public class TestLFUCache {
public static void main(String args[]) {
RxCache.config(new RxCache.Builder().memory(new LFUMemoryImpl(10)));
RxCache rxCache = RxCache.getRxCache();
rxCache.save("test1",1);
rxCache.save("test2",2);
rxCache.save("test3",3);
rxCache.save("test4",4);
rxCache.save("test5",5);
System.out.println(rxCache.get("test1",Integer.class).getData());
rxCache.save("test6",6);
System.out.println(rxCache.get("test2",Integer.class).getData());
System.out.println(rxCache.get("test3",Integer.class).getData());
System.out.println(rxCache.get("test4",Integer.class).getData());
rxCache.save("test7",7);
rxCache.save("test8",8);
System.out.println(rxCache.get("test2",Integer.class).getData());
System.out.println(rxCache.get("test3",Integer.class).getData());
System.out.println(rxCache.get("test4",Integer.class).getData());
rxCache.save("test9",9);
rxCache.save("test10",10);
rxCache.save("test11",11);
rxCache.save("test12",12);
System.out.println(rxCache.get("test2",Integer.class).getData());
System.out.println(rxCache.get("test3",Integer.class).getData());
System.out.println(rxCache.get("test4",Integer.class).getData());
rxCache.save("test13",13);
rxCache.save("test14",14);
System.out.println(rxCache.get("test1",Integer.class).getData());
rxCache.clear();
rxCache.save("test1",1);
rxCache.save("test2",2);
rxCache.save("test3",3);
rxCache.save("test4",4);
rxCache.save("test5",5);
System.out.println(rxCache.get("test1",Integer.class).getData());
}
}
- General
- Memory
- Persistence
-
Disk
-
Serialization
- Gson
- Fastjson
- Moshi
- Kryo
- Hessian
- FST
- Protobuf
-
Encryption
- AES 128
- DES
-
Serialization
-
Disk
- Cache Statistics
- Spring