Ruby对象缓存

Vor*_*ico 5 ruby caching map

我有许多具有唯一ID的Ruby对象,我目前正在哈希中进行缓存.为对象分配ID时,它会进入哈希.缓存已完成,即具有存在于Ruby作用域中的ID的每个对象也应该在缓存中.

但是,一旦它们从所有其他范围中消失,我很难找到从缓存中删除对象的方法.当然,这是因为缓存中包含的对象不会被垃圾回收.

有没有解决这个问题的方法?WeakRef建议一个WeakHash类的文档,但它似乎不适合实际使用,虽然它非常接近我认为我需要的项目.

Lin*_*ios 3

类似于 WeakHash 的东西就可以做到。这是一个更完整的实现,可以处理 Fixnums、Symbols 和 Floats(以及其他不可变类型,如果将它们添加到列表中):

class WeakHash < Hash
  def []=(k, v)
    if(![Fixnum, Symbol, Float].include? k.class)
      k = WeakRef.new(k)
    end
    if(![Fixnum, Symbol, Float].include? v.class)
      v = WeakRef.new(v)
    end
    super k,v
  end
end
Run Code Online (Sandbox Code Playgroud)