[ANN] Carmine v2, an all-Clojure Redis client

69 views
Skip to first unread message

Peter Taoussanis

unread,
Jun 26, 2013, 11:23:50 AM6/26/13
to redi...@googlegroups.com

Hi folks!

For those that may be interested, a quick post to announce the 2.0 (beta) release of Carmine: https://github.com/ptaoussanis/carmine

Features:
* Small, uncomplicated all-Clojure library.
* Fully documented, up-to-date API, including full Redis 2.6 support.
* Great performance (same ballpark as Jedis).
* Industrial strength connection pooling.
* Composable, first-class command functions.
* Flexible, high-performance binary-safe serialization.
* Full support for Lua scripting, Pub/Sub, etc.
* Full support for custom reply parsing.
* Command helpers (atomically, lua-script, sort*, etc.).
* Ring session-store.
* Simple, high-performance message queue (Redis 2.6+, stable v2+).
* Simple, high-performance distributed lock (Redis 2.6+, stable v2+).
* Pluggable compression and encryption support. (v2+)
* Includes Tundra, an API for archiving cold data to an additional datastore. (Redis 2.6+, v2+)


For those into functional languages, I think Clojure gives a particularly nice environment for working with Redis. And the addition of Lua to Redis has been absolutely fantastic for opening up richer client-side possibilities.

Major additions in this release include:
* Improvements to the message queue API, incl. queue-wide and per-message exponential retry backoffs: http://goo.gl/lbPak.
* Improvements to the distributed locks API (this was inspired by a post from Josiah Carlson): http://goo.gl/Za1Ob.
* Support for pluggable compression & encryption.

There's also a new early/experimental API called 'Tundra' (https://github.com/ptaoussanis/carmine#tundra) that allows the use of an additional datastore for semi-automatically freezing cold keys. This provides one way to get around Redis' in-memory requirements. When keys go cold, they can be automatically shuttled off for storage on disk, and only reintroduced to memory if they become active again.

The API requires minimal guidance: you tell it when evictable keys are mutated, and when they're required to be present. Actually, I think this gives a nice experience since any blocking necessary to fetch keys is done client-side (where you can thread, etc.) - as opposed to on the Redis server side (ala Redis Virtual Memory).

Because of the way Carmine can automatically stash pending Redis server replies, you can actually use `ensure-ks` calls right within a pipeline as necessary.

Any K/V-capable datastore can be used (disk, SQL, etc.) - I've found DynamoDB provides a particularly good fit, so there's an implementation in the box.

Anyway, that's it for me. Very open to feedback if anyone has any. And thanks a ton to Salvatore and everyone else that's helped make Redis as awesome as it is. You guys rock. Cheers! :-)

- Peter Taoussanis (taoensso.com)

John Ervine

unread,
Nov 28, 2015, 11:28:16 AM11/28/15
to Redis DB
Is the tundra API still in beta?, as shown in the github page

Reply all
Reply to author
Forward
0 new messages