Redis was announced by Salvatore Sanfilippo (antirez) on March 6, 2009, in a blog post titled “Redis, my new open source project.” He described it as “a key-value database, but it is a bit different than memcachedb,” because the value need not be a plain string: “the value can be a String data type, but even a List or a Set.” From the start you could push and pop list elements and perform set intersections directly in the store.
What set Redis apart from earlier key-value caches was this menu of server-side data structures. The project’s own about page lists strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes, and streams as built-in types. That richness lets application logic that would otherwise live in the client run inside the database as atomic operations.
To reach its speed, Redis keeps the working data in RAM. The about page states plainly that “to achieve top performance, Redis works with an in-memory dataset,” and that durability is layered on top by “periodically dumping the dataset to disk” or by “appending each command to a disk-based log.” It is written in ANSI C and runs on most POSIX systems.
Beyond caching, the same about page describes transactions, publish/subscribe messaging, Lua scripting, key time-to-live, LRU eviction, automatic failover, and asynchronous replication. Those features let Redis serve at once as a cache, a message broker, and a primary database, which is a large part of why it became one of the most widely used and well-liked data stores.