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 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 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-architecture.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-architecture.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 builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |