Announced at RedisConf 2016, Redis Modules broaden functionality in ways previously only accessible to core developers. It could make Redis even more useful -- or it could turning Redis into a product that tries to be all things to all people.
Getting to the core of the matter
Redis Modules, as described in detail in a blog post by project lead Salvatore Sanfilippo, has been gestating since Redis 1.0 debuted seven years ago. The idea is to make Redis extensible, so additional functionalities or data structures can be snapped into it.
The big challenge was how to do this without making the modules too dependent on the core of the app -- and without freezing the development of the core. Sanfilippo split the difference and created an API that "works as an intermediate layer for ... low-level access [to Redis' innards]", which he characterized as "tricky, but definitely possible."
Redis Modules is a work in progress, but Sanfilippo took the time to write an introduction and basic API documentation. The code is still in Redis' "unstable" branch, and the API itself is not slated to be made part of Redis 4.0. (Future plans also include a modules directory where developers can showcase their modules.)
"However," wrote Sanfilippo in his post, "it is already enough to do a lot of things, and my colleagues did very interesting things, from inverted indexes to authentication systems."
The plan: Go big without going off-base
From the beginning, Redis was designed to be a flexible in-memory key-value store that supports many kinds of data structures, backed by disk storage. That made it appealing as a lightweight substitute for NoSQL database solutions.
The design of Redis Modules doesn't come off as an attempt to make Redis into, say, a challenger for MongoDB, nor is it similar to other database products that have tried to expand their reach by adding document-store functionality.
Instead, it complements what Redis is already trying to achieve. Nothing is stopping a developer from using the functionality in Modules to add features, but that won't likely change the overall direction of the product's core development.
If Redis Modules exert any influence, it'll likely be on the ambitions of the Redis developer base, since this addition provides easy access to core functionality. Previously, this was only possible by rewriting Redis from inside out or by implementing add-ons in ways that would incur a major hit in performance.