September 22, 2021·4 min read·engineeringvalkeyredisexamplessearch

Redis Launchpad makes application data models easier to inspect

Redis Launchpad collects more than 75 example applications. Its own hash-and-search architecture illustrates the distinction between storing application metadata and indexing it for discovery.

A command reference explains an operation, but an application shows which data model makes that operation useful. Redis Launchpad collects those larger examples in a searchable hub. The interesting implementation detail is that the catalogue uses a Redis hash model and a search index itself. Its architecture makes a useful distinction between identifying one record and discovering records by their contents.

The September 22 announcement introduces more than 75 sample applications. It describes examples across languages and Redis modules, with filtering that includes commands. The catalogue ingests marketplace.json metadata from repositories into Redis hashes, then uses RediSearch for search and filtering. A Node.js backend serves a Next.js frontend. This is a specific application of Redis and an additional search component, rather than a new core server release.

I have used Redis since its early releases, and concrete data models are how I prefer to assess its broader uses. A sample is useful when it exposes the keys, fields and queries behind the interface. Launchpad's own catalogue supplies a small example of why direct key lookup and content search are different requirements.

Hashes give a record named fields

The Redis 6.2.5 hash implementation shows how a hash accepts multiple field-value pairs through HSET. The command looks up or creates the hash, then processes the pairs. Its integer reply counts newly created fields, which differs from the success reply used by the older HMSET form.

A minimal illustrative catalogue record can use that existing core command:

HSET app:example name "Example application" language "JavaScript"
HMGET app:example name language

These commands illustrate a record shape, not Launchpad's exact key naming. The read requests particular fields from one identified hash. In the source, HMGET returns values in the order of the requested fields. An absent field returns a null value, and a nonexistent hash behaves as an empty hash for this operation.

That missing-field behavior matters to a metadata importer. A record with no language value and a missing record can both yield null for a requested field. The application needs to retain which question it asked and what other information it has about the key. A field lookup is not a complete validation of the application's metadata contract.

The implementation also checks the stored object's type. A key holding another Redis type is not silently interpreted as a hash. This gives the data model a concrete requirement. The application and importer must agree that catalogue keys contain hash values with the expected fields.

Search adds a different representation

The RediSearch 2.0 README describes compressed inverted indexes represented through a special data type. It explicitly distinguishes the search engine from approaches built only from ordinary Redis sorted sets. Its documented capabilities include fielded full-text queries, numeric filters and exact-match tag fields.

The same README lists automatic indexing of existing hash keys as documents. That links the catalogue's storage choice to its discovery requirements. The hash remains a place for named metadata values, while the index provides another way to locate relevant records without knowing their exact Redis keys.

Fuzzy matching and exact tags also have different purposes. The documented fuzzy-search capability can support approximate text input. Tag fields support exact-match filtering. A catalogue's interface can combine such operations, but the distinction belongs in its schema and query design. Treating every metadata value as interchangeable text would obscure the intended matching behavior.

The module README also names sortable properties and an aggregation engine. These are relevant capabilities for catalogue-like applications, although their presence in the module does not prove that Launchpad uses every one. The announcement identifies its search and filtering architecture. The module documentation explains the kinds of indexed operations available to that architecture.

The announcement also describes a review step for catalogue additions. Contributors supply clear instructions and metadata with the hidden flag initially set. The maintainers review and fork the repository before making the entry visible. This means discovery depends on a curated metadata workflow, rather than every repository becoming searchable merely because it contains Redis code.

An example needs its actual dependencies

RediSearch is a separate component with its own documented license and deployment characteristics. Its 2.0 README identifies a source-available license and describes distributed cluster support as an enterprise offering at that point. A sample depending on module commands therefore needs more than a connection to an arbitrary core Redis server.

I find Launchpad useful as a way to discover those concrete dependencies as well as the application idea. An example can reveal whether its read path is a core hash lookup or a module search query. The catalogue's own design uses both, with a metadata importer populating hashes and a search layer supporting discovery across the resulting records.