module DB class StringKeyCache(T) @cache = {} of String => T def fetch(key : String) : T value = @cache.fetch(key, nil) value = @cache[key] = yield unless value value end def each_value @cache.each do |_, value| yield value end end def clear @cache.clear end end end