水木社区手机版
首页
|版面-Rust编程语言(Rust)|
新版wap站已上线
返回
1/1
|
转到
主题:list有什么实现或者替代么?
1楼
|
RunningOn
|
2023-11-03 17:12:21
|
展开
你这个需求叫 LRU cache, rust 有个crate叫 HashLRU,你可以直接用。
【 在 chunhui 的大作中提到: 】
: 发现标准库中的list,没办法直接删除中间的一个结点。而且rust中list本身实现还是挺复杂的。不知道有没有rust的方式来解决我这样的问题。
: 有个hash表。数据来的时候我就找到对应的node(或者插入新node),更新时间。需要定期去把hash中的很久没有更新的node删除。避免被撑爆。
: 我的办法就是。在node插入hash的同时,在一个list中记录这个node的引用。每当这个node更新了时间,就把node从list当前位置摘下来移动到list尾部。这样,这个list的头部就会是最老的那些node。然后没几秒钟去遍历一下list头部。如果过期了。就删除。
: ...................
--
FROM 114.92.200.*
2楼
|
RunningOn
|
2023-11-03 17:14:02
|
展开
如果不是完美契合你的需求,需要修改,你可以看它的代码
【 在 RunningOn 的大作中提到: 】
: 你这个需求叫 LRU cache, rust 有个crate叫 HashLRU,你可以直接用。
--
FROM 114.92.200.*
5楼
|
RunningOn
|
2023-11-03 17:26:57
|
展开
你这就是LRU啊。
无非是你的需求是删除一段时间内没有用过的数据,lruhash实现的是规定了最大数据量,本质上是一样的。旧数据是在队头还是队尾都一样的,队尾也是可以直接访问。
【 在 chunhui 的大作中提到: 】
: 我这个不是lru。我这个是反lru....和cache正相反,hash并不能满足要求。否则我就直接用文中提到的hash了。
--
FROM 114.92.200.*
7楼
|
RunningOn
|
2023-11-03 19:54:15
|
展开
是啊。这难点是LRU,不是Hash,Hash现成的方案很多。
【 在 chunhui 的大作中提到: 】
: 你刚才说的是:
https://gitlab.com/liberecofr/hashlru
这个?
: 我看它里面也用到了hash。或许我可以直接用它这个hash替代我前面说的自己的hash。直接用这个lur就行了。我连自己的hash也省了。还没来得及细看它的行为是不是我要的。
--
FROM 114.92.200.*
9楼
|
RunningOn
|
2023-11-04 09:19:14
|
展开
得不出这个结论吧。
LRU的存在,不是因为他比什么方法更优,而是因为LRU (least recently used,淘汰最久不用的数据)是实实在在的需求,哪怕实现起来费劲或性能不好,也得实现一个。
【 在 AlphaO 的大作中提到: 】
: 这个lru,听起来挺费操作的,每一个插入都要动态维护,但既然有这个库,是否意味着这种每次动态维护的策略,毫无疑问优于每次混乱插入、定期维护一次的策略?
--
修改:RunningOn FROM 114.92.200.*
FROM 114.92.200.*
1/1
|
转到
选择讨论区
首页
|
分区
|
热推
BYR-Team
©
2010.
KBS Dev-Team
©
2011
登录完整版
水木安卓官方客户端