Valkey es un almacén clave-valor en memoria nacido en 2024 como fork de Redis 7.2.4, mantenido por la Linux Foundation con licencia BSD. Habla el mismo protocolo que Redis, así que las librerías cliente y los comandos existentes funcionan sin cambios. En este tutorial compilarás la última versión estable de Valkey en Ubuntu 24.04, la ejecutarás como servicio systemd con contraseña y persistencia en disco, y verás cómo migrar los datos de un Redis existente.
Requisitos previos
- Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath.
- Un usuario no root con privilegios
sudo. - Al menos 1 GB de RAM. Valkey guarda todo el conjunto de datos en memoria, así que dimensiona la RAM según el volumen que vayas a almacenar.
Paso 1: Instalar las dependencias de compilación
Compilar desde el código fuente te da la última versión estable, con soporte TLS e integración con systemd. Instala el compilador y las librerías de desarrollo de OpenSSL y systemd:
sudo apt update
sudo apt install build-essential pkg-config libssl-dev libsystemd-dev curl
Paso 2: Descargar y compilar Valkey
Consulta la última versión estable en la página de releases de Valkey y guárdala en una variable. En este ejemplo se usa la 9.1.2:
VALKEY_VERSION=9.1.2
cd /tmp
curl -fsSL -o valkey.tar.gz "https://github.com/valkey-io/valkey/archive/refs/tags/${VALKEY_VERSION}.tar.gz"
tar xzf valkey.tar.gz
cd "valkey-${VALKEY_VERSION}"
Compila con TLS integrado (BUILD_TLS=yes) y soporte para notificar a systemd cuando el servidor está listo (USE_SYSTEMD=yes):
make -j"$(nproc)" BUILD_TLS=yes USE_SYSTEMD=yes
La compilación tarda uno o dos minutos. Instala los binarios en /usr/local/bin:
sudo make install
Comprueba la versión:
valkey-server --version
Valkey server v=9.1.2 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=5b2f8c1e7a9d3c40
Paso 3: Crear el usuario y los directorios
Valkey debe ejecutarse con su propio usuario sin privilegios. Crea el usuario, el directorio de datos y el de configuración:
sudo useradd --system --home-dir /var/lib/valkey --shell /usr/sbin/nologin valkey
sudo install -d -o valkey -g valkey -m 0750 /var/lib/valkey
sudo install -d -o root -g valkey -m 0750 /etc/valkey
Copia la configuración de ejemplo que viene con el código fuente. Como contendrá la contraseña, solo root y el grupo valkey podrán leerla:
sudo install -o root -g valkey -m 0640 valkey.conf /etc/valkey/valkey.conf
Paso 4: Configurar Valkey
Genera una contraseña aleatoria y apúntala; la necesitarás en el archivo de configuración y en tus aplicaciones:
openssl rand -base64 32
Abre la configuración:
sudo nano /etc/valkey/valkey.conf
Busca cada una de estas directivas (con Ctrl+W en nano) y déjalas con estos valores. Sustituye your_strong_password por la contraseña generada:
bind 127.0.0.1 -::1
protected-mode yes
port 6379
supervised systemd
dir /var/lib/valkey
requirepass your_strong_password
appendonly yes
maxmemory 512mb
maxmemory-policy allkeys-lru
bind 127.0.0.1 -::1hace que Valkey escuche solo en localhost, que es lo seguro si la aplicación está en el mismo servidor.dires donde se guardan los snapshots RDB y el directorio del AOF.appendonly yesregistra cada escritura en disco, de modo que tras un reinicio pierdes como mucho un segundo de datos (políticaappendfsync everysecpor defecto).maxmemorylimita la memoria usada. Conallkeys-lruValkey expulsa las claves menos usadas al llegar al límite, lo adecuado para una caché. Si Valkey guarda datos que no pueden perderse (colas, sesiones), usanoeviction: las escrituras fallarán al llenarse en lugar de borrar datos.
Paso 5: Ajustar el kernel
Valkey crea un proceso hijo al guardar a disco, y con la configuración por defecto de Linux esa operación puede fallar con poca memoria libre. Activa vm.overcommit_memory como recomienda el propio servidor al arrancar:
echo 'vm.overcommit_memory = 1' | sudo tee /etc/sysctl.d/60-valkey.conf
sudo sysctl --system
Comprueba el valor:
sysctl vm.overcommit_memory
vm.overcommit_memory = 1
Paso 6: Crear el servicio systemd
Crea la unidad basada en la que incluye Valkey en utils/:
sudo nano /etc/systemd/system/valkey.service
[Unit]
Description=Valkey data structure server
Documentation=https://valkey.io/docs/
Wants=network-online.target
After=network-online.target
[Service]
Type=notify
User=valkey
Group=valkey
ExecStart=/usr/local/bin/valkey-server /etc/valkey/valkey.conf --supervised systemd --daemonize no
LimitNOFILE=10032
NoNewPrivileges=yes
UMask=0077
Restart=on-failure
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/var/lib/valkey
[Install]
WantedBy=multi-user.target
Type=notify hace que systemd espere a que Valkey haya cargado los datos antes de marcar el servicio como activo; por eso se compiló con USE_SYSTEMD=yes. Arranca el servicio:
sudo systemctl daemon-reload
sudo systemctl enable --now valkey
sudo systemctl status valkey --no-pager
● valkey.service - Valkey data structure server
Loaded: loaded (/etc/systemd/system/valkey.service; enabled; preset: enabled)
Active: active (running) since Fri 2026-09-25 10:20:41 UTC; 3s ago
Los mensajes del servidor van al journal: sudo journalctl -u valkey -n 30.
Paso 7: Probar la conexión
Conéctate con valkey-cli. La opción --askpass pide la contraseña sin que quede en el historial de la shell:
valkey-cli --askpass
Dentro de la consola, prueba algunas operaciones:
127.0.0.1:6379> PING
PONG
127.0.0.1:6379> SET saludo "hola desde valkey" EX 3600
OK
127.0.0.1:6379> GET saludo
"hola desde valkey"
127.0.0.1:6379> TTL saludo
(integer) 3597
Comprueba qué versión se reporta. Valkey mantiene el campo redis_version fijo en 7.2.4 para que los clientes que lo consultan sigan funcionando, y añade valkey_version:
127.0.0.1:6379> INFO server
# Server
redis_version:7.2.4
server_name:valkey
valkey_version:9.1.2
Sin contraseña, cualquier comando devuelve (error) NOAUTH Authentication required., lo que confirma que requirepass está activo.
Para scripts y aplicaciones, valkey-cli también lee la contraseña de la variable VALKEYCLI_AUTH (y de REDISCLI_AUTH, por compatibilidad). En tu aplicación basta con cambiar la URL de conexión a redis://:[email protected]:6379/0; los clientes de Redis funcionan igual.
Paso 8: Migrar datos desde Redis (opcional)
Valkey carga directamente los archivos RDB de Redis 7.2 y anteriores, que incluyen el Redis 7.0 del paquete redis-server de Ubuntu 24.04. Los RDB de Redis 7.4 o posterior usan un formato más nuevo que Valkey rechaza por defecto (directiva rdb-version-check strict); con rdb-version-check relaxed Valkey intenta cargarlos igualmente, pero falla si el archivo contiene tipos de datos que no conoce, así que pruébalo antes en una copia.
Si Redis corre en el mismo servidor, fuerza un snapshot con todos los datos y detén Redis para liberar el puerto 6379 (añade -a o --askpass si tu Redis tiene contraseña):
redis-cli SAVE
sudo systemctl disable --now redis-server
Detén Valkey y borra el AOF vacío que creó en el primer arranque; si lo dejas, Valkey lo cargaría en lugar del RDB:
sudo systemctl stop valkey
sudo rm -rf /var/lib/valkey/appendonlydir
Copia el snapshot de Redis con el propietario correcto:
sudo install -o valkey -g valkey -m 0640 /var/lib/redis/dump.rdb /var/lib/valkey/dump.rdb
Desactiva temporalmente el AOF para que Valkey arranque leyendo el RDB:
sudo sed -i 's/^appendonly yes/appendonly no/' /etc/valkey/valkey.conf
sudo systemctl start valkey
Compara el número de claves con el que tenía Redis (redis-cli DBSIZE antes de pararlo):
valkey-cli --askpass DBSIZE
(integer) 18342
Cuando cuadre, vuelve a activar el AOF en caliente (Valkey lo reconstruye a partir de los datos en memoria) y deja la configuración como estaba:
valkey-cli --askpass CONFIG SET appendonly yes
sudo sed -i 's/^appendonly no/appendonly yes/' /etc/valkey/valkey.conf
Revisa sudo journalctl -u valkey -n 20 y confirma que aparece un mensaje de reescritura del AOF completada. Si Redis estaba en otro servidor, copia su dump.rdb con scp y sigue los mismos pasos.
Paso 9: Permitir conexiones remotas (opcional)
Si tu aplicación está en otro servidor, lo más seguro es conectarla por una red privada. Añade la IP privada del servidor de Valkey (your_private_ip) a bind en /etc/valkey/valkey.conf:
bind 127.0.0.1 -::1 your_private_ip
Reinicia y permite el puerto solo desde la IP de la aplicación (your_app_ip):
sudo systemctl restart valkey
sudo ufw allow from your_app_ip to any port 6379 proto tcp
Nunca expongas el puerto 6379 a Internet sin filtrar, aunque tenga contraseña: es uno de los puertos más escaneados.
Solución de problemas
- El servicio queda en
activatingy acaba fallando: el binario se compiló sinUSE_SYSTEMD=yes, así que nunca avisa a systemd. Recompila con esa opción o cambia la unidad aType=simple. Can't open the append only fileoPermission denied:/var/lib/valkeydebe pertenecer avalkey. Corrígelo consudo chown -R valkey:valkey /var/lib/valkey.Address already in use: otro proceso (normalmente Redis) ocupa el 6379. Compruébalo consudo ss -ltnp | grep 6379.OOM command not allowed when used memory > 'maxmemory': se alcanzó el límite con la políticanoeviction. Subemaxmemoryo revisa qué claves ocupan memoria convalkey-cli --askpass --bigkeys.
Conclusión
Valkey está funcionando en Ubuntu 24.04 como servicio systemd, protegido con contraseña, con persistencia AOF y compatible con tus clientes de Redis. Como siguientes pasos, activa TLS con las directivas tls-port, tls-cert-file y tls-key-file (el binario ya incluye soporte), sustituye requirepass por usuarios ACL con permisos por comando y, si necesitas alta disponibilidad, configura una réplica con replicaof.
