packages feed

sprinkles-0.3.5.0: src/Web/Sprinkles/Cache/Memcached.hs

{-#LANGUAGE NoImplicitPrelude #-}
{-#LANGUAGE ScopedTypeVariables #-}
{-#LANGUAGE OverloadedStrings #-}
module Web.Sprinkles.Cache.Memcached
where

import ClassyPrelude
import Web.Sprinkles.Cache
import Data.Time.Clock.POSIX
import qualified Data.HashMap.Strict as HashMap
import Data.Default
import qualified Database.Memcached.Binary.Maybe as Memcached

memcachedCache :: IO (Cache ByteString ByteString)
memcachedCache = do
    let connectInfo :: Memcached.ConnectInfo = def
        withConnection = Memcached.withConnection connectInfo
        expiry = 60
    return
        Cache
            { cacheGet = \key -> do
                lazyVal <- withConnection $ Memcached.get_ key
                return $ toStrict <$> lazyVal
            , cachePut = \key val -> do
                withConnection $ Memcached.set 0 expiry key (fromStrict val)
                return ()
            , cacheDelete = \key -> do
                withConnection $ Memcached.delete key
                return ()
            , cacheVacuum = return 0
            }