Clojure Redis client & message queue.
Clojure Redis client & message queue.
Handles socket connection lifecycle. Pool is implemented with Apache Commons pool. Originally adapted from redis-clojure.
Handles socket connection lifecycle. Pool is implemented with Apache Commons pool. Originally adapted from redis-clojure.
Alpha - subject to change. Distributed lock implementation for Carmine based on work by Ronen Narkis and Josiah Carlson. Redis 2.6+.
Redis keys:
Ref. http://goo.gl/5UalQ for implementation details.
Alpha - subject to change. Distributed lock implementation for Carmine based on work by Ronen Narkis and Josiah Carlson. Redis 2.6+. Redis keys: * carmine:lock:<lock-name> -> ttl str, lock owner's UUID. Ref. http://goo.gl/5UalQ for implementation details.
Carmine-backed Clojure message queue, v2. All heavy lifting by Redis.
Uses an optimized message circle architecture that is simple, reliable, and has pretty good throughput and latency.
See mq-diagram.svg
in repo for diagram of architecture,
Ref. http://antirez.com/post/250 for initial inspiration.
Message status e/o: nil - Not in queue or already GC'd :queued - Awaiting handler :queued-with-backoff - Awaiting handler, but skip until backoff expired :locked - Currently with handler :locked-with-requeue - Currently with handler, will requeue when done :done-awaiting-gc - Finished handling, awaiting GC :done-with-backoff - Finished handling, awaiting GC, but skip until dedupe backoff expired :done-with-requeue - Will requeue, but skip until dedupe backoff expired
Redis keys (all prefixed with carmine:mq:<qname>:
):
messages - hash: {mid mcontent} ; Message content
messages-rq - hash: {mid mcontent} ; '' for requeues
lock-times - hash: {mid lock-ms} ; Optional mid-specific lock duration
lock-times-rq - hash: {mid lock-ms} ; '' for requeues
udts - hash: {mid udt-first-enqueued}
locks - hash: {mid lock-expiry-time} ; Active locks
backoffs - hash: {mid backoff-expiry-time} ; Active backoffs
nattempts - hash: {mid attempt-count}
done - mid set: awaiting gc, etc.
requeue - mid set: awaiting requeue ; Deprecated
mids-ready - list: mids for immediate handling (push to left, pop from right)
mid-circle - list: mids for maintenance processing (push to left, pop from right)
ndry-runs - int: num times worker(s) have lapped queue w/o work to do
isleep-a - list: 0/1 sentinel element for interruptible-sleep
isleep-b - list: 0/1 sentinel element for interruptible-sleep
Carmine-backed Clojure message queue, v2. All heavy lifting by Redis. Uses an optimized message circle architecture that is simple, reliable, and has pretty good throughput and latency. See `mq-diagram.svg` in repo for diagram of architecture, Ref. http://antirez.com/post/250 for initial inspiration. Message status e/o: nil - Not in queue or already GC'd :queued - Awaiting handler :queued-with-backoff - Awaiting handler, but skip until backoff expired :locked - Currently with handler :locked-with-requeue - Currently with handler, will requeue when done :done-awaiting-gc - Finished handling, awaiting GC :done-with-backoff - Finished handling, awaiting GC, but skip until dedupe backoff expired :done-with-requeue - Will requeue, but skip until dedupe backoff expired Redis keys (all prefixed with `carmine:mq:<qname>:`): * messages - hash: {mid mcontent} ; Message content * messages-rq - hash: {mid mcontent} ; '' for requeues * lock-times - hash: {mid lock-ms} ; Optional mid-specific lock duration * lock-times-rq - hash: {mid lock-ms} ; '' for requeues * udts - hash: {mid udt-first-enqueued} * locks - hash: {mid lock-expiry-time} ; Active locks * backoffs - hash: {mid backoff-expiry-time} ; Active backoffs * nattempts - hash: {mid attempt-count} * done - mid set: awaiting gc, etc. * requeue - mid set: awaiting requeue ; Deprecated * mids-ready - list: mids for immediate handling (push to left, pop from right) * mid-circle - list: mids for maintenance processing (push to left, pop from right) * ndry-runs - int: num times worker(s) have lapped queue w/o work to do * isleep-a - list: 0/1 sentinel element for `interruptible-sleep` * isleep-b - list: 0/1 sentinel element for `interruptible-sleep`
Carmine-backed Ring session store.
Carmine-backed Ring session store.
Semi-automatic archival datastore layer for Carmine. Use multiple Redis instances (recommended) or Redis databases for local key namespacing.
Redis keys:
ensure-ks
fail should throwSemi-automatic archival datastore layer for Carmine. Use multiple Redis instances (recommended) or Redis databases for local key namespacing. Redis keys: * carmine:tundra:evictable - set, ks for which `ensure-ks` fail should throw
Secondary Redis server DataStore implementation for Tundra.
Secondary Redis server DataStore implementation for Tundra.
No vars found in this namespace.
Simple disk-based DataStore implementation for Tundra.
Simple disk-based DataStore implementation for Tundra.
Faraday (DynamoDB) DataStore implementation for Tundra.
Use AWS Data Pipeline to setup scheduled backups of DynamoDB table(s) to S3 (there is a template pipeline for exactly this purpose).
Faraday (DynamoDB) DataStore implementation for Tundra. Use AWS Data Pipeline to setup scheduled backups of DynamoDB table(s) to S3 (there is a template pipeline for exactly this purpose).
AWS S3 (clj-aws-s3) DataStore implementation for Tundra.
AWS S3 (clj-aws-s3) DataStore implementation for Tundra.
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close