En aquest tema, aprendrem com crear mòduls personalitzats per Redis. Els mòduls de Redis permeten ampliar la funcionalitat del servidor Redis amb noves comandes i tipus de dades. Això és especialment útil quan necessitem funcionalitats específiques que no estan disponibles en Redis per defecte.

  1. Introducció als Mòduls de Redis

Què és un Mòdul de Redis?

Un mòdul de Redis és una biblioteca que s'integra amb el servidor Redis per proporcionar funcionalitats addicionals. Els mòduls poden afegir noves comandes, nous tipus de dades i altres funcionalitats avançades.

Avantatges dels Mòduls de Redis

  • Extensibilitat: Permeten afegir funcionalitats específiques sense esperar que s'incloguin en el nucli de Redis.
  • Rendiment: Els mòduls s'executen dins del mateix procés que Redis, oferint un rendiment molt alt.
  • Flexibilitat: Poden ser desenvolupats en C o C++ i altres llenguatges compatibles amb C.

  1. Configuració de l'Entorn de Desenvolupament

Requisits Previs

  • Redis 4.0 o superior.
  • Compilador C (com gcc).
  • Coneixements bàsics de programació en C.

Instal·lació de Redis

Si encara no tens Redis instal·lat, pots seguir les instruccions del Mòdul 1 per instal·lar-lo.

Estructura del Projecte

Organitza el teu projecte de mòdul de Redis de la següent manera:

my_redis_module/
├── src/
│   └── my_module.c
├── Makefile
└── README.md

  1. Creant el Primer Mòdul

Exemple de Codi: my_module.c

#include "redismodule.h"

// Funció que s'executa quan es crida la comanda "hello"
int HelloCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
    if (argc != 2) {
        return RedisModule_WrongArity(ctx);
    }
    RedisModule_ReplyWithSimpleString(ctx, "Hello, Redis!");
    return REDISMODULE_OK;
}

// Funció d'inicialització del mòdul
int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
    if (RedisModule_Init(ctx, "mymodule", 1, REDISMODULE_APIVER_1) == REDISMODULE_ERR) {
        return REDISMODULE_ERR;
    }
    if (RedisModule_CreateCommand(ctx, "mymodule.hello", HelloCommand, "readonly", 1, 1, 1) == REDISMODULE_ERR) {
        return REDISMODULE_ERR;
    }
    return REDISMODULE_OK;
}

Explicació del Codi

  • Incloure la Biblioteca de Redis: #include "redismodule.h"
  • Funció de la Comanda: HelloCommand és la funció que s'executa quan es crida la comanda mymodule.hello.
  • Funció d'Inicialització: RedisModule_OnLoad és la funció que inicialitza el mòdul. Registra el mòdul i la comanda mymodule.hello.

Makefile

REDIS_MODULE_NAME = mymodule
REDIS_MODULE_SO = $(REDIS_MODULE_NAME).so
REDIS_MODULE_SRC = src/my_module.c

all:
    gcc -fPIC -shared -o $(REDIS_MODULE_SO) $(REDIS_MODULE_SRC) -I/path/to/redis/src

clean:
    rm -f $(REDIS_MODULE_SO)

Compilació del Mòdul

make

  1. Carregant i Provant el Mòdul

Carregar el Mòdul en Redis

redis-server --loadmodule ./mymodule.so

Provar la Nova Comanda

redis-cli
127.0.0.1:6379> mymodule.hello
"Hello, Redis!"

  1. Exercicis Pràctics

Exercici 1: Afegir una Nova Comanda

Crea una nova comanda mymodule.goodbye que retorni el missatge "Goodbye, Redis!".

Solució

int GoodbyeCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
    if (argc != 2) {
        return RedisModule_WrongArity(ctx);
    }
    RedisModule_ReplyWithSimpleString(ctx, "Goodbye, Redis!");
    return REDISMODULE_OK;
}

int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
    if (RedisModule_Init(ctx, "mymodule", 1, REDISMODULE_APIVER_1) == REDISMODULE_ERR) {
        return REDISMODULE_ERR;
    }
    if (RedisModule_CreateCommand(ctx, "mymodule.hello", HelloCommand, "readonly", 1, 1, 1) == REDISMODULE_ERR) {
        return REDISMODULE_ERR;
    }
    if (RedisModule_CreateCommand(ctx, "mymodule.goodbye", GoodbyeCommand, "readonly", 1, 1, 1) == REDISMODULE_ERR) {
        return REDISMODULE_ERR;
    }
    return REDISMODULE_OK;
}

Exercici 2: Afegir un Paràmetre a la Comanda

Modifica la comanda mymodule.hello per acceptar un paràmetre i retornar "Hello, [paràmetre]!".

Solució

int HelloCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
    if (argc != 2) {
        return RedisModule_WrongArity(ctx);
    }
    size_t len;
    const char *name = RedisModule_StringPtrLen(argv[1], &len);
    RedisModule_ReplyWithFormat(ctx, "Hello, %s!", name);
    return REDISMODULE_OK;
}

  1. Conclusió

En aquest tema, hem après com crear mòduls personalitzats per Redis. Hem vist com configurar l'entorn de desenvolupament, escriure el codi del mòdul, compilar-lo i carregar-lo en Redis. També hem practicat amb exercicis per reforçar els conceptes apresos. Amb aquests coneixements, pots començar a crear mòduls personalitzats per adaptar Redis a les teves necessitats específiques.

© Copyright 2024. Tots els drets reservats