I'm wondering if having problems with "hits DB" might not end up looking like your cache isn't being populated, which it wouldn't be. :) I guess I'd like you to check that %cache has values at the end of fill_cache() before you worry that the values might not stick around. (I'm having trouble believing just changing the my to our really fixes it.) Can you show more code in fill_cache()?