arbor-lru-cache

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

Warnings:

Please see the README on GitHub at https://github.com/arbor/arbor-lru-cache#readme


[Skip to Readme]

Properties

Versions 0.1.1.0, 0.1.1.0, 0.1.1.1
Change log ChangeLog.md
Dependencies base (>=4.7 && <5), containers, generic-lens, lens, stm [details]
License MIT
Copyright 2018 Arbor Networks
Author Arbor Networks
Maintainer mayhem@arbor.net
Home page https://github.com/arbor/arbor-lru-cache#readme
Bug tracker https://github.com/arbor/arbor-lru-cache/issues
Source repo head: git clone https://github.com/arbor/arbor-lru-cache
Uploaded by arbornetworks at 2018-09-26T05:06:40Z

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Readme for arbor-lru-cache-0.1.1.0

[back to package description]

arbor-lru-cache

A thread-safe LRU cache library.

Example

To use the cache:

main :: IO
main = do
  -- Provide a configuration that includes how many simultaneous in
  -- flight requests are allowed and now many entries the cache can store
  let config = A.CacheConfig
        { A.maxRequestsInFlight = 1
        , A.maxOccupancy        = 1
        }

  -- Create a cache providing the config and functions that handle retrieval
  -- and eviction.
  cache <- A.makeCache config retrieve evict

  -- Perform your lookups
  _ <- A.lookup 1 cache
  _ <- A.lookup 2 cache
  _ <- A.lookup 3 cache

  return ()

-- Implement value retrieval function.  If the same key is looked up multiple
-- times, the cache guarantees that the retrieve function is called only once
-- for that key up until it is evicted.
retrieve :: Int -> IO String
retrieve mk = ...

-- Perform any cleanup that should occur when an entry is evicted
-- Please be aware that if your code is concurrent, the eviction function may
-- be called whilst the you code is concurrently using a value it has looked up.
-- Your code is wholly responsible for ensuring this case still works.
evict :: Int -> String -> IO ()
evict mk mv = ...