Ruby对象缓存

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

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

有没有解决这个问题的方法WeakRef的文档建议使用WeakHash类,但实际使用它似乎不可接受,尽管它与我认为我的项目所需的非常接近.

解决方法

类似于WeakHash的东西会做到这一点.这是一个更完整的实现,可以处理Fixnums,Symbols和Floats(以及其他不可变类型,如果您将它们添加到列表中):
class WeakHash < Hash
  def []=(k,v)
    if(![Fixnum,Symbol,Float].include? k.class)
      k = WeakRef.new(k)
    end
    if(![Fixnum,Float].include? v.class)
      v = WeakRef.new(v)
    end
    super k,v
  end
end

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...