Skip to content

nitrogen/nitro_cache

Repository files navigation

NitroCache

NitroCache is a fork of simple_cache modified specifically for the needs of integration with the Nitrogen Web Framework.

The updated code now has a separate process to handle the expirations, which is a regular gen_server. To start it, just do:

nitro_cache_expirer:start_link().

Create a cache

nitro_cache:init(my_cache_name).

Getting a key

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.

nitro_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).

Flushing the cache

    nitro_cache:flush(my_cache_name).

Flushing a key

    nitro_cache:flush(my_cache_name, my_key).

Changes:

Version 0.5.0

  • The mutex server has been pulled out of NitroCache and renamed to Mutagen.

Version 0.4.1

  • Fixed a bug where the mutex wouldn't free if the provided function crashed.

Version 0.4.0

  • Renamed to NitroCache to avoid a name clash (simple_cache is already taken on hex.pm)
  • Requesting a key from a bucket if it has not yet been initialized will automatically instantiate that bucket.
  • NitroCache introduced a mutex system to prevent recalculating the same slow-calculating key when multiple requests come in at same time. When the key's value is calculated, it will return the result to all the waiting requests.
  • Added a cache_exists/1 function.
  • Added a set/4 function.
  • Converted to rebar3

Earlier Version Modifications from the original

  • Requesting a key from a bucket if it has not yet been initialized will automatically instantiate that bucket.
  • Added a cache_exists/1 function.
  • Added a set/4 function.