Conozca Redis
Introducción
Redis es un avanzado key-value cache y store, que opera en RAM, lo que permite un rápido acceso a la información, con respaldos periódicos en disco con lo que puede almacenar en forma persistente, aunque su gran limitante es que volumen de datos almacenados dependerá de la RAM disponible. Es OpenSource bajo licencia BSD. Catalogada como una base de datos NoSQL, permite almacenar datos por una llave con algún grado de estructura, entre los que cuentan:
- strings (ascii y binario)
- hashes
- listas
- sets
- sorted sets
- Mensajes de 1 a Muchos (Pub/Sub)
Algunos de los usos más comunes son:
- Caché (almacenamiento con tiempo de vida)
- Colas
- Mensajería entre procesos
- Seriales (incr)
- Acumuladores de estadísticas (incr/incrby)
Cuenta con librerías para ser utilizado por múltiples lenguajes, como C, Perl, PHP, Java, Ruby, Python y otros
Su página oficial es www.redis.io/
Instalación
Desde repositorio (yum)
Redis se encuentra disponible desde el repositorio EPEL en su versión 2.4.10 para CentOS 6 y 2.8.19 para CentOS 7, y solo restaría ejecutar como usuario root:
Compilar los fuentes
Instalando desde el código fuente, nos aseguramos de tener una versión más reciente, aunque a futuro deberemos encargarnos manualmente de realizar las actualizaciones y parchados pertinentes.
Deberemos comenzar por descargar los fuentes desde http://download.redis.io/releases/redis-3.0.0.tar.gz, actualmente (Mayo 2015) se dispone de la versión 3.0.0, la que incorpora funcionalidad de cluster. Para su compilación se requiere contar con los paquetes de desarrollo como gcc, make, kernel-devel, glibc, y para efectos de pruebas tcl
Procedemos a desempaquetar los fuentes, por lo pronto no se requiere de permiso "root", y de hecho solo se requiere para la instalación en el sistema, pero perfectamente podemos ejecutar una copia desde un usuario sin privilegios.
Desde el directorio redis-3.0.0 ejecutamos el comando make, en general no debiera dar errores, una vez que terminal la compilación podemos evaluar con comando make test (requiere tcl instalado).
En éste punte, tenemos los ejecutables en el directorio src con los nombres redis-server para el servidor, redis-cli para un cliente de línea de comandos y redis-benchmark para pruebas de rendimiento.
Los siguientes pasos son requeridos para dejarlo como servicio dentro del sistema y requieren ser ejecutados como root. Primeramente se copian los ejecutables en /usr/local/bin:
El último paso es la creación del script de arranque, para ello se debe ingresar al directorio utils y ejecutar el script install_server.sh, que nos consultará datos básicos para la instalación, lo que nos permite configurar múltiples instancias según el puerto utilizado
Welcome to the redis service installer This script will help you easily set up a running redis server Please select the redis port for this instance: [6379] Selecting default: 6379 Please select the redis config file name [/etc/redis/6379.conf] Selected default - /etc/redis/6379.conf Please select the redis log file name [/var/log/redis_6379.log] Selected default - /var/log/redis_6379.log Please select the data directory for this instance [/var/lib/redis/6379] Selected default - /var/lib/redis/6379 Please select the redis executable path [] /usr/local/bin/redis-server Selected config: Port : 6379 Config file : /etc/redis/6379.conf Log file : /var/log/redis_6379.log Data dir : /var/lib/redis/6379 Executable : /usr/local/bin/redis-server Cli Executable : /usr/local/bin/redis-cli Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Configuración básica
Al ejecutar el servidor redis-server, se puede especificar como primer parámetro el archivo de configuración a utilizar, en caso contrario se utilizará /etc/redis.conf. Según la instalación, su configuración puede ser indicada en el script de arranque del servicio. Utilizando la instación con el script install-server, el archivo utilizado será /etc/redis/6379.conf.
... ################################ GENERAL ##################################### # By default Redis does not run as a daemon. Use 'yes' if you need it. # Note that Redis will write a pid file in /var/run/redis.pid when daemonized. daemonize yes # When running daemonized, Redis writes a pid file in /var/run/redis.pid by # default. You can specify a custom pid file location here. pidfile /var/run/redis_6379.pid # Accept connections on the specified port, default is 6379. # If port 0 is specified Redis will not listen on a TCP socket. port 6379 # TCP listen() backlog. # # In high requests-per-second environments you need an high backlog in order # to avoid slow clients connections issues. Note that the Linux kernel # will silently truncate it to the value of /proc/sys/net/core/somaxconn so # make sure to raise both the value of somaxconn and tcp_max_syn_backlog # in order to get the desired effect. tcp-backlog 511 # By default Redis listens for connections from all the network interfaces # available on the server. It is possible to listen to just one or multiple # interfaces using the "bind" configuration directive, followed by one or # more IP addresses. # # Examples: # # bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 ... ################################ SNAPSHOTTING ################################ # # Save the DB on disk: # # save# # Will save the DB if both the given number of seconds and the given # number of write operations against the DB occurred. # # In the example below the behaviour will be to save: # after 900 sec (15 min) if at least 1 key changed # after 300 sec (5 min) if at least 10 keys changed # after 60 sec if at least 10000 keys changed # # Note: you can disable saving completely by commenting out all "save" lines. # # It is also possible to remove all the previously configured save # points by adding a save directive with a single empty string argument # like in the following example: # # save "" save 900 1 save 300 10 save 60 10000 ... # The filename where to dump the DB dbfilename dump.rdb # The working directory. # # The DB will be written inside this directory, with the filename specified # above using the 'dbfilename' configuration directive. # # The Append Only File will also be created inside this directory. # # Note that you must specify a directory here, not a file name. dir /var/lib/redis/6379 ... ################################## SECURITY ################################### # Require clients to issue AUTH before processing any other # commands. This might be useful in environments in which you do not trust # others with access to the host running redis-server. # # This should stay commented out for backward compatibility and because most # people do not need auth (e.g. they run their own servers). # # Warning: since Redis is pretty fast an outside user can try up to # 150k passwords per second against a good box. This means that you should # use a very strong password otherwise it will be very easy to break. # # requirepass foobared ...
El archivo anterior a sido recortado con objeto de destacar y comentar las opciones de uso más común:
- daemonize
- use "yes" para indicar que quiere ejecutar como servidor sin ser atado a un terminal, en caso contrario indique "no" y su terminal quedará tomado por la aplicación desplegando las salidas de log, lo que puede ser de utilidad para depuración.
- port
- Indica el puerto TCP donde el servicio será atendido
- bind
- indica la (o las) IP(s) por donde se atenderá el servicio, en el caso se aplicaciones cerradas dentro del servidor se recomienda utilizar 127.0.0.1 con que se evita accesos externos indeseados.
- save
- Puede ser indicado múltiples veces, especificando criterios para volcar los datos en RAM hacia disco
dejarlo permanente (en caso de pérdida de energía), primero se especifica la cantidad de segundos y luego la cantidad de cambios reqeridos para forzar la grabación. Por ejemplo si nuestro servicio no tiene muchos cambios, pero nos interesa tenerlos en disco por fallas eléctricas, podremos definir:
save 300 1 save 60 5
Con ello se graba en disco al producirse 5 cambios en 1 minuto, o 1 cambio en 5 minutos, con lo que nos aseguramos a lo más se perderán los datos de los últimos 5 minutos. - requirepass
- especifica una password de acceso al servicio, un único nivel muy básico de seguridad, el que a su vez es muy vulnerable dado que se puede encontrar por "fuerza bruta" dado que podrían validarse del órden de 150.000 claves por segundo.
Generado por Sistema y almacenado en cache
Wyzer Luis Hernán de la Barra |
|
Teléfono: | +56995451689 |
WhatsApp: | +56995451689 |
E-Mail: | info@wyzer.cl |
Web: | www.wyzer.cl |