For pooling and caching objects which are costly to create.
##Install
(use 'pool.core)get-pool takes a no argument function for object creation.
(def pool (get-pool (fn [] :heavy-object)))Next, borrow and return from pool.
(borrow pool) ;=> :heavy-object
(return pool :heavy-object)###Keyed Object Pool
get-keypool takes a single arity function for object creation.
(def pool (get-keypool (fn [k] (str :heavy k))))
(borrow pool :object) ;=> ":heavy:object"
; Return key and object
(return pool :object ":heavy:object")get-pool and get-keypool takes optional kwargs for destory, validate,
activate and passivate for finer control of object creation and deletion.
Caching although a different concept is provided in the library for caching objects which are threadsafe in themselves and thus can be shared instead of pooled, but are very costly to create.
get-cache and get are the only available methods to work with. get-cache
take a single arity function on key for object creation.
(require '[pool.cache :as c])
(def cache (c/get-cache (fn [k] (print "once!") (Thread/sleep 1000) k)))
(c/get cache 1) ;=> once! 1
; Safeguards against multiple threads.
(defn double-write [x] (future (c/get cache x)) (future (c/get cache x)))
(double-write 5) ;=> once! ...Copyright © 2014 kul
Distributed under the Eclipse Public License.