March 2014 – Septeni Technology
• Memcache-ish in-memory key/value store
• But values are complex data types:
o sorted sets
o hash tables
• And it has persistence.
• Open source; very helpful and friendly community.
• Used in the real world: pinterest, github, craigslist,
Key Features and Cool Stuff
• Master/Slave Replication
• All data is eventually persistent
• Handles huge workloads easily
• Variety of Supported Languages
• Support for atomic operations, transactions
• Has pub/sub functionality
Lists are your ordinary linked lists.
You can push and pop at both sides, extract range, resize..
BLPOP: Blocking POP - wait until a list has elements and pop
them. Useful for realtime stuff.
Sets are an unordered collection of Strings
Sets can be intersected/diffed /union'ed server side.
Can be useful as keys when building complex schemata.
Same as sets, but with score per element
Ranked ranges, aggregation of scores on INTERSECT
Can be used as ordered keys in complex schemata
Think timestamps, inverted index, geohashing, ip ranges
• Hash tables as values
• Think of an object store with atomic access to object
PubSub - Publish/Subscribe
• Clients can subscribe to channels or patterns and receive
• Notifications when messages are sent to channels.
• Use cases: chats, notifycation, real-time applications..
Show latest items listings in your home page
This is a live in-memory cache and is very fast. LPUSH is
used to insert a content ID at the head of the list stored
at a key. LTRIM is used to limit the number of items in
the list to 5000. If the user needs to page beyond this
cache only then are they sent to the database.
Leaderboards and related problems
A leader board is a set sorted by score. The ZADD
commands implements this directly and the
ZREVRANGE command can be used to get the top 100
users by score and ZRANK can be used to get a users
rank. Very direct and easy.
Keeping stats of all kinds is
common, say you want to know
when to block an IP addresss. The
INCRBY command makes it easy to
atomically keep counters; GETSET
to atomically clear the counter; the
expire attribute can be used to tell
when an key should be deleted.