gpt4 book ai didi

ruby - 高效的 Ruby LRU 缓存

转载 作者:数据小太阳 更新时间:2023-10-29 06:29:35 24 4
gpt4 key购买 nike

使用任意 Ruby 对象作为基于最近最少使用算法过期的键来构建缓存的最有效方法是什么。它应该使用 Ruby 的正常哈希语义(不等于?)

最佳答案

我知道它晚了几年,但我刚刚实现了我认为是 Ruby 最快的 LRU 缓存。

它还经过测试,可以在多线程环境中安全使用。

https://github.com/SamSaffron/lru_redux


注意:在 Ruby 1.9 中 Hash 是有序的,所以你可以在几行代码中欺骗并构建最快的 LRU 缓存

class LruRedux::Cache19

def initialize(max_size)
@max_size = max_size
@data = {}
end

def max_size=(size)
raise ArgumentError.new(:max_size) if @max_size < 1
@max_size = size
if @max_size < @data.size
@data.keys[0..@max_size-@data.size].each do |k|
@data.delete(k)
end
end
end

def [](key)
found = true
value = @data.delete(key){ found = false }
if found
@data[key] = value
else
nil
end
end

def []=(key,val)
@data.delete(key)
@data[key] = val
if @data.length > @max_size
@data.delete(@data.first[0])
end
val
end

def each
@data.reverse.each do |pair|
yield pair
end
end

# used further up the chain, non thread safe each
alias_method :each_unsafe, :each

def to_a
@data.to_a.reverse
end

def delete(k)
@data.delete(k)
end

def clear
@data.clear
end

def count
@data.count
end

# for cache validation only, ensures all is sound
def valid?
true
end
end

关于ruby - 高效的 Ruby LRU 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1933866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com