背景需求是,需要一个简单的数据容器对一堆 key-value 进行缓存(什么 redis,memcache 通通都不要,我就想简单的在内存存点数据而已)
容器有两个要求
1.固定容量,满了之后插入新数据就要删除旧数据,删除算法的指导思想是,删除那些越旧读取次数越少的数据
2.数据有效时间,比如设置 10 分钟,10 分钟后读取里面某条数据就应该删掉这条数据并返回 undefined
感觉很简单啊,我用个 Map 来实现就可以了
data = new Map()
data.set(key,{
value:'',//存放的具体数据
timestamp:0,//时间戳,判断是否过期用
count:0//数据被读取的次数
})
但是问题来了,要插入新数据容器已经满了,怎么删除?
我不得根据 timestamp 和 count 这 2 个字段对全部数据进行排序?
排序就得遍历啊,极端情况要是 10 万条数据,每次删除都得遍历一下,这哪受得了
卡在这了,Map 似乎不行?应该选择什么样数据结构和算法来实现这个容器最合适?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.