This is the source code for this post, a simple ETS based cache.
For the original version, see the 0.1 tag
The updated code now has a separate process to handle the expirations, which is a regular gen_server. To start it, just do:
simple_cache_expirer:start_link()
simple_cache:init(my_cache_name).
The following call will lookup my_key in the cache named my_cache_name, and on a MISS will call the given fun, caching its result for 3600000 milliseconds.
simple_cache:get(my_cache_name, 3600000, my_key, fun() ->
io:format("This fun will be called on a cache miss~n"),
timer:sleep(5000)
this_value_will_be_cached
end)
simple_cache:flush(my_cache_name).
simple_cache:flush(my_cache_name, my_key).