SkillAgentSearch skills...

Pockets

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

Install / Use

/learn @fireproofsocks/Pockets
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

Pockets

Module Version Hex Docs Total Download License Last 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:

def deps do
  [
    {: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_cache
iex> 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

View on GitHub
GitHub Stars11
CategoryDevelopment
Updated1y ago
Forks2

Languages

Elixir

Security Score

75/100

Audited on Feb 7, 2025

No findings