Skip to content

系统设计题:缓存类 TipCache设计 #511

@Sunny-117

Description

@Sunny-117

假设你有一个缓存类 TipCache,用于在内存中存储键值对。以下是该类的初始实现:

class TipCache {
    constructor() {
        this._cachePool = {};
    }
    
    set(key, value) {
        this._cachePool[key] = value;
    }
    
    get(key) {
        return this._cachePool[key];
    }
}

export default new TipCache();

任务1:基于上述 TipCache 类,请你完成以下功能:

  • 实现一个 delete 方法,能够根据键删除缓存中的数据。
  • 实现一个 has 方法,检查缓存中是否存在某个键。

任务2:为该缓存类增加以下高级功能:

  • 自动过期机制:增加缓存项的过期时间参数,支持在设置缓存项时传入一个过期时间(以毫秒为单位)。如果缓存项过期,get 方法应该返回 null 或 undefined。
  • LRU (Least Recently Used) 淘汰策略:为 TipCache 类添加 LRU 淘汰策略。在缓存空间满时,删除最久未使用的缓存项。你需要增加一个容量限制参数 maxSize,当缓存数量超过 maxSize 时,自动淘汰最近最少使用的缓存项。

任务3:编写单元测试,确保你的实现能够正确处理以下情况:

  • 正常的 set 和 get 操作。
  • 删除缓存项。
  • 检查缓存项是否存在。
  • 自动过期的缓存项。
  • 当缓存满时,LRU 策略正确执行。

要求:

  • 请使用原生 JavaScript 实现,不依赖第三方库。
  • 代码需具备良好的可读性,并提供必要的注释说明。
  • 所有代码需经过充分的单元测试,并保证通过。

提示

  • 考虑使用 Map 来实现 LRU 淘汰策略。
  • 过期机制可以通过 setTimeout 或存储时间戳来实现。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions