June 16, 2017·4 min read·engineeringvalkeyrediscommunitymodules

Redis meetups compare application patterns and server extensions

June's London, Paris, and Seattle meetups discuss prediction serving, data grids, and application workloads. Lua and modules raise a related question about where Redis functionality should live.

Redis users can extend an application by changing client code, composing server operations, or adding commands to the server itself. The June meetup report puts those choices next to concrete workloads. Predictive-model serving and in-memory data grids appear alongside Lua, modules, caching, and background tasks. The useful connection is how each approach assigns responsibility between Redis and its callers.

Tague Griffith's 16 June report covers gatherings in London, Paris, and Seattle during that week. It is a community report, without a new server release or a single proposed architecture. Its technical interest comes from the different ways speakers use and extend the same database.

I like Redis's combination of data structures and direct operations. Seeing several application patterns discussed together is useful because the same familiar command interface can conceal different amounts of logic in the client and server. A module-based prediction service and a client-side data-grid abstraction make different deployment choices even if both communicate with Redis.

London discusses serving and abstraction

The London event took place at CodeNode. Griffith describes his own talk as addressing Redis-based solutions to problems with predictive models in production. Rui Gu from the Redisson team followed with a talk about Redis as an in-memory data grid. Those descriptions establish the subjects, without supplying a benchmark or a complete implementation for either presentation.

Prediction serving illustrates one reason to put specialized operations near stored state. An application wants an answer from a model, and the system must decide where to retain and evaluate that model. A data-grid abstraction addresses how applications organize distributed data access. These are different questions, so the report should not be read as endorsing a single design for both.

The report also describes the gathering as an opportunity to plan more London events. That is a concrete community outcome. It does not establish adoption figures for either technical approach, and the short account gives no basis for inventing them.

Paris places Lua beside modules

François Cerbelle's Paris presentation covered Lua scripting, modules, and differences between open-source Redis and Redis Enterprise. Griffith specifically mentions a demonstration of several ways to implement transactions and of functionality added through modules. The report does not enumerate those transaction examples, so their exact semantics cannot be reconstructed from the account alone.

The distinction between scripting and modules can nevertheless be explained from contemporary project documentation. The module introduction shipped with 4.0 RC3 describes dynamic libraries that register new commands through the C API in redismodule.h. A module loads at startup or through MODULE LOAD, and the server exposes MODULE LIST to enumerate what is loaded.

This means a module is a server dependency. The application needs a Redis instance containing the relevant library, not merely a client capable of sending an existing core command. The introductory documentation identifies API version 1 and says the module interface is still alpha, with details subject to change.

Lua has a different operational boundary. The 3.2.9 configuration documents a script time limit of 5,000 milliseconds, after which Redis logs a warning and starts replying to queries with errors while the script continues. The comments distinguish killing a script that has not written from handling one that already issued writes.

That does not make scripting unsuitable. It establishes that moving application work into Redis changes how long-running work affects the service. The Paris subjects are therefore connected by a practical design question about which logic belongs in the server and how that logic behaves while clients share it.

I find the comparison useful because extension mechanisms carry operational meaning. Loading native commands and executing a script are concrete capabilities with different dependencies. Discussing both alongside transaction techniques gives users reasons to examine those differences before choosing an implementation.

Seattle starts with application workloads

The Seattle meeting covered caching and background work in a talk by Dmitry Polyakovsky of SnapRaise, with rate limiting also discussed. Daniel Hochman of Lyft repeated a RedisConf17 presentation about geospatial indexing at scale. Griffith gives the presentation title but does not reproduce its architecture or measurements in this report.

These subjects show why the client-server boundary cannot be chosen from the database name alone. A cache, a job system, and a geospatial application each need application-specific rules around the stored data. The meetup account identifies those use cases without demonstrating that Redis alone implements every rule involved.

The Seattle section also invites local developers to speak or host future events. Together with the London planning discussion, that gives the report an identifiable community purpose. Developers can compare implementations and bring the operational details of their own workloads into later meetings.

The June account documents discussion across these different approaches. Its strongest technical connection is the placement of behavior around Redis, including native extensions and scripts as well as application libraries. The contemporary module and scripting documentation supplies the constraints behind that discussion, while the meetup report records which workloads and mechanisms the speakers actually addressed.