4
回答
求助,关于缓存超时实现
滴滴云服务器,限时包月0.9元,为开发者而生>>>   

有一个Map,里面的对象都有超时时间,而当对象到期后,需要对外发出一个通知。

不能每次遍历Map,因为数据量很大很大

<无标签>
举报
刘甘露
发帖于6年前 4回/368阅
共有4个答案 最后回答: 6年前

每个对象的超时时间相同嘛?

如果相同,可以在对象放入MAP的时候同时放入一个LIST,用一个线程从LIST头部读取对象超时时间(移除或SLEEP)?

如果不同,是否可以考虑下SWING下的监听器机制?

我的愚见

--- 共有 1 条评论 ---
刘甘露嗯嗯,非常感谢你的回答啊,我想想看 6年前 回复
这个事情,简单想了一下,只有定时器可以做。将定时器中断的响应函数修正为你的函数。在新数据中产生一个列表,当中断产生查询列表中的最早记录,如果你的过期时间一样的话。不一样需要算法另外修正。而上述的列表就是个FIFO。你可以用滑动窗口,滚动的方式来存储和剔除。

可以做个时间队列 里面存的是map的hash号

 

每次从队列末尾取个hash 看看是否超时,然后就通知

再复杂点 ,每次取到最后一个不超时的 ,然后看过多长时间超时 ,下次到达这个时间后,再取。

这样会精确点。

--- 共有 1 条评论 ---
中山野鬼有一点可以肯定,不能用查询方式,应该用中断方式。 6年前 回复
顶部