Introducción a Redis · Parte 1
Introducción a Redis parte 1
Una introducción práctica a Redis, sus principales características y su instalación manual como servicio en Linux.
- Redis
- Linux
- Bases de datos
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-tlscon 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
- Redis sitio oficial
- Cómo instalar y proteger Redis en Ubuntu 20.04
- RU330 curso de redis
- Ejemplo de redis service usado en este tutorial