Video
Learn more
Among the features of RedisGears 2.0 is the V8 JavaScript Engine. You can experiment with it in the RedisGears 2.0. Here’s what to expect.
Redis is famous for its ease of use, its low latency – and the company’s dedication to improving product features and code quality. For example, we added scripting and functions so programmers could execute business logic within a database, with triggers called by an external service or user. Now it’s time to add more.
With triggered functions in RedisGears, you can register business logic that reacts to Redis keyspace notifications. Triggered functions are similar to stored procedures that run when specific actions occur, such as when changes are made to data. An event, such as adding a key-value, fires the trigger’s execution. The difference between a triggered function and a user-defined function is that a trigger is automatically invoked when a triggering event occurs.
RedisGears brings the trigger and execution of your business logic into your database, so it does not have to be duplicated across multiple services and applications. The functions are executed synchronously and without latency.
For example, when an order is placed in an e-commerce application, RedisGears can react to the changed data and update the number of available items in inventory. Or when a database receives data from multiple applications, a developer can embed the transformation logic in RedisGears to normalize the data. That ensures all those feeder applications apply the exact same logic. Consistency is a good thing, especially for code maintenance.
With the second milestone release of RedisGears 2.0, we are introducing support for the V8 JavaScript engine. V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++. This JavaScript Engine, once generally available (GA), will be available in Redis Cloud and will become part of Redis Stack. It will make triggered functions available by default for Redis Cloud instances.
V8 enables you to use Redis to run code where your data is without network overhead using JavaScript. In the coming weeks, we will publish several blog posts in which we introduce RedisGears’s new capabilities and concepts as we work towards RedisGears 2.0’s general availability.
The initial milestone release focuses on functions that are executed on database triggers so that your code can react when Redis fires an event. The most common events that are apt to trigger a function are Redis keyspace notifications. But its usefulness goes far beyond that; most advanced data structures in Redis Stack also publish their events.
Two special events are not always triggered by a command:
To deploy a function, the developer provides a single JavaScript file. This is easy enough for small projects, but it gets harder to maintain as projects grow and become more complex. Happily, the JavaScript community has excellent deployment tools, as explained in a tutorial on how to set up webpack for RedisGears2.0.
Make sure you use JavaScript libraries that are compatible with the V8 engine. Browser and nodejs-specific global objects are not available in the V8 engine.
We start with the prototypical Hello World example. We use a simple script with the shebang (#!) that defines the library name and a function where we define the logic.
#!js name=lib
redis.register_function('hello_world', function(){
return 'hello_world';
});
Now, load that data into Redis:
> redis-cli -x RG.FUNCTION LOAD < ./example.js
And execute it with the library and method name:
> redis-cli RG.FCALL lib hello_world
We need to register a notification consumer with Redis before the software can react with a function on a database event.
The consumer expects three arguments:
The callback function can include two arguments:
The key_raw provides an ArrayBuffer for the key that triggered the event, when the key_raw can be decoded to a string the key is filled in. The event type is returned in event_name.
The full signature looks like this:
redis.register_notifications_consumer(‘consumer_example_name’, ‘keyprefix’, function(client, data){
// function logic
});
To run a function on all changes, we include an empty string in the keyprefix.
redis.register_notifications_consumer(‘consumer_add_version’, ‘’, function(client, data) {
if(client.call(‘type’, data.key) != ‘hash’) {
return;
}
client.call(‘hincrby’, data.key, ‘__version__’, 1);
});
In this example, we make sure that the event was fired for a hash data type. If not, we stop the function. If it is a hash data type, we use the hincrby command to create or increment the value of the version property on the hash.
This shows that we can retrieve information from the key and command that was executed to trigger the function and execute Redis commands within RedisGears functions.
Redis v7.0.3 or above is required to start using RedisGears2.0. A Docker image is available, so you can begin using it immediately.
docker pull redislabs/redisgears:edge
docker run -p 6379:6379 redislabs/redisgears:edge
If you encounter an issue or potential improvements in the milestone release, please get in touch via the RedisGears GitHub repository. We want to hear about your experiences!
Experience Redis Enterprise Cloud for free.