def get(oid)
return nil if oid.nil?
@st.inc(:reads)
hv = hash(oid)
@cache[hv].each do |ce|
if ce.oid == oid
@st.inc(:cache_read_hits)
return ce.obj
end
end
if @db.has_key? oid.to_s
ret = Utility.decode(@db[oid.to_s])
else
@st.inc(:database_read_fails)
return nil
end
@st.inc(:database_reads)
ch = @cache[hv].pop
if ch.dirty? && !ch.dead?
@db[ch.oid.to_s] = Utility.encode(ch.obj)
@st.inc(:database_writes)
if ch.noswap?
@cache[hv].unshift ch
ch = CacheEntry.new
end
end
ch.obj = ret
ch.oid = oid
ch.clean!
@cache[hv].unshift ch
ret
end