FIFO(First in First out),先进先出。
    其实在操作系统的设计理念中很多地方都利用到了先进先出的思想,比如作业调度(先来先服务),为什么这个原则在很多地方都会用到呢?
    因为这个原则简单、且符合人们的惯性思维,具备公平性,并且实现起来简单,直接使用数据结构中的队列即可实现。

    在 FIFO Cache 设计中,核心原则就是:如果一个数据最先进入缓存中,则应该最早淘汰掉。也就是说,当缓存满的时候,应当把最先进入缓存的数据给淘汰掉。

    在 FIFO Cache 中应该支持以下操作:

    • get(key):如果 Cache 中存在该 key,则返回对应的 value 值,否则,返回 -1;
    • set(key,value):如果 Cache 中存在该 key,则重置 value 值;如果不存在该 key,则将该 key 插入到到 Cache中,若 Cache 已满,则淘汰最早进入Cache的数据。
    1. class FIFOCache {
    2. constructor(limit) {
    3. this.limit = limit || 5; // 缓存最大个数
    4. this.map = {}; // 用于缓存的对象
    5. }
    6. set(key, value) {
    7. const { map, limit } = this;
    8. // 判断 map 是否有这个 key
    9. // 这里用 == 而不是 ===,是为了把 null 和 undefined 都过滤,详情看类型转换
    10. if (!Object.prototype.hasOwnProperty.call(map, key)
    11. || map[key] == undefined) {
    12. map[key] = [value];
    13. return;
    14. }
    15. const cacheForKey = map[key];
    16. if (cacheForKey.length === limit) cacheForKey.shift();
    17. cacheForKey.push(value);
    18. }
    19. get(key) {
    20. return this.map[key];
    21. }
    22. clear(key) {
    23. this.map[key] = undefined
    24. }
    25. }
    26. const cache = new FIFOCache();
    27. cache.set('konsoue', 555);
    28. cache.set('konsoue', 55);
    29. cache.set('konsoue', 11);
    30. cache.set('konsoue', 13);
    31. cache.set('konsoue', 12);
    32. cache.clear('konsoue');
    33. cache.set('konsoue', 126);
    34. const list = cache.get('konsoue')
    35. console.log(list);