https://github.com/holsee/lrucacheex
LRUCache in Elixir
https://github.com/holsee/lrucacheex
Last synced: 2 months ago
JSON representation
LRUCache in Elixir
- Host: GitHub
- URL: https://github.com/holsee/lrucacheex
- Owner: holsee
- Created: 2014-12-30T19:38:39.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2014-12-30T19:54:59.000Z (over 10 years ago)
- Last Synced: 2025-02-05T06:44:43.644Z (4 months ago)
- Language: Elixir
- Size: 125 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
LRUCache in Elixir
==================### Description:
A Least Recently Used (LRU) cache is a key-value store that contains a set capacity for the number of elements it holds. When trying to add a new key-value pair, if cache.size == cache.capacity, the Least Recently Used key is removed.
An item in the cache is used every time its value is read, or it is assigned or cached using the cache method.
### Usage
``` elixir
cache = LruCache.new(2)
|> LruCache.cache(:k1, :v1)
|> LruCache.cache(:k2, :v2)
# %LruCache{capacity: 2, lru: [:k1, :k2], size: 2, store: #HashDict<[k2: :v2, k1: :v1]>}cache |> LruCache.read(:k1) # :k2 becomes least recently used key
# {%LruCache{capacity: 2, lru: [:k2, :k1], size: 2, store: #HashDict<[k2: :v2, k1: :v1]>}, :v1}cache |> LruCache.cache(:k3, :v3) # :k2 is dropped and :k3 inserted
# %LruCache{capacity: 2, lru: [:k2, :k3], size: 2, store: #HashDict<[k3: :v3, k2: :v2]>}```
### :dragon_face: Beware :dragon_face:
*Just a quick bash at it for a kata, not really meant for production use.*
_Would probably be better implemented as a GenServer backed by ETS._