Skip to content

Repository files navigation

Pockets

Module VersionHex DocsTotal DownloadLicenseLast Updated

Pockets is an Elixir wrapper around Erlang ETS and DETS, Erlang's built-in solutions for memory- and disk-based term storage. Pockets aims to provide a simple and familiar interface for caching and persisting data by implementing many of the functions found in the built-in Map and Keyword modules. A pocket may hold data in memory or on disk.

For those needing more power or versatility than what :ets or :dets can offer, Elixir includes :mnesia.

Secondly, the docs on erlang.org are a bit rough to look at for Elixir developers, so this package acts as a case study of the differences between the powerful built-in :ets and :dets libraries.

In case it was too subtle, "Pockets" is a name that includes "ETS" for mnemonic purposes.

Installation

Add pockets to your list of dependencies in mix.exs:

defdepsdo[{:pockets,"~> 1.5.0"}]end

Usage

A simple memory-based cache requires no special arguments:

iex>Pockets.new(:my_cache){:ok,:my_cache}iex>Pockets.put(:my_cache,:a,"Apple")|>Pockets.put(:b,"boy")|>Pockets.put(:c,"Charlie"):my_cacheiex>Pockets.get(:my_cache,:c)"Charlie"

Using a disk-based cache is appropriate when you need your data to persist. Just supply a file path as the second argument to Pockets.new/3:

iex>Pockets.new(:on_disk,"/tmp/cache.dets"){:ok,:on_disk}

You can easily populate your pocket with existing data:

iex>Pockets.new(:on_disk,"/tmp/cache.dets"){:ok,:on_disk}iex>Pockets.merge(:on_disk,%{x: "xylophone",y: "yellow"}):on_disk

You can easily inspect your data, e.g. using Pockets.to_map/1:

iex>Pockets.to_map(:on_disk)%{x: "xylophone",y: "yellow"}

See the Pockets module documentation for more info!

Image Attribution

"pocket" by Hilmi Hidayat from the Noun Project

About

Pockets is an Elixir wrapper around Erlang :ets and :dets, a disk-based term storage

Resources

Contributing

Stars

11 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages