鈫怉tras

Introducci贸n a Redis parte 1

15 octubre, 2021

5 minutos de lectura

馃捇 DevelopmentRedis

驴Ves alg煤n error o quieres modificar algo? Haz una Pull Request

Introduci贸n a redis

Hace unos meses comenc茅 a estudiar sobre la base de datos open source bajo la licencia BSD redis . En la actualidad es utilizada como base de datos, cach茅 y brokers de mensajer铆a.

Redis proporciona diferentes estructuras de datos como "strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes, and streams". Proporciona alta disponibildad a trav茅s de redis sentinel y particiones autom谩ticas a trav茅s de redis cluster.

Redis trabaja siguiendo el concepto de in-memory dataset (almacenamiento en memoria) y en dependencia de nuestro caso de uso es posible configurar la opci贸n de persistir los datos en intervalos de tiempo en el disco duro.

Otras caracter铆sticas:

  • Transacciones
  • Pub/sub
  • Lua scriptings
  • Claves con tiempo de vida (TTL)
  • Conmutaci贸n por error autom谩tica (Automatic failover)

El objetivo de esta serie de post relacionados con redis es introducir en nuestro d铆a a d铆a esta base de datos tan potente haciendo uso de los lenguajes de programaci贸n como golang y nodejs como runtime de ejecuci贸n de *javascript desde el lado del servidor.

Bien, pues comenzamos con esta serie empezando por el proceso de instalaci贸n.

Instalaci贸n

Si deseas una instalaci贸n 100% r谩pida te recomiendo ejecutar el siguiente comando en sistemas operativos tipo Debian/Ubuntu


sudo apt update
sudo apt install redis-server

# Via snap
sudo snap install redis

En lo personal me gusta instalarlo de forma manual siguiendo este conjunto de comandos y procedimientos y estos son los que quiero compartirte.

  • Instalaci贸n de utilidades y herramientas de configuraci贸n

# Install basic text editors
sudo apt install vim -y

# Install build tools and utilities
sudo apt install build-essential tcl tcl-tls redis-tools libssl-dev wget curl make cmake -y
  • Agregar usuario redis y carpetas para sus configuraciones las cuales ser谩n utilizadas durante el proceso de instalaci贸n y descarga.

# add user for redis
sudo adduser --system --group --no-create-home redis && \
    chsh -s /bin/bash redis

# create folders for redis
sudo mkdir -p /data/redis
sudo chown redis:redis /data/redis
sudo chmod 770 /data/redis
sudo mkdir -p /var/log/redis
sudo mkdir /etc/redis
sudo touch /var/log/redis/redis.log
sudo chmod 770 /var/log/redis/
sudo chmod 640 /var/log/redis/redis.log
sudo chown redis:redis /var/log/redis
sudo chown redis:redis /var/log/redis/redis.log

  • A la fecha de este tutorial vamos a usar la siguiente versi贸n de redis-download disponible en su sitio web. Como dato curioso si retomamos el proceso de instalaci贸n de las herramientas iniciales se instalaron paquetes como libssl-dev tcl tcl-tls con el objetivo de compilar nuestro redis con soporte a SSL.

#Download redis
cd /tmp && \
    wget http://download.redis.io/releases/redis-6.2.6.tar.gz && \
    tar -xzvf redis-6.2.6.tar.gz && \
    cd redis-6.2.6 && \
    BUILD_TLS=yes make install

# Copy redis.conf file to /etc/redis
cd /tmp/redis-6.2.6 && \
    cp redis.conf /etc/redis && \
    chown -R redis:redis /etc/redis && \
    chmod 640 /etc/redis/redis.conf

Configuraci贸n y ejecuci贸n como servicio de linux

Accedemos al archivo de configuraci贸n mediante la terminal de l铆neas de comando. Dentro de este archivo de configuraci贸n redis.conf es donde podremos definir el comportamiento de nuestra instacia de redis, en art铆culos posteriores trabajaremos a fondo con este archivo.

sudo vim /etc/redis/redis.conf

. . .

# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
#   supervised no      - no supervision interaction
#   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
#   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
#   supervised auto    - detect upstart or systemd method based on
#                        UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
#       They do not enable continuous liveness pings back to your supervisor.
supervised systemd

. . .

Crear nuestro archivo redis.service


sudo vim /lib/systemd/system/redis.service

....


    1 # example systemd service unit file for redis-server
    2 #
    3 # In order to use this as a template for providing a redis service in your
    4 # environment, _at the very least_ make sure to adapt the redis configuration
    5 # file you intend to use as needed (make sure to set "supervised systemd"), and
    6 # to set sane TimeoutStartSec and TimeoutStopSec property values in the unit's
    7 # "[Service]" section to fit your needs.
    8 #
    9 # Some properties, such as User= and Group=, are highly desirable for virtually
   10 # all deployments of redis, but cannot be provided in a manner that fits all
   11 # expectable environments. Some of these properties have been commented out in
   12 # this example service unit file, but you are highly encouraged to set them to
   13 # fit your needs.
   14 #
   15 # Please refer to systemd.unit(5), systemd.service(5), and systemd.exec(5) for
   16 # more information.
   17 
   18 [Unit]
   19 Description=Redis data structure server
   20 Documentation=https://redis.io/documentation
   21 #Before=your_application.service another_example_application.service
   22 #AssertPathExists=/var/lib/redis
   23 Wants=network-online.target
   24 After=network-online.target
   25 
   26 [Service]
   27 ExecStart=/usr/local/bin/redis-server --supervised systemd --daemonize no
   28 ## Alternatively, have redis-server load a configuration file:
   29 #ExecStart=/usr/local/bin/redis-server /path/to/your/redis.conf
   30 LimitNOFILE=10032
   31 NoNewPrivileges=yes
   32 #OOMScoreAdjust=-900
   33 #PrivateTmp=yes
   34 Type=notify
   35 TimeoutStartSec=infinity
   36 TimeoutStopSec=infinity
   37 UMask=0077
   38 User=redis
   39 Group=redis
   40 #WorkingDirectory=/var/lib/redis
   41 
   42 [Install]
   43 WantedBy=multi-user.target


Una vez creado nuestro fichero redis.services procedemos a ejecutar y chequear el estado de nuestro servicio


# start and enable redis service
sudo systemctl start redis.service -now
# check status redis service
sudo systemctl status redis

En fin, s茅 que ha sido largo este tutorial pero no podemos dejar pasar por alto nuestro comando de prueba para comprobar que el servicio se encuentre activo.


redis-cli

127.0.0.1:6379> ping
# output
PONG

Llegado a este punto ya nos encontramos en condiciones para usar nuestra base de datos en futuros proyectos. Por lo que en pr贸ximos art铆culos estaremos abordando temas como seguridad, clusters y desarrollo de aplicaciones. Espero que te sea de utilidad este contenido y nos vemos en el pr贸ximo cap铆tulo.

Recursos

2022 @kenriortega web page. All rights reserved